Zuncle b3fcec569a fix(activity): 限制未开始福利活动曝光与参与
未开始的福利活动不再返回给前端活动列表,并统一后端参与时间校验,避免用户在开始前查看或参与活动。
2026-05-02 23:04:43 +08:00

61 lines
2.0 KiB
Go

package welfare_activity
import (
"context"
"time"
"bindbox-game/internal/pkg/logger"
"bindbox-game/internal/repository/mysql"
usersvc "bindbox-game/internal/service/user"
)
const (
TypeDaily = "daily"
TypeWeekly = "weekly"
TypeMonthly = "monthly"
StatusActive = "active"
StatusFinished = "finished"
)
type Service interface {
CreateActivity(ctx context.Context, req SaveActivityRequest) (*Activity, error)
UpdateActivity(ctx context.Context, id int64, req SaveActivityRequest) error
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)
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)
Join(ctx context.Context, activityID int64, userID int64) error
ListWinners(ctx context.Context, activityID int64, page int, pageSize int) (*WinnerListResponse, error)
ListJoinableActivitiesForUser(ctx context.Context, userID int64) ([]JoinableActivityItem, error)
Draw(ctx context.Context, activityID int64) error
DrawDueActivities(ctx context.Context) error
GetCost(ctx context.Context, activityID int64) (*CostSummary, error)
GetCostSummary(ctx context.Context, startTime *time.Time, endTime *time.Time) (*CostSummary, error)
}
type service struct {
logger logger.CustomLogger
repo mysql.Repo
userSvc usersvc.Service
}
func New(log logger.CustomLogger, repo mysql.Repo) Service {
return &service{logger: log, repo: repo, userSvc: usersvc.New(log, repo)}
}
func isJoinWindowOpen(activity Activity, now time.Time) bool {
if activity.Status != StatusActive {
return false
}
if now.Before(activity.StartTime) {
return false
}
if now.After(activity.EndTime) || now.After(activity.DrawTime) {
return false
}
return true
}