mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-05-09 04:02:40 -05:00
* Add DB tables
* Toggle TO Tools in new calendar event page
* TO tools page initial
* Add counter pick map pool UI
* Save tie breaker map pool
* Save team name
* Layout initial
* Load users own team
* Make team name input required
* Rename team
* Divide to sections
* Submit team map pool
* New style for counter pick map pool section expand
* Fix tiebreaker map pool not saved when new event made
* Split to many forms
* According for team name
* Small UI consistency tweaks
* Add explanation to tie breaker maps
* Remove redundant prop
* Fix new calendar event todos
* Use required hidden input component in new build page
* Fix to tools page showing even when toToolsEnabled = 0
* Delete team
* Map list generation tests initial
* Add tournament map list generation tests
* First version of map list generation
* Add seeded RNG
* Rearrange files
* Generation with strats initial
* Default map pool + allow one team not to have any maps
* Implement map generation via backtracking
* Make order of stages irrelevant
* Add one more TODO
* Seed
* Fixes
* Tournament map list generator initial
* More functional maplist
* Fix any
* Persist in search params initial
* Add date to calendar seed
* Revert "Persist in search params initial"
This reverts commit f01a9e6982.
* Allow admin to start tournament
* Rate maplist instead of optimal / suboptimal
* Add fallback if map list generation errors out
* Hide TO Tools if not admin
* Submit team roster and delete members
* Teams page
* Give roster s p a c e
* Clear user combobox on sent + layout tweaks
* Gracefully handle updating after tournament has started
* Add title
* Persist map list in search params
* Add i18n
184 lines
3.6 KiB
TypeScript
184 lines
3.6 KiB
TypeScript
import type {
|
|
Ability,
|
|
MainWeaponId,
|
|
ModeShort,
|
|
StageId,
|
|
} from "~/modules/in-game-lists";
|
|
import type allTags from "../routes/calendar/tags.json";
|
|
|
|
export interface User {
|
|
id: number;
|
|
discordId: string;
|
|
discordName: string;
|
|
discordDiscriminator: string;
|
|
discordAvatar: string | null;
|
|
twitch: string | null;
|
|
twitter: string | null;
|
|
youtubeId: string | null;
|
|
bio: string | null;
|
|
country: string | null;
|
|
customUrl: string | null;
|
|
stickSens: number | null;
|
|
motionSens: number | null;
|
|
inGameName: string | null;
|
|
patronTier: number | null;
|
|
patronSince: number | null;
|
|
}
|
|
|
|
/** User table after joined with PlusTier table */
|
|
export interface UserWithPlusTier extends User {
|
|
plusTier: PlusTier["tier"] | null;
|
|
}
|
|
|
|
export interface PlusSuggestion {
|
|
id: number;
|
|
text: string;
|
|
authorId: number;
|
|
suggestedId: number;
|
|
month: number;
|
|
year: number;
|
|
tier: number;
|
|
createdAt: number;
|
|
}
|
|
|
|
export interface PlusVote {
|
|
month: number;
|
|
year: number;
|
|
tier: number;
|
|
authorId: number;
|
|
votedId: number;
|
|
score: number;
|
|
validAfter: number;
|
|
}
|
|
|
|
export interface PlusVotingResult {
|
|
votedId: number;
|
|
tier: number;
|
|
score: number;
|
|
month: number;
|
|
year: number;
|
|
wasSuggested: number;
|
|
passedVoting: number;
|
|
}
|
|
|
|
export interface PlusTier {
|
|
userId: number;
|
|
tier: number;
|
|
}
|
|
|
|
export interface Badge {
|
|
id: number;
|
|
code: string;
|
|
displayName: string;
|
|
hue?: number;
|
|
}
|
|
|
|
/** View that is union of TournamentBadgeOwner and Patreon badges */
|
|
export interface BadgeOwner {
|
|
badgeId: number;
|
|
userId: number;
|
|
}
|
|
|
|
export interface TournamentBadgeOwner {
|
|
badgeId: number;
|
|
userId: number;
|
|
}
|
|
|
|
export interface BadgeManager {
|
|
badgeId: number;
|
|
userId: number;
|
|
}
|
|
|
|
export interface CalendarEvent {
|
|
id: number;
|
|
name: string;
|
|
authorId: number;
|
|
tags: string | null;
|
|
description: string | null;
|
|
discordInviteCode: string | null;
|
|
// generated column
|
|
discordUrl: string | null;
|
|
bracketUrl: string;
|
|
participantCount: number | null;
|
|
customUrl: string | null;
|
|
/** Is tournament tools page visible */
|
|
toToolsEnabled: number;
|
|
/** In tournament tools, can teams change their maps and rosters? */
|
|
isBeforeStart: number;
|
|
}
|
|
|
|
export type CalendarEventTag = keyof typeof allTags;
|
|
|
|
export interface CalendarEventDate {
|
|
id: number;
|
|
eventId: number;
|
|
startTime: number;
|
|
}
|
|
|
|
export interface CalendarEventResultTeam {
|
|
id: number;
|
|
eventId: number;
|
|
name: string;
|
|
placement: number;
|
|
}
|
|
|
|
export interface CalendarEventResultPlayer {
|
|
teamId: number;
|
|
userId: number | null;
|
|
name: string | null;
|
|
}
|
|
|
|
export interface CalendarEventBadge {
|
|
eventId: number;
|
|
badgeId: number;
|
|
}
|
|
|
|
export interface Build {
|
|
id: number;
|
|
ownerId: number;
|
|
title: string;
|
|
description: string | null;
|
|
modes: string | null;
|
|
headGearSplId: number;
|
|
clothesGearSplId: number;
|
|
shoesGearSplId: number;
|
|
updatedAt: number;
|
|
}
|
|
|
|
export interface BuildWeapon {
|
|
buildId: number;
|
|
weaponSplId: MainWeaponId;
|
|
}
|
|
|
|
export type GearType = "HEAD" | "CLOTHES" | "SHOES";
|
|
|
|
export interface BuildAbility {
|
|
buildId: number;
|
|
gearType: "HEAD" | "CLOTHES" | "SHOES";
|
|
ability: Ability;
|
|
slotIndex: 0 | 1 | 2 | 3;
|
|
}
|
|
|
|
export interface MapPoolMap {
|
|
calendarEventId: number | null; // Part of tournament's map pool
|
|
tournamentTeamId: number | null; // Part of team's map pool
|
|
tieBreakerCalendarEventId: number | null; // Part of the tournament's tiebreaker pool
|
|
stageId: StageId;
|
|
mode: ModeShort;
|
|
}
|
|
|
|
export interface TournamentTeam {
|
|
id: number;
|
|
name: string;
|
|
createdAt: number;
|
|
seed: number | null;
|
|
calendarEventId: number;
|
|
}
|
|
|
|
export interface TournamentTeamMember {
|
|
tournamentTeamId: number;
|
|
userId: number;
|
|
isOwner: number;
|
|
createdAt: number;
|
|
}
|