161 lines
4.2 KiB
Go
161 lines
4.2 KiB
Go
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)
|
|
}
|