fix sub
This commit is contained in:
@@ -59,6 +59,10 @@ type SubscriptionApplicationService interface {
|
||||
GetSubscriptionByID(ctx context.Context, query *queries.GetSubscriptionQuery) (*responses.SubscriptionInfoResponse, error)
|
||||
ListSubscriptions(ctx context.Context, query *queries.ListSubscriptionsQuery) (*responses.SubscriptionListResponse, error)
|
||||
|
||||
// 我的订阅(用户专用)
|
||||
ListMySubscriptions(ctx context.Context, userID string, query *queries.ListSubscriptionsQuery) (*responses.SubscriptionListResponse, error)
|
||||
GetMySubscriptionStats(ctx context.Context, userID string) (*responses.SubscriptionStatsResponse, error)
|
||||
|
||||
// 业务查询
|
||||
GetUserSubscriptions(ctx context.Context, query *queries.GetUserSubscriptionsQuery) ([]*responses.SubscriptionInfoResponse, error)
|
||||
GetProductSubscriptions(ctx context.Context, query *queries.GetProductSubscriptionsQuery) ([]*responses.SubscriptionInfoResponse, error)
|
||||
|
||||
@@ -70,12 +70,46 @@ func (s *SubscriptionApplicationServiceImpl) GetSubscriptionByID(ctx context.Con
|
||||
return s.convertToSubscriptionInfoResponse(subscription), nil
|
||||
}
|
||||
|
||||
// ListSubscriptions 获取订阅列表
|
||||
// ListSubscriptions 获取订阅列表(管理员用)
|
||||
// 业务流程:1. 获取订阅列表 2. 构建响应数据
|
||||
func (s *SubscriptionApplicationServiceImpl) ListSubscriptions(ctx context.Context, query *appQueries.ListSubscriptionsQuery) (*responses.SubscriptionListResponse, error) {
|
||||
repoQuery := &repoQueries.ListSubscriptionsQuery{
|
||||
Page: query.Page,
|
||||
PageSize: query.PageSize,
|
||||
Page: query.Page,
|
||||
PageSize: query.PageSize,
|
||||
UserID: query.UserID, // 管理员可以按用户筛选
|
||||
Keyword: query.Keyword,
|
||||
SortBy: query.SortBy,
|
||||
SortOrder: query.SortOrder,
|
||||
}
|
||||
subscriptions, total, err := s.productSubscriptionService.ListSubscriptions(ctx, repoQuery)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items := make([]responses.SubscriptionInfoResponse, len(subscriptions))
|
||||
for i := range subscriptions {
|
||||
resp := s.convertToSubscriptionInfoResponse(subscriptions[i])
|
||||
if resp != nil {
|
||||
items[i] = *resp // 解引用指针
|
||||
}
|
||||
}
|
||||
return &responses.SubscriptionListResponse{
|
||||
Total: total,
|
||||
Page: query.Page,
|
||||
Size: query.PageSize,
|
||||
Items: items,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// ListMySubscriptions 获取我的订阅列表(用户用)
|
||||
// 业务流程:1. 获取用户订阅列表 2. 构建响应数据
|
||||
func (s *SubscriptionApplicationServiceImpl) ListMySubscriptions(ctx context.Context, userID string, query *appQueries.ListSubscriptionsQuery) (*responses.SubscriptionListResponse, error) {
|
||||
repoQuery := &repoQueries.ListSubscriptionsQuery{
|
||||
Page: query.Page,
|
||||
PageSize: query.PageSize,
|
||||
UserID: userID, // 强制设置为当前用户ID
|
||||
Keyword: query.Keyword,
|
||||
SortBy: query.SortBy,
|
||||
SortOrder: query.SortOrder,
|
||||
}
|
||||
subscriptions, total, err := s.productSubscriptionService.ListSubscriptions(ctx, repoQuery)
|
||||
if err != nil {
|
||||
@@ -147,6 +181,27 @@ func (s *SubscriptionApplicationServiceImpl) GetSubscriptionStats(ctx context.Co
|
||||
}, nil
|
||||
}
|
||||
|
||||
// GetMySubscriptionStats 获取我的订阅统计信息
|
||||
// 业务流程:1. 获取用户订阅统计 2. 构建响应数据
|
||||
func (s *SubscriptionApplicationServiceImpl) GetMySubscriptionStats(ctx context.Context, userID string) (*responses.SubscriptionStatsResponse, error) {
|
||||
// 获取用户订阅数量
|
||||
subscriptions, err := s.productSubscriptionService.GetUserSubscriptions(ctx, userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 计算总收益
|
||||
var totalRevenue float64
|
||||
for _, subscription := range subscriptions {
|
||||
totalRevenue += subscription.Price.InexactFloat64()
|
||||
}
|
||||
|
||||
return &responses.SubscriptionStatsResponse{
|
||||
TotalSubscriptions: int64(len(subscriptions)),
|
||||
TotalRevenue: totalRevenue,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// convertToSubscriptionInfoResponse 转换为订阅信息响应
|
||||
func (s *SubscriptionApplicationServiceImpl) convertToSubscriptionInfoResponse(subscription *entities.Subscription) *responses.SubscriptionInfoResponse {
|
||||
return &responses.SubscriptionInfoResponse{
|
||||
|
||||
@@ -55,7 +55,7 @@ func (p *Product) IsVisibleToUser() bool {
|
||||
|
||||
// CanBeSubscribed 检查产品是否可以订阅
|
||||
func (p *Product) CanBeSubscribed() bool {
|
||||
return p.IsValid() && p.IsVisible
|
||||
return p.IsValid()
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -394,7 +394,7 @@ func (h *ProductHandler) ListMySubscriptions(c *gin.Context) {
|
||||
|
||||
var query queries.ListSubscriptionsQuery
|
||||
if err := h.validator.ValidateQuery(c, &query); err != nil {
|
||||
return
|
||||
return
|
||||
}
|
||||
|
||||
// 设置默认值
|
||||
@@ -408,10 +408,7 @@ func (h *ProductHandler) ListMySubscriptions(c *gin.Context) {
|
||||
query.PageSize = 100
|
||||
}
|
||||
|
||||
// 设置用户ID
|
||||
query.UserID = userID
|
||||
|
||||
result, err := h.subAppService.ListSubscriptions(c.Request.Context(), &query)
|
||||
result, err := h.subAppService.ListMySubscriptions(c.Request.Context(), userID, &query)
|
||||
if err != nil {
|
||||
h.logger.Error("获取我的订阅列表失败", zap.Error(err), zap.String("user_id", userID))
|
||||
h.responseBuilder.InternalError(c, "获取我的订阅列表失败")
|
||||
@@ -439,7 +436,7 @@ func (h *ProductHandler) GetMySubscriptionStats(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
result, err := h.subAppService.GetSubscriptionStats(c.Request.Context())
|
||||
result, err := h.subAppService.GetMySubscriptionStats(c.Request.Context(), userID)
|
||||
if err != nil {
|
||||
h.logger.Error("获取我的订阅统计失败", zap.Error(err), zap.String("user_id", userID))
|
||||
h.responseBuilder.InternalError(c, "获取我的订阅统计失败")
|
||||
|
||||
Reference in New Issue
Block a user