package handlers import ( "platform/web/auth" "platform/web/common" m "platform/web/models" q "platform/web/queries" "platform/web/services" "time" "github.com/gofiber/fiber/v2" ) type ListWhitelistReq struct { common.PageReq } type ListWhitelistResp struct { Total int64 `json:"total"` List []*m.Whitelist `json:"list"` Page int `json:"page"` Size int `json:"size"` } func ListWhitelist(c *fiber.Ctx) error { // 检查权限 authContext, err := auth.Protect(c, []services.PayloadType{services.PayloadUser}, []string{}) if err != nil { return err } // 解析请求参数 req := new(ListWhitelistReq) if err := c.BodyParser(req); err != nil { return err } // 获取用户信息 do := q.Whitelist. Where(q.Whitelist.UserID.Eq(authContext.Payload.Id)) list, err := do. Offset(req.GetOffset()). Limit(req.GetLimit()). Order(q.Whitelist.CreatedAt.Desc()). Find() if err != nil { return err } var total int64 if len(list) < req.GetLimit() { total = int64(len(list) + req.GetOffset()) } else { total, err = do.Count() if err != nil { return err } } // 返回结果 return c.JSON(common.PageResp{ Total: int(total), List: list, Page: req.GetPage(), Size: req.GetSize(), }) } type CreateWhitelistReq struct { Host string `json:"host" validate:"required"` Remark string `json:"remark"` } func CreateWhitelist(c *fiber.Ctx) error { // 检查权限 authContext, err := auth.Protect(c, []services.PayloadType{services.PayloadUser}, []string{}) if err != nil { return err } // 解析请求参数 req := new(CreateWhitelistReq) if err := c.BodyParser(req); err != nil { return err } if req.Host == "" { return fiber.NewError(fiber.StatusBadRequest, "host is required") } // 创建白名单 whitelist := &m.Whitelist{ UserID: authContext.Payload.Id, Host: req.Host, Remark: req.Remark, } err = q.Whitelist.Create(whitelist) return nil } type UpdateWhitelistReq struct { ID int32 `json:"id" validate:"required"` Host string `json:"host"` Remark string `json:"remark"` } func UpdateWhitelist(c *fiber.Ctx) error { // 检查权限 authContext, err := auth.Protect(c, []services.PayloadType{services.PayloadUser}, []string{}) if err != nil { return err } // 解析请求参数 req := new(UpdateWhitelistReq) if err := c.BodyParser(req); err != nil { return err } if req.ID == 0 { return fiber.NewError(fiber.StatusBadRequest, "id is required") } // 更新白名单 _, err = q.Whitelist. Where( q.Whitelist.ID.Eq(req.ID), q.Whitelist.UserID.Eq(authContext.Payload.Id), ). Updates(&m.Whitelist{ ID: req.ID, Host: req.Host, Remark: req.Remark, }) if err != nil { return err } return nil } type RemoveWhitelistReq struct { ID int32 `json:"id" validate:"required"` } func RemoveWhitelist(c *fiber.Ctx) error { // 检查权限 authContext, err := auth.Protect(c, []services.PayloadType{services.PayloadUser}, []string{}) if err != nil { return err } // 解析请求参数 var req []RemoveWhitelistReq if err := c.BodyParser(&req); err != nil { return err } if len(req) == 0 { return fiber.NewError(fiber.StatusBadRequest, "id is required") } var ids = make([]int32, len(req)) for i, item := range req { if item.ID == 0 { return fiber.NewError(fiber.StatusBadRequest, "id is required") } ids[i] = item.ID } // 删除白名单 _, err = q.Whitelist. Where( q.Whitelist.ID.In(ids...), q.Whitelist.UserID.Eq(authContext.Payload.Id), ). Update( q.Whitelist.DeletedAt, time.Now(), ) if err != nil { return err } return nil }