From bb9916ab603af350add132c0c49566fec96655d9 Mon Sep 17 00:00:00 2001 From: Havoc412 <2993167370@qq.com> Date: Mon, 21 Oct 2024 01:24:01 +0800 Subject: [PATCH] update encounter like #1 --- .../controller/web/encounter_controller.go | 3 +- app/http/validator/web/encounter/list.go | 5 +- app/model/encounter.go | 46 +++++++++++++++++-- app/model/encounter_like.go | 9 ++++ app/model/encounter_result.go | 1 + app/service/encounter/curd/encounter_curd.go | 4 +- test/models_test.go | 10 ++++ 7 files changed, 69 insertions(+), 9 deletions(-) create mode 100644 app/model/encounter_like.go diff --git a/app/http/controller/web/encounter_controller.go b/app/http/controller/web/encounter_controller.go index 7a9d791..cef49ce 100644 --- a/app/http/controller/web/encounter_controller.go +++ b/app/http/controller/web/encounter_controller.go @@ -61,8 +61,9 @@ func (e *Encounters) Create(context *gin.Context) { func (e *Encounters) List(context *gin.Context) { num := context.GetFloat64(consts.ValidatorPrefix + "num") skip := context.GetFloat64(consts.ValidatorPrefix + "skip") + user_id := context.GetFloat64(consts.ValidatorPrefix + "user_id") - encounters := curd.CreateEncounterCurdFactory().List(int(num), int(skip)) + encounters := curd.CreateEncounterCurdFactory().List(int(num), int(skip), int(user_id)) if encounters != nil { response.Success(context, consts.CurdStatusOkMsg, encounters) } else { diff --git a/app/http/validator/web/encounter/list.go b/app/http/validator/web/encounter/list.go index ada534d..71b0384 100644 --- a/app/http/validator/web/encounter/list.go +++ b/app/http/validator/web/encounter/list.go @@ -10,8 +10,9 @@ import ( ) type List struct { - Num int `form:"num" json:"num"` - Skip int `form:"skip" json:"skip"` + Num int `form:"num" json:"num"` + Skip int `form:"skip" json:"skip"` + UserId int `form:"user_id" json:"user_id"` } func (l List) CheckParams(context *gin.Context) { diff --git a/app/model/encounter.go b/app/model/encounter.go index 8f43cb8..77afb49 100644 --- a/app/model/encounter.go +++ b/app/model/encounter.go @@ -3,9 +3,11 @@ package model import ( "catface/app/global/variable" "catface/app/utils/data_bind" + "log" "github.com/gin-gonic/gin" "go.uber.org/zap" + "gorm.io/gorm" ) func CreateEncounterFactory(sqlType string) *Encounter { @@ -52,12 +54,48 @@ func (e *Encounter) InsertDate(c *gin.Context) bool { return false } -func (e *Encounter) Show(num, skip int) (temp []EncounterList) { - sql := `SELECT e.id, 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 +func (e *Encounter) Show(num, skip, user_id int) (temp []EncounterList) { + sql := ` + SELECT e.id, e.user_id, title, avatar, avatar_height, avatar_width, e.updated_at, user_name, user_avatar, + EXISTS ( + SELECT 1 + FROM encounter_likes l + WHERE l.user_id = ? AND l.encounter_id = e.id + ) AS ue_like + FROM encounters e + JOIN tb_users u ON e.user_id = u.id LIMIT ? OFFSET ? ` - _ = e.Raw(sql, num, skip).Scan(&temp) + // 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) + return nil + } + // 获取底层的 sql.Rows 对象 + sqlRows, err := rows.Rows() + if err != nil { + log.Println("获取 sql.Rows 失败:", err) + return nil + } + defer sqlRows.Close() + + for sqlRows.Next() { + var item EncounterList + var ueLikeInt int + dest := []interface{}{ + &item.Id, &item.UserId, &item.Title, &item.Avatar, &item.AvatarHeight, &item.AvatarWidth, &item.UpdatedAt, &item.UserName, &item.UserAvatar, &ueLikeInt, + } + if err := sqlRows.Scan(dest...); err != nil { + log.Println("扫描失败:", err) + continue + } + item.Like = ueLikeInt == 1 + temp = append(temp, item) + } return } diff --git a/app/model/encounter_like.go b/app/model/encounter_like.go new file mode 100644 index 0000000..24f2f9e --- /dev/null +++ b/app/model/encounter_like.go @@ -0,0 +1,9 @@ +package model + +type EncounterLike struct { + BaseModel + UsersModelId int `gorm:"column:user_id" json:"user_id"` + UsersModel UsersModel + EncounterId int `gorm:"column:encounter_id" json:"encounter_id"` + Encounter Encounter +} diff --git a/app/model/encounter_result.go b/app/model/encounter_result.go index b35c1bb..583b757 100644 --- a/app/model/encounter_result.go +++ b/app/model/encounter_result.go @@ -11,6 +11,7 @@ type EncounterList struct { AvatarHeight int `form:"avatar_height" json:"height"` AvatarWidth int `form:"avatar_width" json:"width"` UpdatedAt *time.Time `form:"updated_at" json:"time"` // TIP 设为 *time.Time,omitempty 和 autoUpdated 就都可以生效 + Like bool `form:"ue_like" json:"like"` UserName string `form:"user_name" json:"userName"` UserAvatar string `form:"user_avatar" json:"userAvatar"` diff --git a/app/service/encounter/curd/encounter_curd.go b/app/service/encounter/curd/encounter_curd.go index 0655d2d..4b53dce 100644 --- a/app/service/encounter/curd/encounter_curd.go +++ b/app/service/encounter/curd/encounter_curd.go @@ -10,9 +10,9 @@ type EncounterCurd struct { encounter *model.Encounter } -func (e *EncounterCurd) List(num, skip int) []model.EncounterList { +func (e *EncounterCurd) List(num, skip, user_id int) []model.EncounterList { if num == 0 { num = 15 } - return model.CreateEncounterFactory("").Show(num, skip) + return model.CreateEncounterFactory("").Show(num, skip, user_id) } diff --git a/test/models_test.go b/test/models_test.go index da4d738..719ea81 100644 --- a/test/models_test.go +++ b/test/models_test.go @@ -25,3 +25,13 @@ func TestEncouner(t *testing.T) { t.Error(err) } } + +func TestEncounterLike(t *testing.T) { + Init() + + encounterLike := model.EncounterLike{} + err := DB.AutoMigrate(&encounterLike) + if err != nil { + t.Error(err) + } +}