Files
2025-11-17 13:32:54 +08:00

229 lines
5.2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}