diff --git a/internal/api/admin/welfare_activities_admin.go b/internal/api/admin/welfare_activities_admin.go index 028b893..b6b3cc2 100644 --- a/internal/api/admin/welfare_activities_admin.go +++ b/internal/api/admin/welfare_activities_admin.go @@ -111,7 +111,7 @@ func (h *handler) GetWelfareActivity() core.HandlerFunc { ctx.AbortWithError(core.Error(http.StatusBadRequest, code.ParamBindError, "活动ID无效")) return } - res, err := h.welfare.GetActivity(ctx.RequestContext(), id, 0) + res, err := h.welfare.GetActivityAdmin(ctx.RequestContext(), id) if err != nil { ctx.AbortWithError(core.Error(http.StatusBadRequest, code.GetActivityError, err.Error())) return diff --git a/internal/service/welfare_activity/activity.go b/internal/service/welfare_activity/activity.go index b99449d..2a85bcf 100644 --- a/internal/service/welfare_activity/activity.go +++ b/internal/service/welfare_activity/activity.go @@ -164,15 +164,27 @@ func (s *service) GetActivity(ctx context.Context, id int64, userID int64) (*Act if userID <= 0 && item.Status == StatusActive && time.Now().Before(item.StartTime) { return nil, errors.New("活动未开始") } + return s.buildActivityDetail(ctx, item, userID) +} + +func (s *service) GetActivityAdmin(ctx context.Context, id int64) (*ActivityDetail, error) { + var item Activity + if err := s.repo.GetDbR().WithContext(ctx).Where("id = ? AND deleted_at IS NULL", id).First(&item).Error; err != nil { + return nil, err + } + return s.buildActivityDetail(ctx, item, 0) +} + +func (s *service) buildActivityDetail(ctx context.Context, item Activity, userID int64) (*ActivityDetail, error) { detail := &ActivityDetail{Activity: item} - s.repo.GetDbR().WithContext(ctx).Where("activity_id = ?", id).Order("sort ASC, id ASC").Find(&detail.Prizes) + s.repo.GetDbR().WithContext(ctx).Where("activity_id = ?", item.ID).Order("sort ASC, id ASC").Find(&detail.Prizes) s.fillPrizeMeta(ctx, detail.Prizes) - participants, _ := s.ListParticipants(ctx, id, 1, 20) + participants, _ := s.ListParticipants(ctx, item.ID, 1, 20) if participants != nil { detail.ParticipantCount = participants.Total detail.Participants = participants.List } - winners, _ := s.ListWinners(ctx, id, 1, 20) + winners, _ := s.ListWinners(ctx, item.ID, 1, 20) if winners != nil { detail.Winners = winners.List } @@ -181,7 +193,7 @@ func (s *service) GetActivity(ctx context.Context, id int64, userID int64) (*Act detail.CurrentPaid, _ = s.sumPaidAmount(ctx, userID, start, end) detail.CanJoin = isJoinWindowOpen(item, time.Now()) && detail.CurrentPaid >= item.ThresholdAmount var count int64 - s.repo.GetDbR().WithContext(ctx).Model(&Participant{}).Where("activity_id = ? AND user_id = ? AND period_key = ?", id, userID, period).Count(&count) + s.repo.GetDbR().WithContext(ctx).Model(&Participant{}).Where("activity_id = ? AND user_id = ? AND period_key = ?", item.ID, userID, period).Count(&count) detail.Joined = count > 0 } return detail, nil diff --git a/internal/service/welfare_activity/welfare_activity.go b/internal/service/welfare_activity/welfare_activity.go index 30863fc..97070ec 100644 --- a/internal/service/welfare_activity/welfare_activity.go +++ b/internal/service/welfare_activity/welfare_activity.go @@ -24,6 +24,7 @@ type Service interface { CopyActivity(ctx context.Context, id int64, req SaveActivityRequest) (int64, error) ListActivities(ctx context.Context, req ListActivitiesRequest) (*ListActivitiesResponse, error) GetActivity(ctx context.Context, id int64, userID int64) (*ActivityDetail, error) + GetActivityAdmin(ctx context.Context, id int64) (*ActivityDetail, error) DeleteActivity(ctx context.Context, id int64) error SavePrizes(ctx context.Context, activityID int64, prizes []PrizeInput) error ListParticipants(ctx context.Context, activityID int64, page int, pageSize int) (*ParticipantResponse, error)