From babd68def023a93f487a55720a276a4118a6ebf9 Mon Sep 17 00:00:00 2001 From: Havoc412 <2993167370@qq.com> Date: Wed, 23 Oct 2024 12:51:41 +0800 Subject: [PATCH] animal like & list #1 --- app/http/controller/web/animal_controller.go | 3 ++- .../register_validator/web_register_validator.go | 1 - app/http/validator/web/animal/list.go | 1 + app/model/animal_like.go | 13 ++++++++++++- app/model/animal_result.go | 6 ++++++ app/service/animals/curd/animals_curd.go | 13 +++++++++++-- 6 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 app/model/animal_result.go diff --git a/app/http/controller/web/animal_controller.go b/app/http/controller/web/animal_controller.go index fb8b5cb..334de6e 100644 --- a/app/http/controller/web/animal_controller.go +++ b/app/http/controller/web/animal_controller.go @@ -21,8 +21,9 @@ func (a *Animals) List(context *gin.Context) { status := context.GetString(consts.ValidatorPrefix + "status") num := context.GetFloat64(consts.ValidatorPrefix + "num") skip := context.GetFloat64(consts.ValidatorPrefix + "skip") + userId := context.GetFloat64(consts.ValidatorPrefix + "user_id") - animals := curd.CreateAnimalsCurdFactory().List(attrs, gender, breed, sterilzation, status, int(num), int(skip)) + animals := curd.CreateAnimalsCurdFactory().List(attrs, gender, breed, sterilzation, status, int(num), int(skip), int(userId)) if animals != nil { response.Success(context, consts.CurdStatusOkMsg, animals) } else { 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 0e177be..e032a29 100644 --- a/app/http/validator/common/register_validator/web_register_validator.go +++ b/app/http/validator/common/register_validator/web_register_validator.go @@ -72,5 +72,4 @@ func WebRegisterValidator() { containers.Set(key, encounter_like.Create{}) key = consts.ValidatorPrefix + "EncounterLikeDelete" containers.Set(key, encounter_like.Delete{}) - } diff --git a/app/http/validator/web/animal/list.go b/app/http/validator/web/animal/list.go index ec45bd0..312ec4a 100644 --- a/app/http/validator/web/animal/list.go +++ b/app/http/validator/web/animal/list.go @@ -17,6 +17,7 @@ type List struct { Status string `form:"status" json:"status"` Num int `form:"num" json:"num"` Skip int `form:"skip" json:"skip"` + UserId int `form:"user_id" json:"user_id" binding:"required,min=1"` } func (l List) CheckParams(context *gin.Context) { diff --git a/app/model/animal_like.go b/app/model/animal_like.go index 0831004..d983b50 100644 --- a/app/model/animal_like.go +++ b/app/model/animal_like.go @@ -25,6 +25,17 @@ func (a *AnimalLike) Create(userId, animalId int) bool { func (a *AnimalLike) SoftDelete(userId, animalId int) bool { a.UsersModelId = userId - a.Unscoped().Where("animal_id = ? AND user_id = ?", a.AnimalId, a.UsersModelId).First(a) + a.Unscoped().Where("animal_id = ? AND user_id = ?", animalId, a.UsersModelId).First(a) return a.Delete(a).Error == nil } + +/** + * @description: 查询是否存在关注记录 + * @param {*} userId + * @param {int} animalId + * @return {*} + */ +func (a *AnimalLike) Liked(userId, animalId int) bool { + // 需要考虑 IsDel = 0; + return a.Where("animal_id = ? AND user_id = ?", animalId, userId).First(a).RowsAffected > 0 +} diff --git a/app/model/animal_result.go b/app/model/animal_result.go new file mode 100644 index 0000000..a2fb822 --- /dev/null +++ b/app/model/animal_result.go @@ -0,0 +1,6 @@ +package model + +type AnimalWithLikeList struct { + Animal Animal `json:"animal"` + Like bool `json:"like"` +} diff --git a/app/service/animals/curd/animals_curd.go b/app/service/animals/curd/animals_curd.go index 6cfd426..f8a1686 100644 --- a/app/service/animals/curd/animals_curd.go +++ b/app/service/animals/curd/animals_curd.go @@ -48,7 +48,7 @@ func getSelectAttrs(attrs string) (validSelectedFields []string) { return } -func (a *AnimalsCurd) List(attrs string, gender string, breed string, sterilzation string, status string, num int, skip int) []model.Animal { +func (a *AnimalsCurd) List(attrs string, gender string, breed string, sterilzation string, status string, num int, skip int, userId int) (temp []model.AnimalWithLikeList) { validSelectedFields := getSelectAttrs(attrs) genderArray := query_handler.StringToUint8Array(gender) breedArray := query_handler.StringToUint8Array(breed) @@ -59,7 +59,16 @@ func (a *AnimalsCurd) List(attrs string, gender string, breed string, sterilzati num = 10 } - return model.CreateAnimalFactory("mysql").Show(validSelectedFields, genderArray, breedArray, sterilzationArray, statusArray, num, skip) + animals := model.CreateAnimalFactory("").Show(validSelectedFields, genderArray, breedArray, sterilzationArray, statusArray, num, skip) + + for i := range animals { + animalWithLike := model.AnimalWithLikeList{ + Animal: animals[i], + Like: model.CreateAnimalLikeFactory("").Liked(userId, int(animals[i].Id)), + } + temp = append(temp, animalWithLike) + } + return } func (a *AnimalsCurd) Detail(id string) *model.Animal {