update encounter like #1

This commit is contained in:
Havoc412 2024-10-21 01:24:01 +08:00
parent 127ef0722b
commit bb9916ab60
7 changed files with 69 additions and 9 deletions

View File

@ -61,8 +61,9 @@ func (e *Encounters) Create(context *gin.Context) {
func (e *Encounters) List(context *gin.Context) { func (e *Encounters) List(context *gin.Context) {
num := context.GetFloat64(consts.ValidatorPrefix + "num") num := context.GetFloat64(consts.ValidatorPrefix + "num")
skip := context.GetFloat64(consts.ValidatorPrefix + "skip") 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 { if encounters != nil {
response.Success(context, consts.CurdStatusOkMsg, encounters) response.Success(context, consts.CurdStatusOkMsg, encounters)
} else { } else {

View File

@ -10,8 +10,9 @@ import (
) )
type List struct { type List struct {
Num int `form:"num" json:"num"` Num int `form:"num" json:"num"`
Skip int `form:"skip" json:"skip"` Skip int `form:"skip" json:"skip"`
UserId int `form:"user_id" json:"user_id"`
} }
func (l List) CheckParams(context *gin.Context) { func (l List) CheckParams(context *gin.Context) {

View File

@ -3,9 +3,11 @@ package model
import ( import (
"catface/app/global/variable" "catface/app/global/variable"
"catface/app/utils/data_bind" "catface/app/utils/data_bind"
"log"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go.uber.org/zap" "go.uber.org/zap"
"gorm.io/gorm"
) )
func CreateEncounterFactory(sqlType string) *Encounter { func CreateEncounterFactory(sqlType string) *Encounter {
@ -52,12 +54,48 @@ func (e *Encounter) InsertDate(c *gin.Context) bool {
return false return false
} }
func (e *Encounter) Show(num, skip int) (temp []EncounterList) { func (e *Encounter) Show(num, skip, user_id int) (temp []EncounterList) {
sql := `SELECT e.id, user_id, title, avatar, avatar_height, avatar_width, e.updated_at, sql := `
user_name, user_avatar FROM encounters e JOIN tb_users u ON e.user_id = u.id 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 ? 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 return
} }

View File

@ -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
}

View File

@ -11,6 +11,7 @@ type EncounterList struct {
AvatarHeight int `form:"avatar_height" json:"height"` AvatarHeight int `form:"avatar_height" json:"height"`
AvatarWidth int `form:"avatar_width" json:"width"` AvatarWidth int `form:"avatar_width" json:"width"`
UpdatedAt *time.Time `form:"updated_at" json:"time"` // TIP 设为 *time.Timeomitempty 和 autoUpdated 就都可以生效 UpdatedAt *time.Time `form:"updated_at" json:"time"` // TIP 设为 *time.Timeomitempty 和 autoUpdated 就都可以生效
Like bool `form:"ue_like" json:"like"`
UserName string `form:"user_name" json:"userName"` UserName string `form:"user_name" json:"userName"`
UserAvatar string `form:"user_avatar" json:"userAvatar"` UserAvatar string `form:"user_avatar" json:"userAvatar"`

View File

@ -10,9 +10,9 @@ type EncounterCurd struct {
encounter *model.Encounter 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 { if num == 0 {
num = 15 num = 15
} }
return model.CreateEncounterFactory("").Show(num, skip) return model.CreateEncounterFactory("").Show(num, skip, user_id)
} }

View File

@ -25,3 +25,13 @@ func TestEncouner(t *testing.T) {
t.Error(err) t.Error(err)
} }
} }
func TestEncounterLike(t *testing.T) {
Init()
encounterLike := model.EncounterLike{}
err := DB.AutoMigrate(&encounterLike)
if err != nil {
t.Error(err)
}
}