From 5eed0d2bae84a64201ab7a68fe9f6b76ce6b85f6 Mon Sep 17 00:00:00 2001 From: Havoc412 <2993167370@qq.com> Date: Mon, 21 Oct 2024 16:16:03 +0800 Subject: [PATCH] encounter detial #1 --- .../controller/web/encounter_controller.go | 11 ++++++ .../web_register_validator.go | 3 ++ app/http/validator/web/encounter/detail.go | 29 +++++++++++++++ app/model/animal.go | 14 ++++++++ app/model/encounter.go | 26 ++++++++++++-- app/model/users.go | 14 ++++++++ app/service/encounter/curd/encounter_curd.go | 36 ++++++++++++++++++- app/utils/query_handler/query_handler.go | 10 ++++++ routers/web.go | 4 +-- 9 files changed, 142 insertions(+), 5 deletions(-) create mode 100644 app/http/validator/web/encounter/detail.go diff --git a/app/http/controller/web/encounter_controller.go b/app/http/controller/web/encounter_controller.go index cef49ce..83190ba 100644 --- a/app/http/controller/web/encounter_controller.go +++ b/app/http/controller/web/encounter_controller.go @@ -70,3 +70,14 @@ func (e *Encounters) List(context *gin.Context) { response.Fail(context, errcode.ErrDataNoFound, errcode.ErrMsg[errcode.ErrDataNoFound], "") } } + +func (e *Encounters) Detail(context *gin.Context) { + encounterId := context.Param("encounter_id") + + encounters := curd.CreateEncounterCurdFactory().Detail(encounterId) + 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 3e08b8e..9e448f9 100644 --- a/app/http/validator/common/register_validator/web_register_validator.go +++ b/app/http/validator/common/register_validator/web_register_validator.go @@ -58,4 +58,7 @@ func WebRegisterValidator() { containers.Set(key, encounter.Create{}) key = consts.ValidatorPrefix + "EncounterList" containers.Set(key, encounter.List{}) + key = consts.ValidatorPrefix + "EncounterDetail" + containers.Set(key, encounter.Detial{}) + } diff --git a/app/http/validator/web/encounter/detail.go b/app/http/validator/web/encounter/detail.go new file mode 100644 index 0000000..f7044cb --- /dev/null +++ b/app/http/validator/web/encounter/detail.go @@ -0,0 +1,29 @@ +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 Detial struct { + EncounterId int64 `form:"encounter_id" json:"encounter_id"` +} + +func (d Detial) CheckParams(context *gin.Context) { + if err := context.ShouldBind(&d); err != nil { + response.ValidatorError(context, err) + return + } + + extraAddBindDataContext := data_transfer.DataAddContext(d, consts.ValidatorPrefix, context) + if extraAddBindDataContext == nil { + response.ErrorSystem(context, "Encounter Detail表单验证器json化失败", "") + } else { + // 验证完成,调用控制器,并将验证器成员(字段)递给控制器,保持上下文数据一致性 + (&web.Encounters{}).Detail(extraAddBindDataContext) + } +} diff --git a/app/model/animal.go b/app/model/animal.go index 4f2a81c..9d4036e 100644 --- a/app/model/animal.go +++ b/app/model/animal.go @@ -69,3 +69,17 @@ func (a *Animal) ShowByID(id int) *Animal { } return &temp } + +func (a *Animal) ShowByIDs(ids []int64, attrs ...string) (temp []Animal) { + db := a.DB.Table(a.TableName()) + + if len(attrs) > 0 { + db = db.Select(attrs) + } + + err := db.Where("id in (?)", ids).Find(&temp).Error + if err != nil { + variable.ZapLog.Error("Animal ShowByIDs Error", zap.Error(err)) + } + return +} diff --git a/app/model/encounter.go b/app/model/encounter.go index 77afb49..5784575 100644 --- a/app/model/encounter.go +++ b/app/model/encounter.go @@ -17,7 +17,7 @@ func CreateEncounterFactory(sqlType string) *Encounter { type Encounter struct { // Encounter 或者称为 post,指的就是 Human 单次的记录。 BaseModel // TAG 外键关联 - UsersModelId int `gorm:"column:user_id" json:"user_id"` + UsersModelId int64 `gorm:"column:user_id" json:"user_id"` UsersModel UsersModel AnimalsId string `gorm:"size:20" json:"animals_id"` // TODO 关联对象存在上限 @@ -69,7 +69,6 @@ func (e *Encounter) Show(num, skip, user_id int) (temp []EncounterList) { // err := e.Raw(sql, user_id, num, skip).Scan(&temp).Error // fmt.Println(err) - // 使用 Debug 方法打印详细日志 var rows *gorm.DB if rows = e.Raw(sql, user_id, num, skip); rows.Error != nil { log.Println("查询失败:", rows.Error) @@ -99,3 +98,26 @@ func (e *Encounter) Show(num, skip, user_id int) (temp []EncounterList) { return } + +func (e *Encounter) ShowByID(id int64) (temp *Encounter, err error) { + // 1. search encounter + if err = e.Where("id = ?", id).First(&temp).Error; err != nil { + return + } + return + // // 2. search user data + // user := UsersModel{BaseModel: BaseModel{Id: encounter.UsersModelId}} + // if err := user.Select("user_name", "user_avatar").First(&user).Error; err != nil { + // return + // } + + // // 3. search animals data + // animals_id := query_handler.StringToint64Array(encounter.AnimalsId) + // var animals []Animal + // if err := e.Model(&animals).Select("id", "avatar", "name").Where("id in (?)", animals_id).Find(&animals).Error; err != nil { + // return + // } + + // // TODO 4. 然后整合 + // return +} diff --git a/app/model/users.go b/app/model/users.go index 0061032..48605df 100644 --- a/app/model/users.go +++ b/app/model/users.go @@ -348,3 +348,17 @@ func (u *UsersModel) WeixinLogin(openId, sessionKey, name, avatar, ip string) (t } return } + +func (u *UsersModel) ShowByID(id int64, attrs ...string) (temp *UsersModel, err error) { + db := u.DB.Table(u.TableName()) + + if len(attrs) > 0 { + db = db.Select(attrs) + } + + err = db.Where("id in (?)", id).First(&temp).Error + if err != nil { + variable.ZapLog.Error("Animal ShowByIDs Error", zap.Error(err)) + } + return +} diff --git a/app/service/encounter/curd/encounter_curd.go b/app/service/encounter/curd/encounter_curd.go index 4b53dce..2a3a2b7 100644 --- a/app/service/encounter/curd/encounter_curd.go +++ b/app/service/encounter/curd/encounter_curd.go @@ -1,6 +1,10 @@ package curd -import "catface/app/model" +import ( + "catface/app/model" + "catface/app/utils/query_handler" + "strconv" +) func CreateEncounterCurdFactory() *EncounterCurd { return &EncounterCurd{model.CreateEncounterFactory("")} @@ -16,3 +20,33 @@ func (e *EncounterCurd) List(num, skip, user_id int) []model.EncounterList { } return model.CreateEncounterFactory("").Show(num, skip, user_id) } + +func (e *EncounterCurd) Detail(id string) *model.Encounter { + // 0. check id + idInt, err := strconv.Atoi(id) + if err != nil { + return nil + } + + // 1. encounter data + encounter, err := model.CreateEncounterFactory("").ShowByID(int64(idInt)) + if err != nil { + return nil + } + + // 2. user data + user, err := model.CreateUserFactory("").ShowByID(encounter.UsersModelId, "user_avatar", "user_name") + if err != nil { + return nil + } + _ = user + + // 3. animals data + animals_id := query_handler.StringToint64Array(encounter.AnimalsId) + animals := model.CreateAnimalFactory("").ShowByIDs(animals_id, "avatar", "name") + _ = animals + + // 4. 合并 + + return nil +} diff --git a/app/utils/query_handler/query_handler.go b/app/utils/query_handler/query_handler.go index 8243ab0..e5b705f 100644 --- a/app/utils/query_handler/query_handler.go +++ b/app/utils/query_handler/query_handler.go @@ -18,6 +18,16 @@ func StringToUint8Array(in string) []uint8 { return out } +func StringToint64Array(in string) []int64 { + var out []int64 + _arr := strings.Split(in, ",") + for _, c := range _arr { + tmp, _ := strconv.ParseUint(c, 10, 8) + out = append(out, int64(tmp)) + } + return out +} + func StringToStringArray(in string) []string { return strings.Split(in, ",") } diff --git a/routers/web.go b/routers/web.go index d0cea15..d85b5f8 100644 --- a/routers/web.go +++ b/routers/web.go @@ -3,12 +3,10 @@ package routers import ( "catface/app/global/consts" "catface/app/global/variable" - // "catface/app/http/controller/captcha" // 验证码组件 // "catface/app/http/middleware/authorization" "catface/app/http/middleware/cors" validatorFactory "catface/app/http/validator/core/factory" - // TODO validatorFactory "catface/app/http/validator/core/factory" "catface/app/utils/gin_release" "net/http" @@ -131,6 +129,8 @@ func InitWebRouter() *gin.Engine { { // GET 获取列表; POST 上传 encounter.GET("", validatorFactory.Create(consts.ValidatorPrefix+"EncounterList")) + encounter.GET(":encounter_id", validatorFactory.Create(consts.ValidatorPrefix+"EncounterDetail")) + encounter.POST("", validatorFactory.Create(consts.ValidatorPrefix+"EncounterStore")) } // }