| iomodo | 5e0dc11 | 2021-03-25 20:49:55 +0400 | [diff] [blame] | 1 | package rest |
| 2 | |
| 3 | import ( |
| 4 | "net/http" |
| 5 | |
| iomodo | a19d479 | 2021-03-26 00:27:25 +0400 | [diff] [blame] | 6 | "github.com/giolekva/pcloud/core/kg/common" |
| iomodo | 5e0dc11 | 2021-03-25 20:49:55 +0400 | [diff] [blame] | 7 | "github.com/gorilla/mux" |
| 8 | ) |
| 9 | |
| 10 | const APIURLSuffix = "/api/v1" |
| 11 | |
| iomodo | a19d479 | 2021-03-26 00:27:25 +0400 | [diff] [blame] | 12 | type Router struct { |
| 13 | App common.AppIface |
| 14 | Logger common.LoggerIface |
| 15 | |
| iomodo | 5e0dc11 | 2021-03-25 20:49:55 +0400 | [diff] [blame] | 16 | Root *mux.Router // '' |
| 17 | APIRoot *mux.Router // 'api/v1' |
| 18 | Users *mux.Router // 'api/v1/users' |
| 19 | User *mux.Router // 'api/v1/users/{user_id:[A-Za-z0-9]+}' |
| 20 | } |
| 21 | |
| iomodo | a19d479 | 2021-03-26 00:27:25 +0400 | [diff] [blame] | 22 | func NewRouter(root *mux.Router, app common.AppIface, logger common.LoggerIface) *Router { |
| iomodo | 5e0dc11 | 2021-03-25 20:49:55 +0400 | [diff] [blame] | 23 | apiRoot := root.PathPrefix(APIURLSuffix).Subrouter() |
| 24 | users := apiRoot.PathPrefix("/users").Subrouter() |
| 25 | user := apiRoot.PathPrefix("/users/{user_id:[A-Za-z0-9]+}").Subrouter() |
| 26 | |
| iomodo | a19d479 | 2021-03-26 00:27:25 +0400 | [diff] [blame] | 27 | routers := &Router{ |
| 28 | App: app, |
| 29 | Logger: logger, |
| 30 | |
| iomodo | 5e0dc11 | 2021-03-25 20:49:55 +0400 | [diff] [blame] | 31 | Root: root, |
| 32 | APIRoot: apiRoot, |
| 33 | Users: users, |
| 34 | User: user, |
| 35 | } |
| iomodo | a19d479 | 2021-03-26 00:27:25 +0400 | [diff] [blame] | 36 | |
| iomodo | 5e0dc11 | 2021-03-25 20:49:55 +0400 | [diff] [blame] | 37 | root.Handle("/api/v1/{anything:.*}", http.HandlerFunc(http.NotFound)) |
| 38 | routers.initUsers() |
| 39 | |
| 40 | return routers |
| 41 | } |
| 42 | |
| iomodo | a19d479 | 2021-03-26 00:27:25 +0400 | [diff] [blame] | 43 | func (router *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) { |
| 44 | router.Root.ServeHTTP(w, req) |
| iomodo | 5e0dc11 | 2021-03-25 20:49:55 +0400 | [diff] [blame] | 45 | } |