100 lines
2.6 KiB
Go
100 lines
2.6 KiB
Go
package httpapi
|
|
|
|
import (
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/sundynix/pets-be/internal/model"
|
|
"net/http"
|
|
)
|
|
|
|
func (a *API) adminStats(c *gin.Context) {
|
|
counts := gin.H{}
|
|
for _, pair := range []struct {
|
|
name string
|
|
value any
|
|
}{{"users", &model.User{}}, {"pets", &model.Pet{}}, {"walks", &model.Walk{}}, {"meetups", &model.Meetup{}}} {
|
|
var n int64
|
|
a.db.Model(pair.value).Count(&n)
|
|
counts[pair.name] = n
|
|
}
|
|
ok(c, counts)
|
|
}
|
|
func (a *API) adminUsers(c *gin.Context) {
|
|
var rows []model.User
|
|
if a.db.Order("created_at DESC").Limit(200).Find(&rows).Error != nil {
|
|
fail(c, 500, "读取用户失败")
|
|
return
|
|
}
|
|
items := make([]gin.H, 0, len(rows))
|
|
for _, u := range rows {
|
|
v := a.userView(u)
|
|
v["disabled"] = u.Disabled
|
|
items = append(items, v)
|
|
}
|
|
ok(c, items)
|
|
}
|
|
func (a *API) adminPets(c *gin.Context) {
|
|
var rows []model.Pet
|
|
if a.db.Order("created_at DESC").Limit(200).Find(&rows).Error != nil {
|
|
fail(c, 500, "读取宠物失败")
|
|
return
|
|
}
|
|
items := make([]gin.H, 0, len(rows))
|
|
for _, p := range rows {
|
|
v := a.petView(p)
|
|
v["user_id"] = p.UserID
|
|
v["archived"] = p.Archived
|
|
items = append(items, v)
|
|
}
|
|
ok(c, items)
|
|
}
|
|
func (a *API) adminWalks(c *gin.Context) {
|
|
var rows []model.Walk
|
|
if a.db.Order("started_at DESC").Limit(200).Find(&rows).Error != nil {
|
|
fail(c, 500, "读取遛狗失败")
|
|
return
|
|
}
|
|
ok(c, rows)
|
|
}
|
|
func (a *API) adminMeetups(c *gin.Context) {
|
|
var rows []model.Meetup
|
|
if a.db.Order("created_at DESC").Limit(200).Find(&rows).Error != nil {
|
|
fail(c, 500, "读取约遛失败")
|
|
return
|
|
}
|
|
items := make([]gin.H, 0, len(rows))
|
|
for _, m := range rows {
|
|
items = append(items, a.meetupView(m))
|
|
}
|
|
ok(c, items)
|
|
}
|
|
func (a *API) adminSetUserDisabled(c *gin.Context) {
|
|
var in struct {
|
|
Disabled bool `json:"disabled"`
|
|
}
|
|
if !validID(c.Param("id")) || c.ShouldBindJSON(&in) != nil {
|
|
fail(c, 400, "参数无效")
|
|
return
|
|
}
|
|
r := a.db.Model(&model.User{}).Where("id = ?", c.Param("id")).Update("disabled", in.Disabled)
|
|
if r.Error != nil || r.RowsAffected == 0 {
|
|
fail(c, 404, "用户不存在")
|
|
return
|
|
}
|
|
ok(c, gin.H{"disabled": in.Disabled})
|
|
}
|
|
func (a *API) adminSetMeetupStatus(c *gin.Context) {
|
|
var in struct {
|
|
Status string `json:"status"`
|
|
}
|
|
if !validID(c.Param("id")) || c.ShouldBindJSON(&in) != nil || (in.Status != "open" && in.Status != "cancelled") {
|
|
fail(c, http.StatusBadRequest, "状态无效")
|
|
return
|
|
}
|
|
r := a.db.Model(&model.Meetup{}).Where("id = ?", c.Param("id")).Update("status", in.Status)
|
|
if r.Error != nil || r.RowsAffected == 0 {
|
|
fail(c, 404, "约遛不存在")
|
|
return
|
|
}
|
|
ok(c, gin.H{"status": in.Status})
|
|
}
|