Reorganized routes definitions

This commit is contained in:
cdricms
2025-01-29 18:26:13 +01:00
parent 8110172a38
commit 2d5747ec08
9 changed files with 234 additions and 154 deletions

View File

@@ -0,0 +1,15 @@
package api
import (
"fr.latosa-escrima/api/blogs"
"fr.latosa-escrima/core"
)
var BlogsRoutes = map[string]core.Handler{
"/blogs/new": {
Handler: blogs.HandleNew,
Middlewares: []core.Middleware{Methods(("POST")), AuthJWT}},
"/blogs/{uuid}": {
Handler: blogs.HandleBlog,
Middlewares: []core.Middleware{Methods("GET")}},
}

View File

@@ -0,0 +1,24 @@
package api
import (
"fr.latosa-escrima/api/events"
"fr.latosa-escrima/core"
)
var EventsRoutes = map[string]core.Handler{
"/events": {
Handler: events.HandleEvents,
Middlewares: []core.Middleware{Methods("GET")}},
"/events/new": {
Handler: events.HandleNew,
Middlewares: []core.Middleware{Methods("POST"), AuthJWT}},
"/events/{event_uuid}": {
Handler: events.HandleEvent,
Middlewares: []core.Middleware{Methods("GET")}},
"/events/{event_uuid}/delete": {
Handler: events.HandleDelete,
Middlewares: []core.Middleware{Methods("DELETE"), AuthJWT}},
"/events/{event_uuid}/update": {
Handler: events.HandleUpdate,
Middlewares: []core.Middleware{Methods("PATCH"), AuthJWT}},
}

View File

@@ -0,0 +1,39 @@
package api
import (
"fr.latosa-escrima/api/media"
"fr.latosa-escrima/core"
)
var MediaRoutes = map[string]core.Handler{
"/media/upload": {
Handler: media.HandleUpload,
Middlewares: []core.Middleware{Methods("POST"), AuthJWT}},
"/media/verify": {
Handler: media.HandleVerify,
Middlewares: []core.Middleware{Methods("POST"), AuthJWT},
},
// Paginated media response
"/media/": {
Handler: media.HandleMedia,
Middlewares: []core.Middleware{Methods("GET")},
},
// Unique element
"/media/{media_uuid}": {
Handler: media.HandleMediaDetails,
Middlewares: []core.Middleware{Methods("GET")},
},
// Get the image, video, GIF etc.
"/media/{media_uuid}/file": {
Handler: media.HandleMediaFile,
Middlewares: []core.Middleware{Methods("GET")},
},
// "/media/{media_uuid}/update": {
// Handler: HandleGetMediaFile,
// Middlewares: []core.Middleware{Methods("PATCH"), AuthJWT},
// },
"/media/{media_uuid}/delete": {
Handler: media.HandleDelete,
Middlewares: []core.Middleware{Methods("DELETE"), AuthJWT},
},
}

View File

@@ -0,0 +1,21 @@
package api
import (
"fr.latosa-escrima/api/permissions"
"fr.latosa-escrima/core"
)
var PermissionsRoutes = map[string]core.Handler{
"/permissions": {
Handler: permissions.HandlePermissions,
Middlewares: []core.Middleware{Methods("GET"), AuthJWT},
},
"/permissions/{permission_id}": {
Handler: permissions.HandlePermission,
Middlewares: []core.Middleware{Methods("GET"), AuthJWT},
},
"/permissions/resources/{resource}": {
Handler: permissions.HandlePermissionsResource,
Middlewares: []core.Middleware{Methods("GET"), AuthJWT},
},
}

View File

