Browse Source

3.1收藏

kobe6258 3 months ago
parent
commit
c02a79005c

+ 13 - 1
controllers/report/report_controller.go

@@ -377,16 +377,27 @@ func (r *ReportController) GetReport(reportId int, productId int) {
 			logger.Info("当前用户未登录,展示部分详情")
 		}
 		var subscribeStatus string
+		var wg sync.WaitGroup
 		if productId > 0 {
-			var wg sync.WaitGroup
 			wg.Add(1)
 			go func() {
 				defer wg.Done()
 				subscribeStatus = user.GetUserScribeStatus(productId, userInfo.Id)
 			}()
+
 		} else {
 			subscribeStatus = user.UnSubscribe
 		}
+		wg.Add(1)
+		var isCollect bool
+		go func() {
+			defer wg.Done()
+			isCollect, err = user.GetReportBookMarked(reportId, userInfo.Id)
+			if err != nil {
+				logger.Error("获取研报收藏状态失败:%v", err)
+			}
+		}()
+		wg.Wait()
 		reportDetail, err := report.GetReportById(reportId, isLogin(detailType), userInfo.Id)
 		if err != nil {
 			r.FailedResult("获取研报详情失败", result)
@@ -394,6 +405,7 @@ func (r *ReportController) GetReport(reportId int, productId int) {
 			return
 		}
 		reportDetail.SubscribeStatus = subscribeStatus
+		reportDetail.IsCollect = isCollect
 		r.SuccessResult("获取研报详情成功", reportDetail, result)
 		return
 	})

+ 1 - 0
controllers/user/bookmark_controller.go

@@ -361,6 +361,7 @@ func getReportList(info page.PageInfo, templateUserId int, sourceIds []int) (lis
 	if err != nil {
 		return nil, err
 	}
+	list = make([]BookMarkReport, len(sourceIds))
 	// 并发获取数据
 	for index, sourceId := range sourceIds {
 		for _, reportDTO := range reports {

+ 1 - 0
domian/report/report_service.go

@@ -95,6 +95,7 @@ type ReportDTO struct {
 	IsPackage       bool            `json:"isPackage"`
 	Score           float64         `json:"score"`
 	Show            bool            `json:"-"`
+	IsCollect       bool            `json:"isCollected"`
 }
 
 type Detail struct {

+ 36 - 0
domian/user/bookmark_service.go

@@ -6,6 +6,7 @@ import (
 	"eta/eta_mini_ht_api/common/utils/page"
 	userDao "eta/eta_mini_ht_api/models/user"
 	"gorm.io/gorm"
+	"time"
 )
 
 var (
@@ -15,6 +16,15 @@ var (
 	}
 )
 
+type BookMarkDTO struct {
+	ID         int
+	UserID     int
+	SourceID   int
+	SourceType string
+	Status     string
+	MarkedTime string
+}
+
 func BookMark(templateUserId int, sourceId int, sourceType string) (err error) {
 	sourceTypeItem := sourceTransMap[sourceType]
 	if sourceTypeItem == "" {
@@ -86,3 +96,29 @@ func GetBookMarkPageRangeBySourceType(templateUserId int, sourceType string, inf
 	offset := page.StartIndex(info.Current, info.PageSize)
 	return userDao.GetBookMarkPageRangeBySourceType(templateUserId, sourceTypeItem, offset, info.PageSize, sourceIds)
 }
+
+func GetBookMarkedBySource(sourceId int, templateUserId int, sourceType string) (bookMarkDTO BookMarkDTO, err error) {
+	sourceTypeItem := sourceTransMap[sourceType]
+	if sourceTypeItem == "" {
+		logger.Error("非法的资源类型")
+		err = errors.New("非法的资源类型")
+		return
+	}
+	bookMark, err := userDao.GetBookMarkedBySource(sourceId, templateUserId, sourceTypeItem)
+	if err != nil {
+		logger.Error("获取用户收藏记录失败:%v", err)
+		return
+	}
+	bookMarkDTO = convertUserBookmark(bookMark)
+	return
+}
+
+func convertUserBookmark(bookmark userDao.UserBookmark) (bookMark BookMarkDTO) {
+	bookMark.ID = bookmark.ID
+	bookMark.UserID = bookmark.UserID
+	bookMark.SourceID = bookmark.SourceID
+	bookMark.SourceType = string(bookmark.SourceType)
+	bookMark.Status = string(bookmark.Status)
+	bookMark.MarkedTime = bookmark.MarkedTime.Format(time.DateTime)
+	return
+}

+ 1 - 1
models/report/report.go

@@ -430,7 +430,7 @@ func FilterReportIds(ids []int) (total int64, reportIds []int, err error) {
 		) a  
 		where a.risks = ''
 	`
-	err = db.Select("id").
+	err = db.Model(&Report{}).Select("id").
 		Where("id in ?", ids).
 		Where("classify_id not in (?)", gorm.Expr(subQuery)).
 		Scan(&reportIds).Error

+ 7 - 1
models/user/user_bookmark.go

@@ -75,6 +75,12 @@ func GetBookMarkPageBySourceType(templateUserId int, sourceType SourceType, offs
 
 func GetBookMarkPageRangeBySourceType(templateUserId int, sourceType SourceType, offset int, limit int, sourceIds []int) (filterSourceIds []int, err error) {
 	db := models.Main()
-	err = db.Model(&UserBookmark{}).Select("source_id").Where("user_id = ?  AND source_type = ? and source_id in ? and status =? ", templateUserId, sourceType, sourceIds, Marked).Order("marked_time DESC").Offset(offset).Limit(limit).Scan(&sourceIds).Error
+	err = db.Model(&UserBookmark{}).Select("source_id").Where("user_id = ?  AND source_type = ? and source_id in ? and status =? ", templateUserId, sourceType, sourceIds, Marked).Order("marked_time DESC").Offset(offset).Limit(limit).Scan(&filterSourceIds).Error
+	return
+}
+
+func GetBookMarkedBySource(sourceId int, templateUserId int, sourceType SourceType) (bookMark UserBookmark, err error) {
+	db := models.Main()
+	err = db.Model(&UserBookmark{}).Select("*").Where("user_id = ?  AND source_type = ? and source_id =?", templateUserId, sourceType, sourceId).First(&bookMark).Error
 	return
 }

+ 16 - 0
service/user/user_service.go

@@ -25,6 +25,9 @@ const (
 	SubscribeExpired = "expired"
 	UnSubscribe      = "unSubscribe"
 	Subscribing      = "Subscribing"
+
+	ReportBookMark = "report"
+	ChartBookMark  = "chart"
 )
 
 type User struct {
@@ -517,3 +520,16 @@ func GetBookMarkPageBySourceType(userId int, pageInfo page.PageInfo, sourceType
 func GetBookMarkPageRangeBySourceType(userId int, pageInfo page.PageInfo, sourceType string, sourceIds []int) (filterSourceIds []int, err error) {
 	return userService.GetBookMarkPageRangeBySourceType(userId, sourceType, pageInfo, sourceIds)
 }
+
+func GetReportBookMarked(sourceId int, templateUserId int) (collected bool, err error) {
+	bookMark, err := userService.GetBookMarkedBySource(sourceId, templateUserId, ReportBookMark)
+	if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
+		return
+	}
+	if errors.Is(err, gorm.ErrRecordNotFound) {
+		err = nil
+		return
+	}
+	collected = bookMark.Status == string(userDao.Marked)
+	return
+}