package api import ( "net/http" "github.com/gin-gonic/gin" "github.com/tcs-iptv/tcs/internal/httpx" "github.com/tcs-iptv/tcs/internal/model" "github.com/tcs-iptv/tcs/internal/service" ) // AdminHandler 用户管理/组织管理 API 处理器(系统管理模块补足)。 type AdminHandler struct { admin *service.AdminService } // NewAdminHandler 创建用户/组织管理 API 处理器。 func NewAdminHandler(admin *service.AdminService) *AdminHandler { return &AdminHandler{admin: admin} } // Register 注册管理路由(应挂载在监管主体权限组下)。 func (h *AdminHandler) Register(rg *gin.RouterGroup) { // 组织管理 rg.POST("/admin/orgs", h.createOrg) rg.PUT("/admin/orgs/:id", h.updateOrg) rg.GET("/admin/orgs", h.listOrgs) rg.GET("/admin/orgs/:id", h.getOrg) rg.POST("/admin/orgs/:id/disable", h.disableOrg) // 用户管理 rg.POST("/admin/users", h.createUser) rg.PUT("/admin/users/:id", h.updateUser) rg.GET("/admin/users", h.listUsers) rg.GET("/admin/users/:id", h.getUser) rg.POST("/admin/users/:id/disable", h.disableUser) rg.POST("/admin/users/:id/reset-key", h.resetAPIKey) } // ---- 组织管理 handlers ---- func (h *AdminHandler) createOrg(c *gin.Context) { var org model.Organization if err := c.ShouldBindJSON(&org); err != nil { httpx.Error(c, http.StatusBadRequest, "INVALID_REQUEST", err.Error()) return } result, err := h.admin.CreateOrg(org) if err != nil { httpx.Error(c, http.StatusBadRequest, "CREATE_ORG_FAILED", err.Error()) return } httpx.Created(c, result) } func (h *AdminHandler) updateOrg(c *gin.Context) { orgID := c.Param("id") var updates model.Organization if err := c.ShouldBindJSON(&updates); err != nil { httpx.Error(c, http.StatusBadRequest, "INVALID_REQUEST", err.Error()) return } result, err := h.admin.UpdateOrg(orgID, updates) if err != nil { httpx.Error(c, http.StatusBadRequest, "UPDATE_ORG_FAILED", err.Error()) return } httpx.OK(c, result) } func (h *AdminHandler) getOrg(c *gin.Context) { orgID := c.Param("id") org, err := h.admin.GetOrg(orgID) if err != nil { httpx.Error(c, http.StatusNotFound, "NOT_FOUND", err.Error()) return } httpx.OK(c, org) } func (h *AdminHandler) listOrgs(c *gin.Context) { orgType := c.Query("type") orgs := h.admin.ListOrgs(orgType) httpx.OK(c, orgs) } func (h *AdminHandler) disableOrg(c *gin.Context) { orgID := c.Param("id") if err := h.admin.DisableOrg(orgID); err != nil { httpx.Error(c, http.StatusBadRequest, "DISABLE_ORG_FAILED", err.Error()) return } httpx.OK(c, gin.H{"status": "disabled"}) } // ---- 用户管理 handlers ---- func (h *AdminHandler) createUser(c *gin.Context) { var user model.User if err := c.ShouldBindJSON(&user); err != nil { httpx.Error(c, http.StatusBadRequest, "INVALID_REQUEST", err.Error()) return } result, err := h.admin.CreateUser(user) if err != nil { httpx.Error(c, http.StatusBadRequest, "CREATE_USER_FAILED", err.Error()) return } httpx.Created(c, result) } func (h *AdminHandler) updateUser(c *gin.Context) { userID := c.Param("id") var updates model.User if err := c.ShouldBindJSON(&updates); err != nil { httpx.Error(c, http.StatusBadRequest, "INVALID_REQUEST", err.Error()) return } result, err := h.admin.UpdateUser(userID, updates) if err != nil { httpx.Error(c, http.StatusBadRequest, "UPDATE_USER_FAILED", err.Error()) return } httpx.OK(c, result) } func (h *AdminHandler) getUser(c *gin.Context) { userID := c.Param("id") user, err := h.admin.GetUser(userID) if err != nil { httpx.Error(c, http.StatusNotFound, "NOT_FOUND", err.Error()) return } httpx.OK(c, user) } func (h *AdminHandler) listUsers(c *gin.Context) { orgID := c.Query("org_id") role := c.Query("role") users := h.admin.ListUsers(orgID, role) httpx.OK(c, users) } func (h *AdminHandler) disableUser(c *gin.Context) { userID := c.Param("id") if err := h.admin.DisableUser(userID); err != nil { httpx.Error(c, http.StatusBadRequest, "DISABLE_USER_FAILED", err.Error()) return } httpx.OK(c, gin.H{"status": "disabled"}) } func (h *AdminHandler) resetAPIKey(c *gin.Context) { userID := c.Param("id") user, err := h.admin.ResetAPIKey(userID) if err != nil { httpx.Error(c, http.StatusBadRequest, "RESET_KEY_FAILED", err.Error()) return } httpx.OK(c, user) }