首次提交
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/inchstep/server/internal/middleware"
|
||||
"github.com/inchstep/server/internal/services"
|
||||
)
|
||||
|
||||
type AdminHandler struct {
|
||||
adminSvc *services.AdminService
|
||||
jwtSecret string
|
||||
}
|
||||
|
||||
func NewAdminHandler(adminSvc *services.AdminService, jwtSecret string) *AdminHandler {
|
||||
return &AdminHandler{adminSvc: adminSvc, jwtSecret: jwtSecret}
|
||||
}
|
||||
|
||||
type adminLoginReq struct {
|
||||
Username string `json:"username" binding:"required"`
|
||||
Password string `json:"password" binding:"required"`
|
||||
}
|
||||
|
||||
func (h *AdminHandler) Login(c *gin.Context) {
|
||||
var req adminLoginReq
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
middleware.Error(c, http.StatusBadRequest, 400, "参数格式错误")
|
||||
return
|
||||
}
|
||||
|
||||
admin, err := h.adminSvc.Login(req.Username, req.Password)
|
||||
if err != nil {
|
||||
middleware.Error(c, http.StatusUnauthorized, 401, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
token, _ := middleware.GenerateToken(admin.ID, h.jwtSecret)
|
||||
middleware.Success(c, gin.H{
|
||||
"admin": admin,
|
||||
"token": token,
|
||||
})
|
||||
}
|
||||
|
||||
func (h *AdminHandler) Dashboard(c *gin.Context) {
|
||||
stats, err := h.adminSvc.GetDashboardStats()
|
||||
if err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, stats)
|
||||
}
|
||||
|
||||
func (h *AdminHandler) ListUsers(c *gin.Context) {
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "20"))
|
||||
users, total, err := h.adminSvc.ListUsers(page, pageSize)
|
||||
if err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, gin.H{"list": users, "total": total, "page": page})
|
||||
}
|
||||
|
||||
func (h *AdminHandler) ListPosts(c *gin.Context) {
|
||||
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
|
||||
pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "20"))
|
||||
posts, total, err := h.adminSvc.ListPosts(page, pageSize)
|
||||
if err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, gin.H{"list": posts, "total": total, "page": page})
|
||||
}
|
||||
|
||||
func (h *AdminHandler) ListAdmins(c *gin.Context) {
|
||||
admins, err := h.adminSvc.ListAdmins()
|
||||
if err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, admins)
|
||||
}
|
||||
|
||||
type createAdminReq struct {
|
||||
Username string `json:"username" binding:"required"`
|
||||
Password string `json:"password" binding:"required"`
|
||||
Role string `json:"role"`
|
||||
Nickname *string `json:"nickname"`
|
||||
}
|
||||
|
||||
func (h *AdminHandler) CreateAdmin(c *gin.Context) {
|
||||
var req createAdminReq
|
||||
if err := c.ShouldBindJSON(&req); err != nil {
|
||||
middleware.Error(c, http.StatusBadRequest, 400, "参数格式错误")
|
||||
return
|
||||
}
|
||||
role := req.Role
|
||||
if role == "" {
|
||||
role = "admin"
|
||||
}
|
||||
admin, err := h.adminSvc.CreateAdmin(req.Username, req.Password, role, req.Nickname)
|
||||
if err != nil {
|
||||
middleware.Error(c, http.StatusConflict, 409, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, admin)
|
||||
}
|
||||
|
||||
func (h *AdminHandler) DisableAdmin(c *gin.Context) {
|
||||
id := c.Param("id")
|
||||
if err := h.adminSvc.DisableAdmin(id); err != nil {
|
||||
middleware.Error(c, http.StatusInternalServerError, 500, err.Error())
|
||||
return
|
||||
}
|
||||
middleware.Success(c, nil)
|
||||
}
|
||||
Reference in New Issue
Block a user