mirror of
https://github.com/SamyRai/turash.git
synced 2025-12-26 23:01:33 +00:00
127 lines
4.0 KiB
Go
127 lines
4.0 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,
|
|
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)
|
|
}
|
|
}
|