fix sub
This commit is contained in:
@@ -59,6 +59,10 @@ type SubscriptionApplicationService interface {
|
|||||||
GetSubscriptionByID(ctx context.Context, query *queries.GetSubscriptionQuery) (*responses.SubscriptionInfoResponse, error)
|
GetSubscriptionByID(ctx context.Context, query *queries.GetSubscriptionQuery) (*responses.SubscriptionInfoResponse, error)
|
||||||
ListSubscriptions(ctx context.Context, query *queries.ListSubscriptionsQuery) (*responses.SubscriptionListResponse, 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)
|
GetUserSubscriptions(ctx context.Context, query *queries.GetUserSubscriptionsQuery) ([]*responses.SubscriptionInfoResponse, error)
|
||||||
GetProductSubscriptions(ctx context.Context, query *queries.GetProductSubscriptionsQuery) ([]*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
|
return s.convertToSubscriptionInfoResponse(subscription), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ListSubscriptions 获取订阅列表
|
// ListSubscriptions 获取订阅列表(管理员用)
|
||||||
// 业务流程:1. 获取订阅列表 2. 构建响应数据
|
// 业务流程:1. 获取订阅列表 2. 构建响应数据
|
||||||
func (s *SubscriptionApplicationServiceImpl) ListSubscriptions(ctx context.Context, query *appQueries.ListSubscriptionsQuery) (*responses.SubscriptionListResponse, error) {
|
func (s *SubscriptionApplicationServiceImpl) ListSubscriptions(ctx context.Context, query *appQueries.ListSubscriptionsQuery) (*responses.SubscriptionListResponse, error) {
|
||||||
repoQuery := &repoQueries.ListSubscriptionsQuery{
|
repoQuery := &repoQueries.ListSubscriptionsQuery{
|
||||||
Page: query.Page,
|
Page: query.Page,
|
||||||
PageSize: query.PageSize,
|
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)
|
subscriptions, total, err := s.productSubscriptionService.ListSubscriptions(ctx, repoQuery)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -147,6 +181,27 @@ func (s *SubscriptionApplicationServiceImpl) GetSubscriptionStats(ctx context.Co
|
|||||||
}, nil
|
}, 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 转换为订阅信息响应
|
// convertToSubscriptionInfoResponse 转换为订阅信息响应
|
||||||
func (s *SubscriptionApplicationServiceImpl) convertToSubscriptionInfoResponse(subscription *entities.Subscription) *responses.SubscriptionInfoResponse {
|
func (s *SubscriptionApplicationServiceImpl) convertToSubscriptionInfoResponse(subscription *entities.Subscription) *responses.SubscriptionInfoResponse {
|
||||||
return &responses.SubscriptionInfoResponse{
|
return &responses.SubscriptionInfoResponse{
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ func (p *Product) IsVisibleToUser() bool {
|
|||||||
|
|
||||||
// CanBeSubscribed 检查产品是否可以订阅
|
// CanBeSubscribed 检查产品是否可以订阅
|
||||||
func (p *Product) CanBeSubscribed() bool {
|
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
|
var query queries.ListSubscriptionsQuery
|
||||||
if err := h.validator.ValidateQuery(c, &query); err != nil {
|
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
|
query.PageSize = 100
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置用户ID
|
result, err := h.subAppService.ListMySubscriptions(c.Request.Context(), userID, &query)
|
||||||
query.UserID = userID
|
|
||||||
|
|
||||||
result, err := h.subAppService.ListSubscriptions(c.Request.Context(), &query)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
h.logger.Error("获取我的订阅列表失败", zap.Error(err), zap.String("user_id", userID))
|
h.logger.Error("获取我的订阅列表失败", zap.Error(err), zap.String("user_id", userID))
|
||||||
h.responseBuilder.InternalError(c, "获取我的订阅列表失败")
|
h.responseBuilder.InternalError(c, "获取我的订阅列表失败")
|
||||||
@@ -439,7 +436,7 @@ func (h *ProductHandler) GetMySubscriptionStats(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
result, err := h.subAppService.GetSubscriptionStats(c.Request.Context())
|
result, err := h.subAppService.GetMySubscriptionStats(c.Request.Context(), userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
h.logger.Error("获取我的订阅统计失败", zap.Error(err), zap.String("user_id", userID))
|
h.logger.Error("获取我的订阅统计失败", zap.Error(err), zap.String("user_id", userID))
|
||||||
h.responseBuilder.InternalError(c, "获取我的订阅统计失败")
|
h.responseBuilder.InternalError(c, "获取我的订阅统计失败")
|
||||||
|
|||||||
Reference in New Issue
Block a user