feat: 个人中心发布
This commit is contained in:
+65
-2
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user