53 lines
2.0 KiB
Go

package threshold_activity
import (
"context"
"time"
"bindbox-game/internal/pkg/logger"
"bindbox-game/internal/repository/mysql"
usersvc "bindbox-game/internal/service/user"
)
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)
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)
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
}