package activity import ( "context" "time" "bindbox-game/internal/pkg/logger" "bindbox-game/internal/repository/mysql" "bindbox-game/internal/repository/mysql/dao" "bindbox-game/internal/repository/mysql/model" ) type Service interface { CreateActivity(ctx context.Context, in CreateActivityInput) (*model.Activities, error) ModifyActivity(ctx context.Context, id int64, in ModifyActivityInput) error DeleteActivity(ctx context.Context, id int64) error GetActivity(ctx context.Context, id int64) (*model.Activities, error) ListActivities(ctx context.Context, in ListActivitiesInput) (items []*model.Activities, total int64, err error) ListIssues(ctx context.Context, activityID int64, page, pageSize int) (items []*model.ActivityIssues, total int64, err error) CreateIssue(ctx context.Context, activityID int64, in CreateIssueInput) (*model.ActivityIssues, error) ModifyIssue(ctx context.Context, issueID int64, in ModifyIssueInput) error DeleteIssue(ctx context.Context, issueID int64) error CreateIssueRewards(ctx context.Context, issueID int64, rewards []CreateRewardInput) error ListIssueRewards(ctx context.Context, issueID int64) (items []*model.ActivityRewardSettings, err error) ModifyIssueReward(ctx context.Context, rewardID int64, in ModifyRewardInput) error DeleteIssueReward(ctx context.Context, rewardID int64) error ListDrawLogs(ctx context.Context, issueID int64, page, pageSize int) (items []*model.ActivityDrawLogs, total int64, err error) CommitIssueRandom(ctx context.Context, issueID int64) (*IssueRandomCommitment, error) GetIssueRandomCommit(ctx context.Context, issueID int64) (*IssueRandomCommitment, error) GetIssueRandomCommitHistory(ctx context.Context, issueID int64) ([]*IssueRandomCommitment, error) ExecuteDraw(ctx context.Context, issueID int64) (*Receipt, error) GetCategoryNames(ctx context.Context, ids []int64) (map[int64]string, error) } type IssueRandomCommitment struct { AlgoVersion string IssueID int64 ServerSeedMaster []byte ServerSeedHash []byte ItemsRoot []byte WeightsTotal int64 StateVersion int32 } type Receipt struct { AlgoVersion string RoundId int64 DrawId int64 ClientId int64 Timestamp int64 ServerSeedHash []byte ServerSubSeed []byte ClientSeed []byte Nonce uint64 Items []ReceiptItem ItemsRoot []byte WeightsTotal uint64 SelectedIndex int SelectedItemId int64 RandProof []byte Signature []byte } type ReceiptItem struct { ID int64 Name string Weight int32 QuantityBefore int64 } type service struct { logger logger.CustomLogger readDB *dao.Query writeDB *dao.Query } func New(l logger.CustomLogger, db mysql.Repo) Service { return &service{ logger: l, readDB: dao.Use(db.GetDbR()), writeDB: dao.Use(db.GetDbW()), } } type CreateActivityInput struct { Name string Banner string ActivityCategoryID int64 Status int32 PriceDraw int64 IsBoss int32 StartTime *time.Time EndTime *time.Time } type ModifyActivityInput struct { Name string Banner string ActivityCategoryID int64 Status int32 PriceDraw int64 IsBoss int32 StartTime *time.Time EndTime *time.Time } type ListActivitiesInput struct { Name string CategoryID int64 IsBoss *int32 Status *int32 Page int PageSize int } type CreateIssueInput struct { IssueNumber string Status int32 Sort int32 } type ModifyIssueInput struct { IssueNumber string Status int32 Sort int32 } type CreateRewardInput struct { ProductID int64 Name string Weight int32 Quantity int64 OriginalQty int64 Level int32 Sort int32 IsBoss int32 } type ModifyRewardInput struct { ProductID *int64 Name string Weight *int32 Quantity *int64 OriginalQty *int64 Level *int32 Sort *int32 IsBoss *int32 }