From 2d5747ec08b1eb5628d1b1d12427d983cbaf0b68 Mon Sep 17 00:00:00 2001 From: cdricms <36056008+cdricms@users.noreply.github.com> Date: Wed, 29 Jan 2025 18:26:13 +0100 Subject: [PATCH] Reorganized routes definitions --- backend/api/blogs_routes.go | 15 +++ backend/api/events_routes.go | 24 +++++ backend/api/media_routes.go | 39 +++++++ backend/api/permissions_routes.go | 21 ++++ backend/api/roles_routes.go | 41 ++++++++ backend/api/shortcodes_routes.go | 29 ++++++ backend/api/users_routes.go | 39 +++++++ backend/main.go | 167 +++--------------------------- backend/utils/merge_maps.go | 13 +++ 9 files changed, 234 insertions(+), 154 deletions(-) create mode 100644 backend/api/blogs_routes.go create mode 100644 backend/api/events_routes.go create mode 100644 backend/api/media_routes.go create mode 100644 backend/api/permissions_routes.go create mode 100644 backend/api/roles_routes.go create mode 100644 backend/api/shortcodes_routes.go create mode 100644 backend/api/users_routes.go create mode 100644 backend/utils/merge_maps.go diff --git a/backend/api/blogs_routes.go b/backend/api/blogs_routes.go new file mode 100644 index 0000000..a2fe32d --- /dev/null +++ b/backend/api/blogs_routes.go @@ -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")}}, +} diff --git a/backend/api/events_routes.go b/backend/api/events_routes.go new file mode 100644 index 0000000..32c8846 --- /dev/null +++ b/backend/api/events_routes.go @@ -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}}, +} diff --git a/backend/api/media_routes.go b/backend/api/media_routes.go new file mode 100644 index 0000000..87db6f6 --- /dev/null +++ b/backend/api/media_routes.go @@ -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}, + }, +} diff --git a/backend/api/permissions_routes.go b/backend/api/permissions_routes.go new file mode 100644 index 0000000..f7584c0 --- /dev/null +++ b/backend/api/permissions_routes.go @@ -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}, + }, +} diff --git a/backend/api/roles_routes.go b/backend/api/roles_routes.go new file mode 100644 index 0000000..d8e08ab --- /dev/null +++ b/backend/api/roles_routes.go @@ -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}, + }, +} diff --git a/backend/api/shortcodes_routes.go b/backend/api/shortcodes_routes.go new file mode 100644 index 0000000..2d5cbfd --- /dev/null +++ b/backend/api/shortcodes_routes.go @@ -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}, + }, +} diff --git a/backend/api/users_routes.go b/backend/api/users_routes.go new file mode 100644 index 0000000..4635371 --- /dev/null +++ b/backend/api/users_routes.go @@ -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}}, +} diff --git a/backend/main.go b/backend/main.go index 67e5153..7e0e4ba 100644 --- a/backend/main.go +++ b/backend/main.go @@ -12,14 +12,8 @@ import ( _ "github.com/lib/pq" "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/utils" "github.com/gorilla/csrf" ) @@ -70,155 +64,10 @@ func main() { mux := http.NewServeMux() - core.HandleRoutes(mux, map[string]core.Handler{ + baseRoutes := map[string]core.Handler{ "/": { Handler: handler, 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": { Handler: api.HandleContact, Middlewares: []core.Middleware{api.Methods("POST"), CSRFMiddleware}, @@ -227,7 +76,17 @@ func main() { Handler: api.HandleCSRF, 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) err = http.ListenAndServe(fmt.Sprintf(":%s", port), api.CORS(mux)) diff --git a/backend/utils/merge_maps.go b/backend/utils/merge_maps.go new file mode 100644 index 0000000..7437cbd --- /dev/null +++ b/backend/utils/merge_maps.go @@ -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 +}