turash/bugulma/backend/internal/routes/admin.go
2025-12-15 10:06:41 +01:00

135 lines
4.2 KiB
Go

package routes
import (
"bugulma/backend/internal/handler"
"bugulma/backend/internal/middleware"
"bugulma/backend/internal/service"
"github.com/gin-gonic/gin"
)
// RegisterAdminRoutes registers all admin routes
func RegisterAdminRoutes(
protected *gin.RouterGroup,
userHandler *handler.UserHandler,
orgAdminHandler *handler.OrganizationAdminHandler,
i18nHandler *handler.I18nHandler,
contentHandler *handler.ContentHandler,
adminHandler *handler.AdminHandler,
settingsHandler *handler.SettingsAdminHandler,
authService *service.AuthService,
) {
// All admin routes require authentication and admin role
admin := protected.Group("/admin")
// Apply AuthMiddleware first to set user_role in context
admin.Use(middleware.AuthMiddleware(authService))
// Then check for admin role
admin.Use(middleware.RequireRole("admin"))
// User Management
users := admin.Group("/users")
{
users.GET("", userHandler.ListUsers)
users.GET("/stats", userHandler.GetUserStats)
users.GET("/:id", userHandler.GetUser)
users.POST("", userHandler.CreateUser)
users.PUT("/:id", userHandler.UpdateUser)
users.PATCH("/:id/role", userHandler.UpdateRole)
users.PATCH("/:id/permissions", userHandler.UpdatePermissions)
users.DELETE("/:id", userHandler.DeactivateUser)
users.GET("/:id/activity", userHandler.GetUserActivity)
}
// Organization Management (Admin)
organizations := admin.Group("/organizations")
{
organizations.GET("/verification-queue", orgAdminHandler.GetVerificationQueue)
organizations.POST("/:id/verify", orgAdminHandler.VerifyOrganization)
organizations.POST("/:id/reject", orgAdminHandler.RejectVerification)
organizations.POST("/bulk-verify", orgAdminHandler.BulkVerify)
organizations.GET("/stats", orgAdminHandler.GetOrganizationStats)
}
// Localization Management (Admin)
i18n := admin.Group("/i18n")
{
// UI Translations
ui := i18n.Group("/ui")
{
ui.PUT("/:locale/:key", i18nHandler.UpdateUITranslation)
ui.POST("/bulk-update", i18nHandler.BulkUpdateUITranslations)
ui.POST("/auto-translate", i18nHandler.AutoTranslateMissing)
ui.GET("/:locale/keys", i18nHandler.GetTranslationKeys)
}
// Data Translations
data := i18n.Group("/data")
{
data.PUT("/:entityType/:entityID/:field/:locale", i18nHandler.UpdateDataTranslation)
data.POST("/bulk-translate", i18nHandler.BulkTranslateData)
data.GET("/:entityType/missing", i18nHandler.GetMissingTranslations)
}
}
// Content Management
content := admin.Group("/content")
{
// Static Pages
pages := content.Group("/pages")
{
pages.GET("", contentHandler.ListPages)
pages.GET("/:id", contentHandler.GetPage)
pages.POST("", contentHandler.CreatePage)
pages.PUT("/:id", contentHandler.UpdatePage)
pages.DELETE("/:id", contentHandler.DeletePage)
pages.POST("/:id/publish", contentHandler.PublishPage)
}
// Announcements
announcements := content.Group("/announcements")
{
announcements.GET("", contentHandler.ListAnnouncements)
announcements.GET("/:id", contentHandler.GetAnnouncement)
announcements.POST("", contentHandler.CreateAnnouncement)
announcements.PUT("/:id", contentHandler.UpdateAnnouncement)
announcements.DELETE("/:id", contentHandler.DeleteAnnouncement)
}
// Media Assets
media := content.Group("/media")
{
media.GET("", contentHandler.ListMediaAssets)
media.GET("/:id", contentHandler.GetMediaAsset)
media.POST("", contentHandler.CreateMediaAsset)
media.PUT("/:id", contentHandler.UpdateMediaAsset)
media.DELETE("/:id", contentHandler.DeleteMediaAsset)
}
}
// Dashboard & Analytics
dashboard := admin.Group("/dashboard")
{
dashboard.GET("/stats", adminHandler.GetDashboardStats)
dashboard.GET("/activity", adminHandler.GetRecentActivity)
}
analytics := admin.Group("/analytics")
{
analytics.GET("/organizations", adminHandler.GetOrganizationStats)
analytics.GET("/users", adminHandler.GetUserActivityStats)
analytics.GET("/matching", adminHandler.GetMatchingStats)
}
system := admin.Group("/system")
{
system.GET("/health", adminHandler.GetSystemHealth)
}
// Settings
settings := admin.Group("/settings")
{
settings.GET("/maintenance", settingsHandler.GetMaintenance)
settings.PUT("/maintenance", settingsHandler.SetMaintenance)
}
}