@@ -0,0 +1,41 @@
package api
import (
"fr.latosa-escrima/api/roles"
"fr.latosa-escrima/core"
)
var RolesRoutes = map[string]core.Handler{
"/roles/": {
Handler: roles.HandleRoles,
Middlewares: []core.Middleware{Methods("GET"), AuthJWT},
},
"/roles/new": {
Handler: roles.HandleNew,
Middlewares: []core.Middleware{Methods("POST"), AuthJWT},
},
"/roles/{role_uuid}": {
Handler: roles.HandleRole,
Middlewares: []core.Middleware{Methods("GET"), AuthJWT},
},
"/roles/{role_uuid}/update": {
Handler: roles.HandleUpdate,
Middlewares: []core.Middleware{Methods("PATCH"), AuthJWT},
},
"/roles/{role_uuid}/delete": {
Handler: roles.HandleDelete,
Middlewares: []core.Middleware{Methods("DELETE"), AuthJWT},
},
"/roles/{role_uuid}/permissions/": {
Handler: roles.HandleRolePermissions,
Middlewares: []core.Middleware{Methods("GET"), AuthJWT},
},
"/roles/{role_uuid}/permissions/{permission_id}/add": {
Handler: roles.HandleAddPermission,
Middlewares: []core.Middleware{Methods("PATCH"), AuthJWT},
},
"/roles/{role_uuid}/permissions/{permission_id}/remove": {
Handler: roles.HandleRemovePermission,
Middlewares: []core.Middleware{Methods("PATCH"), AuthJWT},
},
}

View File

@@ -0,0 +1,29 @@
package api
import (
"fr.latosa-escrima/api/shortcodes"
"fr.latosa-escrima/core"
)
var ShortcodesRoutes = map[string]core.Handler{
"/shortcodes/new": {
Handler: shortcodes.HandleNew,
Middlewares: []core.Middleware{Methods("POST"), AuthJWT},
},
"/shortcodes/": {
Handler: shortcodes.HandleShortcodes,
Middlewares: []core.Middleware{Methods("GET"), AuthJWT},
},
"/shortcodes/{shortcode}": {
Handler: shortcodes.HandleShortcode,
Middlewares: []core.Middleware{Methods("GET")},
},
"/shortcodes/{shortcode}/delete": {
Handler: shortcodes.HandleDelete,
Middlewares: []core.Middleware{Methods("DELETE"), AuthJWT},
},
"/shortcodes/{shortcode}/update": {
Handler: shortcodes.HandleUpdate,
Middlewares: []core.Middleware{Methods("PATCH"), AuthJWT},
},
}

View File

@@ -0,0 +1,39 @@
package api
import (
"fr.latosa-escrima/api/users"
"fr.latosa-escrima/core"
)
var UserRoutes = map[string]core.Handler{
"/users/login": {
Handler: users.HandleLogin,
Middlewares: []core.Middleware{Methods("POST")}},
"/users/me": {
Handler: users.HandleMe,
Middlewares: []core.Middleware{Methods("GET"), AuthJWT}},
"/users": {
Handler: users.HandleUsers,
Middlewares: []core.Middleware{Methods("GET"), AuthJWT}},
"/users/new": {
Handler: users.HandleNew,
Middlewares: []core.Middleware{Methods("POST"), AuthJWT}},
"/users/{user_uuid}": {
Handler: users.HandleUser,
Middlewares: []core.Middleware{Methods("GET"), AuthJWT}},
"/users/{user_uuid}/delete": {
Handler: users.HandleDelete,
Middlewares: []core.Middleware{Methods("DELETE"), AuthJWT}},
"/users/{user_uuid}/update": {
Handler: users.HandleUpdate,
Middlewares: []core.Middleware{Methods("PATCH"), AuthJWT}},
"/users/{user_uuid}/roles": {
Handler: users.HandleRoles,
Middlewares: []core.Middleware{Methods("GET"), AuthJWT}},
"/users/{user_uuid}/roles/{role_id}/add": {
Handler: users.HandleAddRole,
Middlewares: []core.Middleware{Methods("PATCH"), AuthJWT}},
"/users/{user_uuid}/roles/{role_id}/remove": {
Handler: users.HandleRemoveRole,
Middlewares: []core.Middleware{Methods("PATCH"), AuthJWT}},
}

View File

