package api import ( "net/http" "strings" "github.com/gin-gonic/gin" "ws_usernode/internal/service" ) // UserHandler 外部用户接口(列表/详情/创建等,M1 填充 CRUD 与系统操作)。 type UserHandler struct { svc *service.UserService } // UserCreateRequest 管理员创建外部用户请求。 type UserCreateRequest struct { Username string `json:"username" binding:"required"` // 不含 ext_ 前缀 Email string `json:"email" binding:"required"` Supervisor string `json:"supervisor"` Purpose string `json:"purpose"` TTLDays int64 `json:"ttl_days"` // 0 表示用配置默认 } // Create 管理员创建外部用户(自动建系统账号)。 func (h *UserHandler) Create(c *gin.Context) { if h.svc == nil { fail(c, http.StatusNotImplemented, "用户服务未初始化") return } var req UserCreateRequest if err := c.ShouldBindJSON(&req); err != nil { fail(c, http.StatusBadRequest, "请求参数不合法: "+err.Error()) return } u, err := h.svc.Create(c.Request.Context(), req.Username, req.Email, req.Supervisor, req.Purpose, req.TTLDays*86400) if err != nil { switch { case strings.Contains(err.Error(), "用户名"): fail(c, http.StatusBadRequest, err.Error()) case strings.Contains(err.Error(), "已存在"): fail(c, http.StatusConflict, err.Error()) default: fail(c, http.StatusInternalServerError, err.Error()) } return } ok(c, gin.H{"id": u.ID, "username": u.Username, "status": u.Status}) } // List 用户列表(M1 实现分页筛选)。 func (h *UserHandler) List(c *gin.Context) { fail(c, http.StatusNotImplemented, "用户列表将在 M1 实现") }