229 lines
5.2 KiB
Go
229 lines
5.2 KiB
Go
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)
|
||
} |