package admin import ( "net/http" "strconv" "time" "bindbox-game/internal/code" "bindbox-game/internal/pkg/core" "bindbox-game/internal/pkg/validation" "bindbox-game/internal/service/user" ) type batchUsersRequest struct { Count int `json:"count" binding:"min=1,max=1000"` } type batchUsersResponse struct { Users []batchUserItem `json:"users"` } type batchUserItem struct { ID int64 `json:"id"` Nickname string `json:"nickname"` OpenID string `json:"open_id"` Avatar string `json:"avatar"` } func (h *handler) BatchCreateUsers() core.HandlerFunc { return func(ctx core.Context) { var req batchUsersRequest if err := ctx.ShouldBindJSON(&req); err != nil { ctx.AbortWithError(core.Error(http.StatusBadRequest, code.ParamBindError, validation.Error(err))) return } users := make([]batchUserItem, 0, req.Count) for i := 0; i < req.Count; i++ { nickname := "用户" + strconv.Itoa(i+1) + "_" + strconv.FormatInt(time.Now().UnixNano()%10000, 10) openID := "batch_" + strconv.FormatInt(time.Now().UnixNano(), 10) avatar := "https://trae-api-sg.mchost.guru/api/ide/v1/text_to_image?prompt=avatar&image_size=square" u, err := h.user.CreateUser(ctx.RequestContext(), user.CreateUserInput{ Nickname: nickname, OpenID: openID, Avatar: avatar, }) if err != nil { ctx.AbortWithError(core.Error(http.StatusBadRequest, code.CreateUserError, err.Error())) return } users = append(users, batchUserItem{ ID: u.ID, Nickname: u.Nickname, OpenID: u.Openid, Avatar: u.Avatar, }) } ctx.Payload(&batchUsersResponse{Users: users}) } } func (h *handler) BatchDeleteUsers() core.HandlerFunc { return func(ctx core.Context) { var req struct { UserIDs []int64 `json:"user_ids" binding:"required,min=1,max=1000,dive,min=1"` } if err := ctx.ShouldBindJSON(&req); err != nil { ctx.AbortWithError(core.Error(http.StatusBadRequest, code.ParamBindError, validation.Error(err))) return } if ctx.SessionUserInfo().IsSuper != 1 { ctx.AbortWithError(core.Error(http.StatusBadRequest, code.DeleteUserError, "禁止操作")) return } for _, uid := range req.UserIDs { if err := h.user.DeleteUser(ctx.RequestContext(), uid); err != nil { ctx.AbortWithError(core.Error(http.StatusBadRequest, code.DeleteUserError, err.Error())) return } } ctx.Payload(&simpleMessageResponse{Message: "操作成功"}) } }