@@ -12,14 +12,8 @@ import (
_ "github.com/lib/pq" _ "github.com/lib/pq"
"fr.latosa-escrima/api" "fr.latosa-escrima/api"
"fr.latosa-escrima/api/blogs"
"fr.latosa-escrima/api/events"
"fr.latosa-escrima/api/media"
"fr.latosa-escrima/api/permissions"
"fr.latosa-escrima/api/roles"
"fr.latosa-escrima/api/shortcodes"
"fr.latosa-escrima/api/users"
"fr.latosa-escrima/core" "fr.latosa-escrima/core"
"fr.latosa-escrima/utils"
"github.com/gorilla/csrf" "github.com/gorilla/csrf"
) )
@@ -70,155 +64,10 @@ func main() {
mux := http.NewServeMux() mux := http.NewServeMux()
core.HandleRoutes(mux, map[string]core.Handler{ baseRoutes := map[string]core.Handler{
"/": { "/": {
Handler: handler, Handler: handler,
Middlewares: []core.Middleware{api.Methods("get")}}, Middlewares: []core.Middleware{api.Methods("get")}},
"/users/login": {
Handler: users.HandleLogin,
Middlewares: []core.Middleware{api.Methods("POST")}},
"/users/me": {
Handler: users.HandleMe,
Middlewares: []core.Middleware{api.Methods("GET"), api.AuthJWT}},
"/users": {
Handler: users.HandleUsers,
Middlewares: []core.Middleware{api.Methods("GET"), api.AuthJWT}},
"/users/new": {
Handler: users.HandleNew,
Middlewares: []core.Middleware{api.Methods("POST"), api.AuthJWT}},
"/users/{user_uuid}": {
Handler: users.HandleUser,
Middlewares: []core.Middleware{api.Methods("GET"), api.AuthJWT}},
"/users/{user_uuid}/delete": {
Handler: users.HandleDelete,
Middlewares: []core.Middleware{api.Methods("DELETE"), api.AuthJWT}},
"/users/{user_uuid}/update": {
Handler: users.HandleUpdate,
Middlewares: []core.Middleware{api.Methods("PATCH"), api.AuthJWT}},
"/users/{user_uuid}/roles": {
Handler: users.HandleRoles,
Middlewares: []core.Middleware{api.Methods("GET"), api.AuthJWT}},
"/users/{user_uuid}/roles/{role_id}/add": {
Handler: users.HandleAddRole,
Middlewares: []core.Middleware{api.Methods("PATCH"), api.AuthJWT}},
"/users/{user_uuid}/roles/{role_id}/remove": {
Handler: users.HandleRemoveRole,
Middlewares: []core.Middleware{api.Methods("PATCH"), api.AuthJWT}},
"/events": {
Handler: events.HandleEvents,
Middlewares: []core.Middleware{api.Methods("GET")}},
"/events/new": {
Handler: events.HandleNew,
Middlewares: []core.Middleware{api.Methods("POST"), api.AuthJWT}},
"/events/{event_uuid}": {
Handler: events.HandleEvent,
Middlewares: []core.Middleware{api.Methods("GET")}},
"/events/{event_uuid}/delete": {
Handler: events.HandleDelete,
Middlewares: []core.Middleware{api.Methods("DELETE"), api.AuthJWT}},
"/events/{event_uuid}/update": {
Handler: events.HandleUpdate,
Middlewares: []core.Middleware{api.Methods("PATCH"), api.AuthJWT}},
"/blogs/new": {
Handler: blogs.HandleNew,
Middlewares: []core.Middleware{api.Methods(("POST")), api.AuthJWT}},
"/blogs/{uuid}": {
Handler: blogs.HandleBlog,
Middlewares: []core.Middleware{api.Methods("GET")}},
"/media/upload": {
Handler: media.HandleUpload,
Middlewares: []core.Middleware{api.Methods("POST"), api.AuthJWT}},
"/media/verify": {
Handler: media.HandleVerify,
Middlewares: []core.Middleware{api.Methods("POST"), api.AuthJWT},
},
// Paginated media response
"/media/": {
Handler: media.HandleMedia,
Middlewares: []core.Middleware{api.Methods("GET")},
},
// Unique element
"/media/{media_uuid}": {
Handler: media.HandleMediaDetails,
Middlewares: []core.Middleware{api.Methods("GET")},
},
// Get the image, video, GIF etc.
"/media/{media_uuid}/file": {
Handler: media.HandleMediaFile,
Middlewares: []core.Middleware{api.Methods("GET")},
},
// "/media/{media_uuid}/update": {
// Handler: api.HandleGetMediaFile,
// Middlewares: []core.Middleware{api.Methods("PATCH"), api.AuthJWT},
// },
"/media/{media_uuid}/delete": {
Handler: media.HandleDelete,
Middlewares: []core.Middleware{api.Methods("DELETE"), api.AuthJWT},
},
"/shortcodes/new": {
Handler: shortcodes.HandleNew,
Middlewares: []core.Middleware{api.Methods("POST"), api.AuthJWT},
},
"/shortcodes/": {
Handler: shortcodes.HandleShortcodes,
Middlewares: []core.Middleware{api.Methods("GET"), api.AuthJWT},
},
"/shortcodes/{shortcode}": {
Handler: shortcodes.HandleShortcode,
Middlewares: []core.Middleware{api.Methods("GET")},
},
"/shortcodes/{shortcode}/delete": {
Handler: shortcodes.HandleDelete,
Middlewares: []core.Middleware{api.Methods("DELETE"), api.AuthJWT},
},
"/shortcodes/{shortcode}/update": {
Handler: shortcodes.HandleUpdate,
Middlewares: []core.Middleware{api.Methods("PATCH"), api.AuthJWT},
},
"/roles/": {
Handler: roles.HandleRoles,
Middlewares: []core.Middleware{api.Methods("GET"), api.AuthJWT},
},
"/roles/new": {
Handler: roles.HandleNew,
Middlewares: []core.Middleware{api.Methods("POST"), api.AuthJWT},
},
"/roles/{role_uuid}": {
Handler: roles.HandleRole,
Middlewares: []core.Middleware{api.Methods("GET"), api.AuthJWT},
},
"/roles/{role_uuid}/update": {
Handler: roles.HandleUpdate,
Middlewares: []core.Middleware{api.Methods("PATCH"), api.AuthJWT},
},
"/roles/{role_uuid}/delete": {
Handler: roles.HandleDelete,
Middlewares: []core.Middleware{api.Methods("DELETE"), api.AuthJWT},
},
"/permissions": {
Handler: permissions.HandlePermissions,
Middlewares: []core.Middleware{api.Methods("GET"), api.AuthJWT},
},
"/permissions/{permission_id}": {
Handler: permissions.HandlePermission,
Middlewares: []core.Middleware{api.Methods("GET"), api.AuthJWT},
},
"/permissions/resources/{resource}": {
Handler: permissions.HandlePermissionsResource,
Middlewares: []core.Middleware{api.Methods("GET"), api.AuthJWT},
},
"/roles/{role_uuid}/permissions/": {
Handler: roles.HandleRolePermissions,
Middlewares: []core.Middleware{api.Methods("GET"), api.AuthJWT},
},
"/roles/{role_uuid}/permissions/{permission_id}/add": {
Handler: roles.HandleAddPermission,
Middlewares: []core.Middleware{api.Methods("PATCH"), api.AuthJWT},
},
"/roles/{role_uuid}/permissions/{permission_id}/remove": {
Handler: roles.HandleRemovePermission,
Middlewares: []core.Middleware{api.Methods("PATCH"), api.AuthJWT},
},
"/contact": { "/contact": {
Handler: api.HandleContact, Handler: api.HandleContact,
Middlewares: []core.Middleware{api.Methods("POST"), CSRFMiddleware}, Middlewares: []core.Middleware{api.Methods("POST"), CSRFMiddleware},
@@ -227,7 +76,17 @@ func main() {
Handler: api.HandleCSRF, Handler: api.HandleCSRF,
Middlewares: []core.Middleware{api.Methods("GET"), CSRFMiddleware}, Middlewares: []core.Middleware{api.Methods("GET"), CSRFMiddleware},
}, },
}) }
routes := utils.MergeMaps(
baseRoutes,
api.UserRoutes,
api.BlogsRoutes,
api.EventsRoutes,
api.MediaRoutes,
api.PermissionsRoutes,
api.RolesRoutes,
api.ShortcodesRoutes)
core.HandleRoutes(mux, routes)
fmt.Printf("Serving on port %s\n", port) fmt.Printf("Serving on port %s\n", port)
err = http.ListenAndServe(fmt.Sprintf(":%s", port), api.CORS(mux)) err = http.ListenAndServe(fmt.Sprintf(":%s", port), api.CORS(mux))

View File

@@ -0,0 +1,13 @@
package utils
func MergeMaps[K comparable, V any](maps ...map[K]V) map[K]V {
merged := make(map[K]V)
for _, m := range maps {
for k, v := range m {
merged[k] = v
}
}
return merged
}