| iomodo | 5e0dc11 | 2021-03-25 20:49:55 +0400 | [diff] [blame^] | 1 | package rest |
| 2 | |
| 3 | import ( |
| 4 | "net/http" |
| 5 | |
| 6 | "github.com/gorilla/mux" |
| 7 | ) |
| 8 | |
| 9 | const APIURLSuffix = "/api/v1" |
| 10 | |
| 11 | type 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 | |
| 18 | func 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 | |
| 35 | func (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 | } |