mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-07-31 08:06:51 -05:00
* Tables * Clocks * Maplist preference selector * Fix SSR * Nav icon * RankedOrScrim * Map pool * Create group * Redirect logic * Persist map pool * Advance from preparing page * Rename query * Fix merge * Fix migration order * Seed groups * Find looking groups SQL * Renders something * More UI work * Back to 30min * Likes/dislikes * Always return own group * Fix like order * 3 tc/rm/cb -> 2 * Show only 3 weapons * Pass group size * Handle both liked and liked by same group * Fix SQL * Group preference frontend work * Morphing * Styling * Don't show group controls if not manager * Give/remove manager * Leave group * Leave with confirm * Delete likes when morphing groups * Clocks consistency * Remove bad invariant * Persist settings to local storage * Fix initial value flashing * Fix never resolving loading indicator * REFRESH_GROUP * Flip animations * Tweaks * Auto refresh logic * Groups of 4 seed * Reduce throwing * Load full groups initial * Create match * Match UI initial * Score reporter initial * Push footer down on match page * Score reporter knows when set ended * Score reporting untested * Show score after report * Align better * Look again with same group functionality * More migrations * Team on match page * Show confirmer before reporting score * Report weapons * Report weapos again by admin + skill changing * Handle no tiebreaker given to MapPool * Remove unranked * Remove support for "team id skill" * no-wrap -> nowrap * Preparing page work * Use common GroupCard component * Add some metas * MemberAdder in looking page * Fix GroupCard actions * Fix SZ only map list including other modes * Add season info * Prompt login * Joining team * Manage group on preparing page * Manage group on preparing page * Seed past matches * Add to seed * No map list preference when full group + fix expiry * Fix skill matchesCount calculation * Tiers initial work * Some progress on tiers * Tiering logic * MMR in group cards * Name to challenge * Team MMR * Big team rank icons * Adjust todos * Match score report with confirm * Allow regular members to report score * Handle reporting weapons edge cases * Add tier images * Improve GroupCard spacing * Refactor looking page * Looking mobile UI * Calculate skill only for current season * Divide groups visually when reporting weapons * Fix match page weapons sorting * Add cache to user skills+tier calculation * Admin report match score * Initial leaderboard * Cached leaderboard * Weapon category lb's * Populate SkillTeamUser in SendouQ * Team leaderboard filtered down * Add TODOs * Seasons initlal * Season weapons initial * Weapons stylized * Show rest weapons as + * Hide peak if same as current * Load matches SQL initial * Season matches UI initial * Take user id in account * Add weapons * Paginated matches * Fix pages count logic * Scroll top on data change * Day headers for matches * Link from user page to user seasons page * Summarize maps + ui initial * Map stats * Player info tabs * MMR chart * Chart adjustments * Handle basing team MMR on player MMR * Set initial MMR * Add info about discord to match page * Season support to tournaments * Get tournament skills as well for the graph * WIP * New team rating logic + misc other * tiered -> tiered.server * Update season starting time * TODOs * Add rules page * Hide elements correctly when off-season * Fix crash when only one player with skill * How-to video * Fix StartRank showing when not logged in * Make user leaderboard the default * Make Skill season non-nullable * Add suggested pass to match * Add rule * identifierToUserIds helper * Fix tiers not showing
201 lines
6.3 KiB
JavaScript
201 lines
6.3 KiB
JavaScript
module.exports.up = function (db) {
|
|
db.transaction(() => {
|
|
db.prepare(`delete from "Skill"`).run();
|
|
db.prepare(`create index skill_identifier on "Skill"("identifier")`).run();
|
|
|
|
db.prepare(
|
|
/* sql */ `alter table "MapPoolMap" add "groupId" integer`
|
|
).run();
|
|
db.prepare(
|
|
`create index map_pool_map_group_id on "MapPoolMap"("groupId")`
|
|
).run();
|
|
|
|
db.prepare(
|
|
/* sql */ `alter table "Skill" add "groupMatchId" integer`
|
|
).run();
|
|
db.prepare(
|
|
`create index skill_group_match_id on "Skill"("groupMatchId")`
|
|
).run();
|
|
db.prepare(
|
|
/* sql */ `alter table "Skill" add "season" integer not null`
|
|
).run();
|
|
|
|
db.prepare(/*sql*/ `drop table "MapResult"`).run();
|
|
db.prepare(/*sql*/ `drop table "PlayerResult"`).run();
|
|
|
|
db.prepare(
|
|
/*sql*/ `
|
|
create table "MapResult" (
|
|
"mode" text not null,
|
|
"stageId" integer not null,
|
|
"userId" integer not null,
|
|
"wins" integer not null,
|
|
"losses" integer not null,
|
|
"season" integer not null,
|
|
foreign key ("userId") references "User"("id") on delete cascade,
|
|
unique("userId", "stageId", "mode", "season") on conflict rollback
|
|
) strict
|
|
`
|
|
).run();
|
|
|
|
db.prepare(
|
|
`create index map_result_user_id on "MapResult"("userId")`
|
|
).run();
|
|
|
|
db.prepare(
|
|
/*sql*/ `
|
|
create table "PlayerResult" (
|
|
"ownerUserId" integer not null,
|
|
"otherUserId" integer not null,
|
|
"mapWins" integer not null,
|
|
"mapLosses" integer not null,
|
|
"setWins" integer not null,
|
|
"setLosses" integer not null,
|
|
"type" text not null,
|
|
"season" integer not null,
|
|
foreign key ("ownerUserId") references "User"("id") on delete cascade,
|
|
foreign key ("otherUserId") references "User"("id") on delete cascade,
|
|
unique("ownerUserId", "otherUserId", "type", "season") on conflict rollback
|
|
) strict
|
|
`
|
|
).run();
|
|
|
|
db.prepare(
|
|
`create index player_result_owner_user_id on "PlayerResult"("ownerUserId")`
|
|
).run();
|
|
db.prepare(
|
|
`create index player_result_other_user_id on "PlayerResult"("otherUserId")`
|
|
).run();
|
|
|
|
db.prepare(
|
|
/*sql*/ `
|
|
create table "Group" (
|
|
"id" integer primary key,
|
|
"teamId" integer,
|
|
"createdAt" integer default (strftime('%s', 'now')) not null,
|
|
"latestActionAt" integer default (strftime('%s', 'now')) not null,
|
|
"mapListPreference" text not null,
|
|
"inviteCode" text not null,
|
|
"status" text not null,
|
|
foreign key ("teamId") references "AllTeam"("id") on delete restrict
|
|
) strict
|
|
`
|
|
).run();
|
|
|
|
db.prepare(`create index group_team_id on "Group"("teamId")`).run();
|
|
|
|
db.prepare(
|
|
/*sql*/ `
|
|
create table "GroupMember" (
|
|
"groupId" integer not null,
|
|
"userId" integer not null,
|
|
"role" text not null,
|
|
"createdAt" integer default (strftime('%s', 'now')) not null,
|
|
foreign key ("userId") references "User"("id") on delete restrict,
|
|
foreign key ("groupId") references "Group"("id") on delete cascade,
|
|
unique("userId", "groupId") on conflict rollback
|
|
) strict
|
|
`
|
|
).run();
|
|
|
|
db.prepare(
|
|
`create index group_member_group_id on "GroupMember"("groupId")`
|
|
).run();
|
|
db.prepare(
|
|
`create index group_member_user_id on "GroupMember"("userId")`
|
|
).run();
|
|
|
|
db.prepare(
|
|
/*sql*/ `
|
|
create table "GroupLike" (
|
|
"likerGroupId" integer not null,
|
|
"targetGroupId" integer not null,
|
|
"createdAt" integer default (strftime('%s', 'now')) not null,
|
|
foreign key ("likerGroupId") references "Group"("id") on delete cascade,
|
|
foreign key ("targetGroupId") references "Group"("id") on delete cascade,
|
|
unique("likerGroupId", "targetGroupId") on conflict rollback
|
|
) strict
|
|
`
|
|
).run();
|
|
|
|
db.prepare(
|
|
`create index group_like_liker_group_id on "GroupLike"("likerGroupId")`
|
|
).run();
|
|
db.prepare(
|
|
`create index group_like_target_group_id on "GroupLike"("targetGroupId")`
|
|
).run();
|
|
|
|
db.prepare(
|
|
/*sql*/ `
|
|
create table "GroupMatch" (
|
|
"id" integer primary key,
|
|
"alphaGroupId" integer not null,
|
|
"bravoGroupId" integer not null,
|
|
"createdAt" integer default (strftime('%s', 'now')) not null,
|
|
"reportedAt" integer,
|
|
"reportedByUserId" integer,
|
|
foreign key ("alphaGroupId") references "Group"("id") on delete restrict,
|
|
foreign key ("bravoGroupId") references "Group"("id") on delete restrict,
|
|
foreign key ("reportedByUserId") references "User"("id") on delete restrict,
|
|
unique("alphaGroupId") on conflict rollback,
|
|
unique("bravoGroupId") on conflict rollback
|
|
) strict
|
|
`
|
|
).run();
|
|
|
|
db.prepare(
|
|
`create index group_match_alpha_group_id on "GroupMatch"("alphaGroupId")`
|
|
).run();
|
|
db.prepare(
|
|
`create index group_match_bravo_group_id on "GroupMatch"("bravoGroupId")`
|
|
).run();
|
|
db.prepare(
|
|
`create index group_match_reported_by_user_id on "GroupMatch"("reportedByUserId")`
|
|
).run();
|
|
|
|
db.prepare(
|
|
/*sql*/ `
|
|
create table "GroupMatchMap" (
|
|
"id" integer primary key,
|
|
"matchId" integer not null,
|
|
"index" integer not null,
|
|
"mode" text not null,
|
|
"stageId" integer not null,
|
|
"source" text not null,
|
|
"winnerGroupId" integer,
|
|
foreign key ("matchId") references "GroupMatch"("id") on delete cascade,
|
|
foreign key ("winnerGroupId") references "Group"("id") on delete restrict,
|
|
unique("matchId", "index") on conflict rollback
|
|
) strict
|
|
`
|
|
).run();
|
|
|
|
db.prepare(
|
|
`create index group_match_map_match_id on "GroupMatchMap"("matchId")`
|
|
).run();
|
|
db.prepare(
|
|
`create index group_match_map_winner_group_id on "GroupMatchMap"("winnerGroupId")`
|
|
).run();
|
|
|
|
db.prepare(
|
|
/*sql*/ `
|
|
create table "ReportedWeapon" (
|
|
"groupMatchMapId" integer,
|
|
"weaponSplId" integer not null,
|
|
"userId" integer not null,
|
|
foreign key ("groupMatchMapId") references "GroupMatchMap"("id") on delete restrict,
|
|
foreign key ("userId") references "User"("id") on delete restrict,
|
|
unique("groupMatchMapId", "userId") on conflict rollback
|
|
) strict
|
|
`
|
|
).run();
|
|
|
|
db.prepare(
|
|
`create index reported_weapon_group_match_map_id on "ReportedWeapon"("groupMatchMapId")`
|
|
).run();
|
|
db.prepare(
|
|
`create index reported_weapon_user_id on "ReportedWeapon"("userId")`
|
|
).run();
|
|
})();
|
|
};
|