blob: 8e695f2fdfd9abc6918347aed3d6e9dcf7fae5cd [file] [log] [blame]
iomodo5e0dc112021-03-25 20:49:55 +04001package rest
2
3import (
4 "net/http"
5
6 "github.com/gorilla/mux"
7)
8
9const APIURLSuffix = "/api/v1"
10
11type Routers struct {
12 Root *mux.Router // ''
13 APIRoot *mux.Router // 'api/v1'
14 Users *mux.Router // 'api/v1/users'
15 User *mux.Router // 'api/v1/users/{user_id:[A-Za-z0-9]+}'
16}
17
18func NewRouter(root *mux.Router) *Routers {
19 apiRoot := root.PathPrefix(APIURLSuffix).Subrouter()
20 users := apiRoot.PathPrefix("/users").Subrouter()
21 user := apiRoot.PathPrefix("/users/{user_id:[A-Za-z0-9]+}").Subrouter()
22
23 routers := &Routers{
24 Root: root,
25 APIRoot: apiRoot,
26 Users: users,
27 User: user,
28 }
29 root.Handle("/api/v1/{anything:.*}", http.HandlerFunc(http.NotFound))
30 routers.initUsers()
31
32 return routers
33}
34
35func (r *Routers) initUsers() {
36 r.Users.Handle("", http.HandlerFunc(createUser)).Methods("POST")
37 r.Users.Handle("", http.HandlerFunc(getUsers)).Methods("GET")
38 r.User.Handle("", http.HandlerFunc(getUser)).Methods("GET")
39}