diff --git a/go.mod b/go.mod index ee8b1f2..0a3d248 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/spf13/viper v1.21.0 golang.org/x/crypto v0.52.0 golang.org/x/image v0.41.0 + golang.org/x/sync v0.20.0 gorm.io/driver/postgres v1.6.0 gorm.io/gorm v1.31.1 ) @@ -56,7 +57,6 @@ require ( go.yaml.in/yaml/v3 v3.0.4 // indirect golang.org/x/arch v0.22.0 // indirect golang.org/x/net v0.54.0 // indirect - golang.org/x/sync v0.20.0 // indirect golang.org/x/sys v0.45.0 // indirect golang.org/x/text v0.37.0 // indirect google.golang.org/protobuf v1.36.10 // indirect diff --git a/internal/service/trends_service.go b/internal/service/trends_service.go index 303a218..b314de5 100644 --- a/internal/service/trends_service.go +++ b/internal/service/trends_service.go @@ -1,6 +1,10 @@ package service -import "fmt" +import ( + "fmt" + + "golang.org/x/sync/errgroup" +) // TrendResult 趋势返回结构 type TrendResult struct { @@ -12,10 +16,10 @@ type TrendResult struct { // TrendsService Studio 趋势分析服务 type TrendsService struct { - energyRepo EnergyTrendStore - commentRepo CommentTrendStore - likeRepo LikeTrendStore - favoriteRepo FavoriteTrendStore + energyRepo EnergyTrendStore + commentRepo CommentTrendStore + likeRepo LikeTrendStore + favoriteRepo FavoriteTrendStore } // NewTrendsService 构造函数 @@ -28,32 +32,50 @@ func NewTrendsService(energyRepo EnergyTrendStore, commentRepo CommentTrendStore } } -// GetTrends 获取指定时间范围的趋势数据 +// 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) + result := &TrendResult{} + g := new(errgroup.Group) + + g.Go(func() error { + var err error + result.Energy, err = s.energyRepo.AggregateEnergyByAuthor(userID, since) + if err != nil { + return fmt.Errorf("查询赋能趋势: %w", err) + } + return nil + }) + + g.Go(func() error { + var err error + result.Comments, err = s.commentRepo.AggregateCommentsByAuthor(userID, since) + if err != nil { + return fmt.Errorf("查询评论趋势: %w", err) + } + return nil + }) + + g.Go(func() error { + var err error + result.Likes, err = s.likeRepo.AggregateLikesByAuthor(userID, since) + if err != nil { + return fmt.Errorf("查询点赞趋势: %w", err) + } + return nil + }) + + g.Go(func() error { + var err error + result.Favorites, err = s.favoriteRepo.AggregateFavoritesByAuthor(userID, since) + if err != nil { + return fmt.Errorf("查询收藏趋势: %w", err) + } + return nil + }) + + if err := g.Wait(); err != nil { + return nil, 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 + return result, nil }