package handler import ( "dianshang/internal/service" "dianshang/pkg/response" "dianshang/pkg/utils" "strconv" "github.com/gin-gonic/gin" ) // AdminHandler 管理员处理器 type AdminHandler struct { adminService *service.AdminService } // NewAdminHandler 创建管理员处理器 func NewAdminHandler(adminService *service.AdminService) *AdminHandler { return &AdminHandler{ adminService: adminService, } } // Login 管理员登录 func (h *AdminHandler) Login(c *gin.Context) { var req service.LoginRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "请求参数错误") return } result, err := h.adminService.Login(&req) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, result) } // Logout 管理员退出登录 func (h *AdminHandler) Logout(c *gin.Context) { // 由于使用JWT token,服务端无状态,只需要返回成功响应 // 客户端会清除本地存储的token response.Success(c, gin.H{ "message": "退出登录成功", }) } // CreateAdmin 创建管理员 func (h *AdminHandler) CreateAdmin(c *gin.Context) { var req service.CreateAdminRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "请求参数错误") return } admin, err := h.adminService.CreateAdmin(&req) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, admin) } // GetAdminList 获取管理员列表 func (h *AdminHandler) GetAdminList(c *gin.Context) { page := utils.StringToInt(c.DefaultQuery("page", "1")) pageSize := utils.StringToInt(c.DefaultQuery("page_size", "10")) keyword := c.Query("keyword") if page <= 0 { page = 1 } if pageSize <= 0 || pageSize > 100 { pageSize = 10 } admins, total, err := h.adminService.GetAdminList(page, pageSize, keyword) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } // 构建分页响应 pagination := utils.NewPagination(page, pageSize) pagination.Total = total response.Success(c, gin.H{ "list": admins, "pagination": pagination, }) } // GetAdminDetail 获取管理员详情 func (h *AdminHandler) GetAdminDetail(c *gin.Context) { idStr := c.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.BadRequest(c, "无效的管理员ID") return } admin, err := h.adminService.GetAdminByID(uint(id)) if err != nil { response.ErrorWithMessage(c, response.ERROR, "管理员不存在") return } response.Success(c, admin) } // UpdateAdmin 更新管理员 func (h *AdminHandler) UpdateAdmin(c *gin.Context) { idStr := c.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.BadRequest(c, "无效的管理员ID") return } var req service.UpdateAdminRequest if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "请求参数错误") return } if err := h.adminService.UpdateAdmin(uint(id), &req); err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, nil) } // DeleteAdmin 删除管理员 func (h *AdminHandler) DeleteAdmin(c *gin.Context) { idStr := c.Param("id") id, err := strconv.ParseUint(idStr, 10, 32) if err != nil { response.BadRequest(c, "无效的管理员ID") return } // 获取当前管理员ID,防止删除自己 currentAdminID, exists := c.Get("user_id") if exists && currentAdminID.(uint) == uint(id) { response.BadRequest(c, "不能删除自己") return } if err := h.adminService.DeleteAdmin(uint(id)); err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, nil) } // ChangePassword 修改密码 func (h *AdminHandler) ChangePassword(c *gin.Context) { var req struct { OldPassword string `json:"old_password" binding:"required"` NewPassword string `json:"new_password" binding:"required,min=6"` } if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "请求参数错误") return } adminID, exists := c.Get("user_id") if !exists { response.Unauthorized(c) return } if err := h.adminService.ChangePassword(adminID.(uint), req.OldPassword, req.NewPassword); err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, nil) } // GetProfile 获取管理员个人信息 func (h *AdminHandler) GetProfile(c *gin.Context) { adminID, exists := c.Get("user_id") if !exists { response.Unauthorized(c) return } admin, err := h.adminService.GetProfile(adminID.(uint)) if err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, admin) } // UpdateProfile 更新管理员个人信息 func (h *AdminHandler) UpdateProfile(c *gin.Context) { var req struct { Nickname string `json:"nickname"` Email string `json:"email"` Phone string `json:"phone"` } if err := c.ShouldBindJSON(&req); err != nil { response.BadRequest(c, "请求参数错误") return } adminID, exists := c.Get("user_id") if !exists { response.Unauthorized(c) return } if err := h.adminService.UpdateProfile(adminID.(uint), req.Nickname, req.Email, req.Phone); err != nil { response.ErrorWithMessage(c, response.ERROR, err.Error()) return } response.Success(c, nil) }