增加网站管理功能
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"io"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"server/pkg/jwtutil"
|
||||
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
// =============================================================
|
||||
// 平台官网管理(/platform/website/*)公共工具
|
||||
// 数据表前缀 yz_platform_website_,建表见 docs/sql/create_platform_website.sql
|
||||
// =============================================================
|
||||
|
||||
// websiteAuth 平台管理员鉴权,失败时已写出错误响应,返回 ok=false
|
||||
func websiteAuth(c *beego.Controller) (*jwtutil.Claims, bool) {
|
||||
claims, err := requirePlatform(c)
|
||||
if err != nil {
|
||||
jsonErr(c, 401, 401, err.Error())
|
||||
return nil, false
|
||||
}
|
||||
return claims, true
|
||||
}
|
||||
|
||||
// websiteOK 统一成功响应:{ code:200, msg:"success", data:... }
|
||||
func websiteOK(c *beego.Controller, data interface{}) {
|
||||
c.Data["json"] = map[string]interface{}{"code": 200, "msg": "success", "data": data}
|
||||
_ = c.ServeJSON()
|
||||
}
|
||||
|
||||
// websitePaging 解析分页参数:page 默认 1,pageSize 默认 10(兼容 limit),上限 200
|
||||
func websitePaging(c *beego.Controller) (int, int) {
|
||||
page, _ := c.GetInt("page", 1)
|
||||
pageSize, _ := c.GetInt("pageSize", 0)
|
||||
if pageSize <= 0 {
|
||||
pageSize, _ = c.GetInt("limit", 0)
|
||||
}
|
||||
if page < 1 {
|
||||
page = 1
|
||||
}
|
||||
if pageSize < 1 {
|
||||
pageSize = 10
|
||||
}
|
||||
if pageSize > 200 {
|
||||
pageSize = 200
|
||||
}
|
||||
return page, pageSize
|
||||
}
|
||||
|
||||
// websiteID 解析路径参数 :id
|
||||
func websiteID(c *beego.Controller) (uint64, bool) {
|
||||
id, err := strconv.ParseUint(c.Ctx.Input.Param(":id"), 10, 64)
|
||||
if err != nil || id == 0 {
|
||||
jsonErr(c, 400, 400, "无效ID")
|
||||
return 0, false
|
||||
}
|
||||
return id, true
|
||||
}
|
||||
|
||||
// websiteStatusParam 解析 status 查询参数,未传时返回 -1(表示不过滤)
|
||||
func websiteStatusParam(c *beego.Controller) int {
|
||||
raw := strings.TrimSpace(c.GetString("status"))
|
||||
if raw == "" {
|
||||
return -1
|
||||
}
|
||||
v, err := strconv.Atoi(raw)
|
||||
if err != nil {
|
||||
return -1
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
// websiteBind 解析 JSON 请求体到 target,失败时已写出 400
|
||||
func websiteBind(c *beego.Controller, target interface{}) bool {
|
||||
body, err := io.ReadAll(c.Ctx.Request.Body)
|
||||
if err != nil {
|
||||
jsonErr(c, 400, 400, "参数错误")
|
||||
return false
|
||||
}
|
||||
if err = json.Unmarshal(body, target); err != nil {
|
||||
jsonErr(c, 400, 400, "参数错误")
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// websiteBindOptional 宽松解析请求体:body 为空或非法时不作响应,调用方按零值处理
|
||||
func websiteBindOptional(c *beego.Controller, target interface{}) {
|
||||
body, err := io.ReadAll(c.Ctx.Request.Body)
|
||||
if err != nil || len(bytes.TrimSpace(body)) == 0 {
|
||||
return
|
||||
}
|
||||
_ = json.Unmarshal(body, target)
|
||||
}
|
||||
Reference in New Issue
Block a user