152 lines
3.6 KiB
Go
152 lines
3.6 KiB
Go
package controllers
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"server/pkg/jwtutil"
|
|
"server/services"
|
|
|
|
beego "github.com/beego/beego/v2/server/web"
|
|
)
|
|
|
|
type BackendSiteReminderController struct {
|
|
beego.Controller
|
|
}
|
|
|
|
func (c *BackendSiteReminderController) backendClaims() (*jwtutil.Claims, error) {
|
|
auth := c.Ctx.Request.Header.Get("Authorization")
|
|
if auth == "" {
|
|
return nil, fmt.Errorf("未登录")
|
|
}
|
|
parts := strings.SplitN(auth, " ", 2)
|
|
if len(parts) != 2 || parts[0] != "Bearer" {
|
|
return nil, fmt.Errorf("认证信息格式错误")
|
|
}
|
|
claims, err := jwtutil.ParseToken(parts[1])
|
|
if err != nil {
|
|
return nil, fmt.Errorf("无效的token")
|
|
}
|
|
if claims.UserType != "backend" {
|
|
return nil, fmt.Errorf("无权访问")
|
|
}
|
|
return claims, nil
|
|
}
|
|
|
|
func (c *BackendSiteReminderController) jsonErr(httpStatus, bizCode int, msg string) {
|
|
c.Ctx.Output.SetStatus(httpStatus)
|
|
c.Data["json"] = map[string]interface{}{"code": bizCode, "msg": msg}
|
|
_ = c.ServeJSON()
|
|
}
|
|
|
|
// GetMyList GET /backend/sitereminder/myList
|
|
func (c *BackendSiteReminderController) GetMyList() {
|
|
claims, err := c.backendClaims()
|
|
if err != nil {
|
|
c.jsonErr(401, 401, err.Error())
|
|
return
|
|
}
|
|
page, _ := c.GetInt("page", 1)
|
|
pageSize, _ := c.GetInt("pageSize", 10)
|
|
var isRead *int8
|
|
if isReadStr := c.GetString("isRead"); isReadStr != "" {
|
|
if val, err := strconv.Atoi(isReadStr); err == nil {
|
|
v := int8(val)
|
|
isRead = &v
|
|
}
|
|
}
|
|
|
|
list, total, err := services.ListReminders(uint64(claims.UserID), "tenant", page, pageSize, isRead)
|
|
if err != nil {
|
|
c.jsonErr(500, 500, "获取消息列表失败: "+err.Error())
|
|
return
|
|
}
|
|
|
|
c.Data["json"] = map[string]interface{}{
|
|
"code": 200,
|
|
"msg": "success",
|
|
"data": map[string]interface{}{
|
|
"list": list,
|
|
"total": total,
|
|
},
|
|
}
|
|
_ = c.ServeJSON()
|
|
}
|
|
|
|
// MarkRead POST /backend/sitereminder/read
|
|
func (c *BackendSiteReminderController) MarkRead() {
|
|
claims, err := c.backendClaims()
|
|
if err != nil {
|
|
c.jsonErr(401, 401, err.Error())
|
|
return
|
|
}
|
|
raw, err := io.ReadAll(c.Ctx.Request.Body)
|
|
if err != nil {
|
|
c.jsonErr(400, 400, "参数错误")
|
|
return
|
|
}
|
|
var p struct {
|
|
ID uint64 `json:"id"`
|
|
}
|
|
if err := json.Unmarshal(raw, &p); err != nil {
|
|
c.jsonErr(400, 400, "参数错误")
|
|
return
|
|
}
|
|
|
|
err = services.MarkReminderRead(p.ID, uint64(claims.UserID), "tenant")
|
|
if err != nil {
|
|
c.jsonErr(500, 500, "操作失败: "+err.Error())
|
|
return
|
|
}
|
|
c.Data["json"] = map[string]interface{}{"code": 200, "msg": "success"}
|
|
_ = c.ServeJSON()
|
|
}
|
|
|
|
// MarkAllRead POST /backend/sitereminder/readall
|
|
func (c *BackendSiteReminderController) MarkAllRead() {
|
|
claims, err := c.backendClaims()
|
|
if err != nil {
|
|
c.jsonErr(401, 401, err.Error())
|
|
return
|
|
}
|
|
err = services.MarkAllRemindersRead(uint64(claims.UserID), "tenant")
|
|
if err != nil {
|
|
c.jsonErr(500, 500, "操作失败: "+err.Error())
|
|
return
|
|
}
|
|
c.Data["json"] = map[string]interface{}{"code": 200, "msg": "success"}
|
|
_ = c.ServeJSON()
|
|
}
|
|
|
|
// Delete POST /backend/sitereminder/delete
|
|
func (c *BackendSiteReminderController) Delete() {
|
|
claims, err := c.backendClaims()
|
|
if err != nil {
|
|
c.jsonErr(401, 401, err.Error())
|
|
return
|
|
}
|
|
raw, err := io.ReadAll(c.Ctx.Request.Body)
|
|
if err != nil {
|
|
c.jsonErr(400, 400, "参数错误")
|
|
return
|
|
}
|
|
var p struct {
|
|
ID uint64 `json:"id"`
|
|
}
|
|
if err := json.Unmarshal(raw, &p); err != nil {
|
|
c.jsonErr(400, 400, "参数错误")
|
|
return
|
|
}
|
|
|
|
err = services.DeleteReminder(p.ID, uint64(claims.UserID), "tenant")
|
|
if err != nil {
|
|
c.jsonErr(500, 500, "删除失败: "+err.Error())
|
|
return
|
|
}
|
|
c.Data["json"] = map[string]interface{}{"code": 200, "msg": "success"}
|
|
_ = c.ServeJSON()
|
|
}
|