feat: 收藏夹系统 + Studio 趋势图 + 通知偏好设置
- 新增收藏夹系统 (Folder/FolderItem 模型、CRUD API、前端管理页) - 新增文章详情页收藏按钮 (书签图标、ToggleFavorite 一键收藏) - 新增 Studio 趋势图 (赋能值/评论/点赞/收藏 4 线图, 7d/30d/90d) - 新增通知偏好设置页 (评论/回复/点赞/关注 4 类开关) - 后端通知列表支持按偏好过滤 (排除已关闭的通知类型) - 下载 Chart.js 到本地静态资源 (static/js/chart.umd.min.js) - 补充收藏夹卡片、开关滑块、趋势图网格等 CSS 样式
This commit is contained in:
59
internal/service/trends_service.go
Normal file
59
internal/service/trends_service.go
Normal file
@ -0,0 +1,59 @@
|
||||
package service
|
||||
|
||||
import "fmt"
|
||||
|
||||
// TrendResult 趋势返回结构
|
||||
type TrendResult struct {
|
||||
Energy []TrendPoint `json:"energy"`
|
||||
Comments []TrendPoint `json:"comments"`
|
||||
Likes []TrendPoint `json:"likes"`
|
||||
Favorites []TrendPoint `json:"favorites"`
|
||||
}
|
||||
|
||||
// TrendsService Studio 趋势分析服务
|
||||
type TrendsService struct {
|
||||
energyRepo EnergyTrendStore
|
||||
commentRepo CommentTrendStore
|
||||
likeRepo LikeTrendStore
|
||||
favoriteRepo FavoriteTrendStore
|
||||
}
|
||||
|
||||
// NewTrendsService 构造函数
|
||||
func NewTrendsService(energyRepo EnergyTrendStore, commentRepo CommentTrendStore, likeRepo LikeTrendStore, favoriteRepo FavoriteTrendStore) *TrendsService {
|
||||
return &TrendsService{
|
||||
energyRepo: energyRepo,
|
||||
commentRepo: commentRepo,
|
||||
likeRepo: likeRepo,
|
||||
favoriteRepo: favoriteRepo,
|
||||
}
|
||||
}
|
||||
|
||||
// GetTrends 获取指定时间范围的趋势数据
|
||||
func (s *TrendsService) GetTrends(userID uint, since string) (*TrendResult, error) {
|
||||
energy, err := s.energyRepo.AggregateEnergyByAuthor(userID, since)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询赋能趋势: %w", err)
|
||||
}
|
||||
|
||||
comments, err := s.commentRepo.AggregateCommentsByAuthor(userID, since)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询评论趋势: %w", err)
|
||||
}
|
||||
|
||||
likes, err := s.likeRepo.AggregateLikesByAuthor(userID, since)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询点赞趋势: %w", err)
|
||||
}
|
||||
|
||||
favorites, err := s.favoriteRepo.AggregateFavoritesByAuthor(userID, since)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("查询收藏趋势: %w", err)
|
||||
}
|
||||
|
||||
return &TrendResult{
|
||||
Energy: energy,
|
||||
Comments: comments,
|
||||
Likes: likes,
|
||||
Favorites: favorites,
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user