This commit is contained in:
@@ -20,6 +20,7 @@ type SubscriptionApplicationService interface {
|
||||
// 我的订阅(用户专用)
|
||||
ListMySubscriptions(ctx context.Context, userID string, query *queries.ListSubscriptionsQuery) (*responses.SubscriptionListResponse, error)
|
||||
GetMySubscriptionStats(ctx context.Context, userID string) (*responses.SubscriptionStatsResponse, error)
|
||||
CancelMySubscription(ctx context.Context, userID string, subscriptionID string) error
|
||||
|
||||
// 业务查询
|
||||
GetUserSubscriptions(ctx context.Context, query *queries.GetUserSubscriptionsQuery) ([]*responses.SubscriptionInfoResponse, error)
|
||||
|
||||
@@ -304,6 +304,38 @@ func (s *SubscriptionApplicationServiceImpl) GetMySubscriptionStats(ctx context.
|
||||
}, nil
|
||||
}
|
||||
|
||||
// CancelMySubscription 取消我的订阅
|
||||
// 业务流程:1. 验证订阅是否属于当前用户 2. 取消订阅
|
||||
func (s *SubscriptionApplicationServiceImpl) CancelMySubscription(ctx context.Context, userID string, subscriptionID string) error {
|
||||
// 1. 获取订阅信息
|
||||
subscription, err := s.productSubscriptionService.GetSubscriptionByID(ctx, subscriptionID)
|
||||
if err != nil {
|
||||
s.logger.Error("获取订阅信息失败", zap.String("subscription_id", subscriptionID), zap.Error(err))
|
||||
return fmt.Errorf("订阅不存在")
|
||||
}
|
||||
|
||||
// 2. 验证订阅是否属于当前用户
|
||||
if subscription.UserID != userID {
|
||||
s.logger.Warn("用户尝试取消不属于自己的订阅",
|
||||
zap.String("user_id", userID),
|
||||
zap.String("subscription_id", subscriptionID),
|
||||
zap.String("subscription_user_id", subscription.UserID))
|
||||
return fmt.Errorf("无权取消此订阅")
|
||||
}
|
||||
|
||||
// 3. 取消订阅(软删除)
|
||||
if err := s.productSubscriptionService.CancelSubscription(ctx, subscriptionID); err != nil {
|
||||
s.logger.Error("取消订阅失败", zap.String("subscription_id", subscriptionID), zap.Error(err))
|
||||
return fmt.Errorf("取消订阅失败: %w", err)
|
||||
}
|
||||
|
||||
s.logger.Info("用户取消订阅成功",
|
||||
zap.String("user_id", userID),
|
||||
zap.String("subscription_id", subscriptionID))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// convertToSubscriptionInfoResponse 转换为订阅信息响应
|
||||
func (s *SubscriptionApplicationServiceImpl) convertToSubscriptionInfoResponse(subscription *entities.Subscription) *responses.SubscriptionInfoResponse {
|
||||
// 查询用户信息
|
||||
|
||||
Reference in New Issue
Block a user