From 11596906a98933f800451561ad19caaf32b69c67 Mon Sep 17 00:00:00 2001 From: Havoc412 <2993167370@qq.com> Date: Wed, 23 Oct 2024 10:55:05 +0800 Subject: [PATCH] API: add encounter like --- .../web/encounter_like_controller.go | 24 +++++++++++++++ .../web_register_validator.go | 4 +++ .../validator/web/encounter_like/create.go | 30 +++++++++++++++++++ app/model/encounter_like.go | 26 ++++++++++++++++ .../encounter/curd/encounter_like_curd.go | 11 +++++++ routers/web.go | 4 +++ 6 files changed, 99 insertions(+) create mode 100644 app/http/controller/web/encounter_like_controller.go create mode 100644 app/http/validator/web/encounter_like/create.go create mode 100644 app/service/encounter/curd/encounter_like_curd.go diff --git a/app/http/controller/web/encounter_like_controller.go b/app/http/controller/web/encounter_like_controller.go new file mode 100644 index 0000000..6c6cd4b --- /dev/null +++ b/app/http/controller/web/encounter_like_controller.go @@ -0,0 +1,24 @@ +package web + +import ( + "catface/app/global/consts" + "catface/app/model" + "catface/app/utils/response" + + "github.com/gin-gonic/gin" +) + +type EncounterLike struct { +} + +func (e *EncounterLike) Create(context *gin.Context) { + userId := context.GetFloat64(consts.ValidatorPrefix + "user_id") + encounterId := context.GetFloat64(consts.ValidatorPrefix + "encounter_id") + + if model.CreateEncounterLikeFactory("").Create(int(userId), int(encounterId)) { + response.Success(context, "点赞成功", nil) + } else { + response.Fail(context, consts.CurdCreatFailCode, consts.CurdCreatFailMsg+",新增错误", "") + + } +} 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 9e448f9..41b2d66 100644 --- a/app/http/validator/common/register_validator/web_register_validator.go +++ b/app/http/validator/common/register_validator/web_register_validator.go @@ -7,6 +7,7 @@ import ( "catface/app/http/validator/common/websocket" "catface/app/http/validator/web/animal" "catface/app/http/validator/web/encounter" + "catface/app/http/validator/web/encounter_like" "catface/app/http/validator/web/users" ) @@ -61,4 +62,7 @@ func WebRegisterValidator() { key = consts.ValidatorPrefix + "EncounterDetail" containers.Set(key, encounter.Detial{}) + key = consts.ValidatorPrefix + "EncounterLikeCreate" + containers.Set(key, encounter_like.Create{}) + } diff --git a/app/http/validator/web/encounter_like/create.go b/app/http/validator/web/encounter_like/create.go new file mode 100644 index 0000000..2db5e97 --- /dev/null +++ b/app/http/validator/web/encounter_like/create.go @@ -0,0 +1,30 @@ +package encounter_like + +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 Create struct { + UserId int64 `form:"user_id" json:"user_id"` + EncounterId int64 `form:"encounter_id" json:"encounter_id"` +} + +func (c Create) CheckParams(context *gin.Context) { + if err := context.ShouldBind(&c); err != nil { + response.ValidatorError(context, err) + return + } + + extraAddBindDataContext := data_transfer.DataAddContext(c, consts.ValidatorPrefix, context) + if extraAddBindDataContext == nil { + response.ErrorSystem(context, "EncounterLike Create表单验证器json化失败", "") + } else { + // 验证完成,调用控制器,并将验证器成员(字段)递给控制器,保持上下文数据一致性 + (&web.EncounterLike{}).Create(extraAddBindDataContext) + } +} diff --git a/app/model/encounter_like.go b/app/model/encounter_like.go index 63c6093..b45eac8 100644 --- a/app/model/encounter_like.go +++ b/app/model/encounter_like.go @@ -1,5 +1,9 @@ package model +func CreateEncounterLikeFactory(sqlType string) *EncounterLike { + return &EncounterLike{BaseModel: BaseModel{DB: UseDbConn(sqlType)}} +} + type EncounterLike struct { BaseModel UsersModelId int `gorm:"column:user_id" json:"user_id"` @@ -8,3 +12,25 @@ type EncounterLike struct { Encounter Encounter DeletedAt } + +func (e *EncounterLike) Create(userId, encounterId int) bool { + e.UsersModelId = userId + e.EncounterId = encounterId + + e.Where("encounter_id = ?", e.EncounterId).First(e) + e.IsDel = 0 // + if err := e.Save(e).Error; err != nil { + return false + } + return true +} + +func (e *EncounterLike) Delete(userId, encounterId int) bool { + e.UsersModelId = userId + e.EncounterId = encounterId + // + if err := e.Where("encounter_id = ?", e.EncounterId).Delete(e).Error; err != nil { + return false + } + return true +} diff --git a/app/service/encounter/curd/encounter_like_curd.go b/app/service/encounter/curd/encounter_like_curd.go new file mode 100644 index 0000000..852fdc6 --- /dev/null +++ b/app/service/encounter/curd/encounter_like_curd.go @@ -0,0 +1,11 @@ +package curd + +import "catface/app/model" + +func CreateEncounterLikeCurdFactory() *EncounterLikeCurd { + return &EncounterLikeCurd{model.CreateEncounterLikeFactory("")} +} + +type EncounterLikeCurd struct { + encounterLike *model.EncounterLike +} diff --git a/routers/web.go b/routers/web.go index d85b5f8..71cda69 100644 --- a/routers/web.go +++ b/routers/web.go @@ -132,6 +132,10 @@ func InitWebRouter() *gin.Engine { encounter.GET(":encounter_id", validatorFactory.Create(consts.ValidatorPrefix+"EncounterDetail")) encounter.POST("", validatorFactory.Create(consts.ValidatorPrefix+"EncounterStore")) + + // Like / unlike + encounter.GET("like", validatorFactory.Create(consts.ValidatorPrefix+"EncounterLikeCreate")) + // encounter.DELETE("like", validatorFactory.Create(consts.ValidatorPrefix+"EncounterLikeDestroy")) } // } }