From c9a08d180072b32f4aab2ca740a0af4c5ac978e3 Mon Sep 17 00:00:00 2001 From: Havoc412 <2993167370@qq.com> Date: Sun, 20 Oct 2024 21:01:12 +0800 Subject: [PATCH] finish encounter List --- app/global/errcode/code.go | 2 ++ app/global/errcode/msg.go | 1 + .../controller/web/encounter_controller.go | 15 ++++++++- .../web_register_validator.go | 3 +- app/http/validator/web/encounter/list.go | 32 +++++++++++++++++++ app/model/encounter.go | 11 ++++++- app/model/encounter_result.go | 14 ++++++++ app/service/encounter/curd/encounter_curd.go | 7 ++++ routers/web.go | 2 +- 9 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 app/http/validator/web/encounter/list.go create mode 100644 app/model/encounter_result.go diff --git a/app/global/errcode/code.go b/app/global/errcode/code.go index acdf82e..1330340 100644 --- a/app/global/errcode/code.go +++ b/app/global/errcode/code.go @@ -10,4 +10,6 @@ const ( ErrGeneralStart = ErrGeneral + iota ErrInvalidData ErrInternalError + + ErrDataNoFound ) diff --git a/app/global/errcode/msg.go b/app/global/errcode/msg.go index 9be6b43..252fd9e 100644 --- a/app/global/errcode/msg.go +++ b/app/global/errcode/msg.go @@ -15,4 +15,5 @@ func GeneralMsgInit(m msg) { m[0] = "" m[ErrInvalidData] = "参数无效" m[ErrInternalError] = "内部服务器错误" + m[ErrDataNoFound] = "无数据查询" } diff --git a/app/http/controller/web/encounter_controller.go b/app/http/controller/web/encounter_controller.go index 3746ec1..fd43d96 100644 --- a/app/http/controller/web/encounter_controller.go +++ b/app/http/controller/web/encounter_controller.go @@ -2,9 +2,11 @@ package web import ( "catface/app/global/consts" + "catface/app/global/errcode" "catface/app/global/variable" "catface/app/http/validator/core/data_transfer" "catface/app/model" + "catface/app/service/encounter/curd" "catface/app/service/upload_file" "catface/app/utils/response" "path/filepath" @@ -17,7 +19,6 @@ type Encounters struct { } func (e *Encounters) Create(context *gin.Context) { - // TODO 处理 Photos 文件,然后处理出 Avatar,并获取压缩后的 宽高,以及文件的存储路径。 photos := data_transfer.GetStringSlice(context, "photos") if len(photos) > 0 { userId := strconv.Itoa(int(context.GetFloat64(consts.ValidatorPrefix + "user_id"))) @@ -56,3 +57,15 @@ func (e *Encounters) Create(context *gin.Context) { response.Fail(context, consts.CurdCreatFailCode, consts.CurdCreatFailMsg+",新增错误", "") } } + +func (e *Encounters) List(context *gin.Context) { + num := context.GetFloat64(consts.ValidatorPrefix + "num") + skip := context.GetFloat64(consts.ValidatorPrefix + "skip") + + encounters := curd.CreateEncounterCurdFactory().List(int(num), int(skip)) + if encounters != nil { + response.Success(context, consts.CurdStatusOkMsg, encounters) + } else { + response.Fail(context, errcode.ErrDataNoFound, errcode.ErrMsg[errcode.ErrDataNoFound], "") + } +} diff --git a/app/http/validator/common/register_validator/web_register_validator.go b/app/http/validator/common/register_validator/web_register_validator.go index 9fd4a91..3e08b8e 100644 --- a/app/http/validator/common/register_validator/web_register_validator.go +++ b/app/http/validator/common/register_validator/web_register_validator.go @@ -56,5 +56,6 @@ func WebRegisterValidator() { // TAG Encounter key = consts.ValidatorPrefix + "EncounterStore" containers.Set(key, encounter.Create{}) - + key = consts.ValidatorPrefix + "EncounterList" + containers.Set(key, encounter.List{}) } diff --git a/app/http/validator/web/encounter/list.go b/app/http/validator/web/encounter/list.go new file mode 100644 index 0000000..ada534d --- /dev/null +++ b/app/http/validator/web/encounter/list.go @@ -0,0 +1,32 @@ +package encounter + +import ( + "catface/app/global/consts" + "catface/app/http/controller/web" + "catface/app/http/validator/core/data_transfer" + "catface/app/utils/response" + + "github.com/gin-gonic/gin" +) + +type List struct { + Num int `form:"num" json:"num"` + Skip int `form:"skip" json:"skip"` +} + +func (l List) CheckParams(context *gin.Context) { + if err := context.ShouldBind(&l); err != nil { // INFO 这一条是必要的,看来对数据的解析页在其中。 + // 将表单参数验证器出现的错误直接交给错误翻译器统一处理即可 + response.ValidatorError(context, err) + return + } + + // 该函数主要是将本结构体的字段(成员)按照 consts.ValidatorPrefix+ json标签对应的 键 => 值 形式绑定在上下文,便于下一步(控制器)可以直接通过 context.Get(键) 获取相关值 + extraAddBindDataContext := data_transfer.DataAddContext(l, consts.ValidatorPrefix, context) + if extraAddBindDataContext == nil { + response.ErrorSystem(context, "encounterList表单验证器json化失败", "") + } else { + // 验证完成,调用控制器,并将验证器成员(字段)递给控制器,保持上下文数据一致性 + (&web.Encounters{}).List(extraAddBindDataContext) + } +} diff --git a/app/model/encounter.go b/app/model/encounter.go index 967c3c6..9791eb0 100644 --- a/app/model/encounter.go +++ b/app/model/encounter.go @@ -6,7 +6,6 @@ import ( "github.com/gin-gonic/gin" "go.uber.org/zap" - ) func CreateEncounterFactory(sqlType string) *Encounter { @@ -52,3 +51,13 @@ func (e *Encounter) InsertDate(c *gin.Context) bool { } return false } + +func (e *Encounter) Show(num, skip int) (temp []EncounterList) { + sql := `SELECT user_id, title, avatar, avatar_height, avatar_width, e.updated_at, + user_name, user_avatar FROM encounters e JOIN tb_users u ON e.user_id = u.id + LIMIT ? OFFSET ? + ` + _ = e.Raw(sql, num, skip).Scan(&temp) + + return +} diff --git a/app/model/encounter_result.go b/app/model/encounter_result.go new file mode 100644 index 0000000..037819c --- /dev/null +++ b/app/model/encounter_result.go @@ -0,0 +1,14 @@ +package model + +import "time" + +type EncounterList struct { + UserId int `form:"user_id" json:"user_id"` + Title string + Avatar string + AvatarHeight int `form:"avatar_height" json:"avatar_height"` + AvatarWidth int `form:"avatar_width" json:"avatar_width"` + UpdatedAt *time.Time `json:"updated_at,omitempty"` // TIP 设为 *time.Time,omitempty 和 autoUpdated 就都可以生效 + + UserName string `form:"user_name" json:"user_name"` +} diff --git a/app/service/encounter/curd/encounter_curd.go b/app/service/encounter/curd/encounter_curd.go index c87bd00..0655d2d 100644 --- a/app/service/encounter/curd/encounter_curd.go +++ b/app/service/encounter/curd/encounter_curd.go @@ -9,3 +9,10 @@ func CreateEncounterCurdFactory() *EncounterCurd { type EncounterCurd struct { encounter *model.Encounter } + +func (e *EncounterCurd) List(num, skip int) []model.EncounterList { + if num == 0 { + num = 15 + } + return model.CreateEncounterFactory("").Show(num, skip) +} diff --git a/routers/web.go b/routers/web.go index c6748d5..d0cea15 100644 --- a/routers/web.go +++ b/routers/web.go @@ -130,7 +130,7 @@ func InitWebRouter() *gin.Engine { encounter := backend.Group("encounter") { // GET 获取列表; POST 上传 - // encounter.GET("", validatorFactory.Create(consts.ValidatorPrefix+"EncounterList")) + encounter.GET("", validatorFactory.Create(consts.ValidatorPrefix+"EncounterList")) encounter.POST("", validatorFactory.Create(consts.ValidatorPrefix+"EncounterStore")) } // }