69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
package handlers
|
|
|
|
import (
|
|
"net/http"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"0451meishiditu/backend/internal/models"
|
|
"0451meishiditu/backend/internal/resp"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func (h *Handlers) AdminUserList(c *gin.Context) {
|
|
page, pageSize := parsePage(c.Query("page"), c.Query("page_size"))
|
|
keyword := strings.TrimSpace(c.Query("keyword"))
|
|
status := strings.TrimSpace(c.Query("status"))
|
|
|
|
q := h.db.Model(&models.User{})
|
|
if keyword != "" {
|
|
q = q.Where("username LIKE ?", "%"+keyword+"%")
|
|
}
|
|
if status != "" {
|
|
q = q.Where("status = ?", status)
|
|
}
|
|
|
|
var total int64
|
|
if err := q.Count(&total).Error; err != nil {
|
|
resp.Fail(c, http.StatusInternalServerError, "db error")
|
|
return
|
|
}
|
|
|
|
var items []models.User
|
|
if err := q.Order("id desc").Limit(pageSize).Offset((page-1)*pageSize).Find(&items).Error; err != nil {
|
|
resp.Fail(c, http.StatusInternalServerError, "db error")
|
|
return
|
|
}
|
|
|
|
resp.OKMeta(c, items, gin.H{
|
|
"page": page,
|
|
"page_size": pageSize,
|
|
"total": total,
|
|
"total_page": calcTotalPage(total, pageSize),
|
|
})
|
|
}
|
|
|
|
type userStatusReq struct {
|
|
Status string `json:"status" binding:"required"` // active/disabled
|
|
}
|
|
|
|
func (h *Handlers) AdminUserUpdateStatus(c *gin.Context) {
|
|
id64, _ := strconv.ParseUint(c.Param("id"), 10, 64)
|
|
var req userStatusReq
|
|
if err := c.ShouldBindJSON(&req); err != nil {
|
|
resp.Fail(c, http.StatusBadRequest, "invalid payload")
|
|
return
|
|
}
|
|
if req.Status != "active" && req.Status != "disabled" {
|
|
resp.Fail(c, http.StatusBadRequest, "invalid status")
|
|
return
|
|
}
|
|
if err := h.db.Model(&models.User{}).Where("id = ?", uint(id64)).Update("status", req.Status).Error; err != nil {
|
|
resp.Fail(c, http.StatusInternalServerError, "update failed")
|
|
return
|
|
}
|
|
resp.OK(c, gin.H{"updated": true})
|
|
}
|
|
|