package application import ( "context" "time" "mixmaker/backend/internal/domain" ) const ( DiscordRoleScopeGlobal = "global" DiscordRoleScopeEvent = "event" DiscordRoleKindTank = "tank" DiscordRoleKindDamage = "damage" DiscordRoleKindSupport = "support" DiscordRoleKindTeam = "team" DiscordRoleKindCaptain = "captain" DiscordRoleKindRegistered = "registered" DiscordRoleKindGoing = "going" DiscordRoleKindMaybe = "maybe" DiscordRoleKindNotGoing = "not_going" DiscordRoleActionReconcile = "reconcile" DiscordRoleActionRSVP = "rsvp" DiscordRoleActionFullReconcile = "full_reconcile" DiscordRoleActionTeardown = "teardown" ) type DiscordManagedRole struct { Scope string EventID string TeamID string Kind string DiscordRoleID string RoleName string Hoist bool } type DiscordRoleSyncJob struct { ID int64 EventID string Action string Generation int64 RoleSnapshot []string Attempts int } type DiscordRoleRoster struct { Roster domain.RosterDraft PlayerDiscordIDs map[string]string } type DiscordRoleRegistration struct { Event domain.Event Registrations []domain.RSVP PlayerDiscordIDs map[string]string } type DiscordRoleStore interface { SeedDiscordRoleSyncJobs(context.Context) error ScheduleGlobalDiscordRoleSync(context.Context, int64) error ClaimDiscordRoleSyncJob(context.Context) (DiscordRoleSyncJob, error) CompleteDiscordRoleSyncJob(context.Context, int64, string) error RetryDiscordRoleSyncJob(context.Context, int64, string, time.Time) error ListDiscordManagedRoles(context.Context, string) ([]DiscordManagedRole, error) ListAllDiscordManagedRoles(context.Context) ([]DiscordManagedRole, error) UpsertDiscordManagedRole(context.Context, DiscordManagedRole) error DeleteDiscordManagedRole(context.Context, DiscordManagedRole) error ListDiscordRoleAssignments(context.Context, string) ([]string, error) UpsertDiscordRoleAssignment(context.Context, string, string) error DeleteDiscordRoleAssignment(context.Context, string, string) error SetDiscordRoleAssignments(context.Context, string, []string) error GetDiscordRoleRoster(context.Context, string) (DiscordRoleRoster, error) ListActiveDiscordRoleRosters(context.Context) ([]DiscordRoleRoster, error) GetDiscordRoleRegistration(context.Context, string) (DiscordRoleRegistration, error) ListActiveDiscordRoleRegistrations(context.Context) ([]DiscordRoleRegistration, error) }