Reorganized routes definitions
This commit is contained in:
15
backend/api/blogs_routes.go
Normal file
15
backend/api/blogs_routes.go
Normal 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")}},
|
||||||
|
}
|
||||||
24
backend/api/events_routes.go
Normal file
24
backend/api/events_routes.go
Normal 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}},
|
||||||
|
}
|
||||||
39
backend/api/media_routes.go
Normal file
39
backend/api/media_routes.go
Normal 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},
|
||||||
|
},
|
||||||
|
}
|
||||||
21
backend/api/permissions_routes.go
Normal file
21
backend/api/permissions_routes.go
Normal 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},
|
||||||
|
},
|
||||||
|
}
|
||||||
41
backend/api/roles_routes.go
Normal file
41
backend/api/roles_routes.go
Normal 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},
|
||||||
|
},
|
||||||
|
}
|
||||||
29
backend/api/shortcodes_routes.go
Normal file
29
backend/api/shortcodes_routes.go
Normal 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},
|
||||||
|
},
|
||||||
|
}
|
||||||
39
backend/api/users_routes.go
Normal file
39
backend/api/users_routes.go
Normal 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}},
|
||||||
|
}
|
||||||
167
backend/main.go
167
backend/main.go
@@ -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))
|
||||||
|
|||||||
13
backend/utils/merge_maps.go
Normal file
13
backend/utils/merge_maps.go
Normal 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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user