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