update #1
This commit is contained in:
parent
439bd7c6da
commit
bcf1ac7a24
@ -62,8 +62,9 @@ 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")
|
user_id := context.GetFloat64(consts.ValidatorPrefix + "user_id")
|
||||||
|
mode := context.GetString(consts.ValidatorPrefix + "mode")
|
||||||
|
|
||||||
encounters := curd.CreateEncounterCurdFactory().List(int(num), int(skip), int(user_id))
|
encounters := curd.CreateEncounterCurdFactory().List(int(num), int(skip), int(user_id), mode)
|
||||||
if encounters != nil {
|
if encounters != nil {
|
||||||
response.Success(context, consts.CurdStatusOkMsg, encounters)
|
response.Success(context, consts.CurdStatusOkMsg, encounters)
|
||||||
} else {
|
} else {
|
||||||
|
@ -10,9 +10,10 @@ 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"`
|
UserId int `form:"user_id" json:"user_id"`
|
||||||
|
Mode string `form:"mode" json:"mode"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l List) CheckParams(context *gin.Context) {
|
func (l List) CheckParams(context *gin.Context) {
|
||||||
|
@ -62,3 +62,22 @@ func (a *AnimalLike) LikedBatch(userId int, animalIds []int) ([]bool, error) {
|
|||||||
|
|
||||||
return likedResults, nil
|
return likedResults, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: 获取所有关注的猫咪id
|
||||||
|
* @param {int} userId
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
|
func (a *AnimalLike) LikedCats(userId int) (res []int) {
|
||||||
|
var results []AnimalLike
|
||||||
|
db := a.Select("animal_id").Where("user_id = ?", userId).Find(&results)
|
||||||
|
if db.Error != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, result := range results {
|
||||||
|
res = append(res, result.AnimalId)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"catface/app/global/variable"
|
"catface/app/global/variable"
|
||||||
"catface/app/utils/data_bind"
|
"catface/app/utils/data_bind"
|
||||||
"log"
|
"log"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
@ -57,31 +58,12 @@ func (e *Encounter) InsertDate(c *gin.Context) bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Encounter) Show(num, skip, user_id int) (temp []EncounterList) {
|
func formatEncounterList(rows *gorm.DB) (temp []EncounterList, err error) {
|
||||||
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 AND l.is_del = 0
|
|
||||||
) AS ue_like
|
|
||||||
FROM encounters e
|
|
||||||
JOIN tb_users u ON e.user_id = u.id
|
|
||||||
LIMIT ? OFFSET ?
|
|
||||||
`
|
|
||||||
// err := e.Raw(sql, user_id, num, skip).Scan(&temp).Error
|
|
||||||
// fmt.Println(err)
|
|
||||||
|
|
||||||
var rows *gorm.DB
|
|
||||||
if rows = e.Raw(sql, user_id, num, skip); rows.Error != nil {
|
|
||||||
log.Println("查询失败:", rows.Error)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
// 获取底层的 sql.Rows 对象
|
// 获取底层的 sql.Rows 对象
|
||||||
sqlRows, err := rows.Rows()
|
sqlRows, err := rows.Rows()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("获取 sql.Rows 失败:", err)
|
log.Println("获取 sql.Rows 失败:", err)
|
||||||
return nil
|
return nil, err
|
||||||
}
|
}
|
||||||
defer sqlRows.Close()
|
defer sqlRows.Close()
|
||||||
|
|
||||||
@ -102,6 +84,49 @@ func (e *Encounter) Show(num, skip, user_id int) (temp []EncounterList) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *Encounter) Show(num, skip, user_id int, animals_id []int) (temp []EncounterList) {
|
||||||
|
// SATGE - 1:build SQL
|
||||||
|
var sqlBuilder strings.Builder
|
||||||
|
|
||||||
|
// 构建基础查询
|
||||||
|
sqlBuilder.WriteString(`
|
||||||
|
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 AND l.is_del = 0
|
||||||
|
) AS ue_like
|
||||||
|
FROM encounters e
|
||||||
|
JOIN tb_users u ON e.user_id = u.id
|
||||||
|
`)
|
||||||
|
|
||||||
|
// 动态插入 animals_id 条件
|
||||||
|
if len(animals_id) > 0 {
|
||||||
|
sqlBuilder.WriteString("WHERE e.animal_id IN (?)")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加排序和分页
|
||||||
|
sqlBuilder.WriteString(`
|
||||||
|
ORDER BY e.updated_at DESC
|
||||||
|
LIMIT ? OFFSET ?
|
||||||
|
`)
|
||||||
|
|
||||||
|
sql := sqlBuilder.String() // 获取到 SQL;
|
||||||
|
|
||||||
|
// STAGE - 2: Exe SQL
|
||||||
|
var rows *gorm.DB
|
||||||
|
if rows = e.Raw(sql, user_id, num, skip); rows.Error != nil {
|
||||||
|
log.Println("查询失败:", rows.Error)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var err error
|
||||||
|
if temp, err = formatEncounterList(rows); err != nil {
|
||||||
|
log.Println("格式化数据失败:", err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func (e *Encounter) ShowByID(id int64) (temp *Encounter, err error) {
|
func (e *Encounter) ShowByID(id int64) (temp *Encounter, err error) {
|
||||||
// 1. search encounter
|
// 1. search encounter
|
||||||
if err = e.Where("id = ?", id).First(&temp).Error; err != nil {
|
if err = e.Where("id = ?", id).First(&temp).Error; err != nil {
|
||||||
|
1
app/model/encounter_animal_link.go
Normal file
1
app/model/encounter_animal_link.go
Normal file
@ -0,0 +1 @@
|
|||||||
|
package model
|
@ -14,11 +14,18 @@ type EncounterCurd struct {
|
|||||||
encounter *model.Encounter
|
encounter *model.Encounter
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *EncounterCurd) List(num, skip, user_id int) []model.EncounterList {
|
func (e *EncounterCurd) List(num, skip, user_id int, mode string) (result []model.EncounterList) {
|
||||||
if num == 0 {
|
if num == 0 {
|
||||||
num = 15
|
num = 10
|
||||||
}
|
}
|
||||||
return model.CreateEncounterFactory("").Show(num, skip, user_id)
|
|
||||||
|
var likedAnimalIds []int
|
||||||
|
switch mode {
|
||||||
|
case "liked":
|
||||||
|
likedAnimalIds = model.CreateAnimalLikeFactory("").LikedCats(user_id)
|
||||||
|
}
|
||||||
|
result = model.CreateEncounterFactory("").Show(num, skip, user_id, likedAnimalIds)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *EncounterCurd) Detail(id string) *model.EncounterDetail {
|
func (e *EncounterCurd) Detail(id string) *model.EncounterDetail {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user