feat: 个人中心发布

This commit is contained in:
Blizzard
2026-02-14 11:38:59 +08:00
parent f1d9f63296
commit 4820323381
35 changed files with 691 additions and 148 deletions
+65 -2
View File
@@ -149,7 +149,7 @@ func (s *WikiService) UpdateWiki(req plantReq.UpdateWiki) error {
}
// WikiPage 分页
func (s *WikiService) WikiPage(req plantReq.WikiPage) (list interface{}, total int64, err error) {
func (s *WikiService) WikiPage(req plantReq.WikiPage, userId string) (list interface{}, total int64, err error) {
limit := req.PageSize
offset := req.PageSize * (req.Current - 1)
db := global.DB.Model(&plant.Wiki{}).Preload("ImgList", func(db *gorm.DB) *gorm.DB {
@@ -173,11 +173,35 @@ func (s *WikiService) WikiPage(req plantReq.WikiPage) (list interface{}, total i
return
}
err = db.Limit(limit).Offset(offset).Order("created_at desc").Find(&wikis).Error
// 优化 N+1 查询
var wikiIds []string
for _, v := range wikis {
wikiIds = append(wikiIds, v.Id)
}
//批量查询当前用户的收藏
var stars []*plant.UserStar
err = global.DB.Where("user_id = ? and wiki_id in ?", userId, wikiIds).Find(&stars).Error
if err != nil {
return
}
starsMap := make(map[string]bool)
for _, v := range stars {
starsMap[v.WikiId] = true
}
// 是否收藏
for i := range wikis {
if starsMap[wikis[i].Id] {
wikis[i].HasStar = 1
} else {
wikis[i].HasStar = 0
}
}
return wikis, total, err
}
// Detail 详情
func (s *WikiService) Detail(id string) (w plant.Wiki, err error) {
func (s *WikiService) Detail(id, userId string) (w plant.Wiki, err error) {
var wiki plant.Wiki
err = global.DB.Where("id = ?", id).
Preload("Classes", func(db *gorm.DB) *gorm.DB {
@@ -193,5 +217,44 @@ func (s *WikiService) Detail(id string) (w plant.Wiki, err error) {
if err != nil {
return
}
var stars []plant.UserStar
err = global.DB.Where("user_id = ? and wiki_id = ?", userId, id).Find(&stars).Error
if err != nil {
return
}
if len(stars) > 0 {
wiki.HasStar = 1
}
return wiki, nil
}
// StarWiki 收藏
func (s *WikiService) StarWiki(userId, wikiId, class string) error {
if class == "1" {
return global.DB.Transaction(func(tx *gorm.DB) error {
var wiki plant.Wiki
err := tx.Where("id = ?", wikiId).First(&wiki).Error
if err != nil {
return err
}
//2.添加到我的收藏
star := plant.UserStar{
UserId: userId,
Type: 1,
WikiId: wikiId,
}
return tx.Create(&star).Error
})
} else if class == "2" {
return global.DB.Transaction(func(tx *gorm.DB) error {
var star plant.UserStar
err := tx.Where("wiki_id = ? and user_id = ?", wikiId, userId).First(&star).Error
if err != nil {
return err
}
//2.删除收藏
return tx.Unscoped().Delete(&star).Error
})
}
return nil
}