From 3f3c084910ff6313df7ad288388d98900a2aaf64 Mon Sep 17 00:00:00 2001 From: Kalle <38327916+Sendouc@users.noreply.github.com> Date: Sat, 2 May 2026 14:24:21 +0300 Subject: [PATCH] Migrate addInitialSkill to Kysely --- app/features/mmr/SkillRepository.server.ts | 33 +++++++++++++++++- .../sendouq/queries/addInitialSkill.server.ts | 34 ------------------- scripts/season-initial-powers.ts | 16 +++------ 3 files changed, 37 insertions(+), 46 deletions(-) delete mode 100644 app/features/sendouq/queries/addInitialSkill.server.ts diff --git a/app/features/mmr/SkillRepository.server.ts b/app/features/mmr/SkillRepository.server.ts index e4b746961..0ccc28bec 100644 --- a/app/features/mmr/SkillRepository.server.ts +++ b/app/features/mmr/SkillRepository.server.ts @@ -1,7 +1,38 @@ -import { sql } from "kysely"; +import { sql, type Transaction } from "kysely"; +import { ordinal } from "openskill"; import { db } from "~/db/sql"; +import type { DB } from "~/db/tables"; import { MATCHES_COUNT_NEEDED_FOR_LEADERBOARD } from "../leaderboards/leaderboards-constants"; +export async function addInitialSkill( + { + mu, + sigma, + season, + userId, + }: { + mu: number; + sigma: number; + season: number; + userId: number; + }, + trx?: Transaction, +) { + const executor = trx ?? db; + + await executor + .insertInto("Skill") + .values({ + mu, + sigma, + season, + ordinal: ordinal({ mu, sigma }), + userId, + matchesCount: 0, + }) + .execute(); +} + export async function seasonProgressionByUserId({ userId, season, diff --git a/app/features/sendouq/queries/addInitialSkill.server.ts b/app/features/sendouq/queries/addInitialSkill.server.ts deleted file mode 100644 index df40a1e66..000000000 --- a/app/features/sendouq/queries/addInitialSkill.server.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { ordinal } from "openskill"; -import { sql } from "~/db/sql"; - -const stm = sql.prepare(/* sql */ ` - insert into "Skill" ("mu", "season", "sigma", "ordinal", "userId", "matchesCount") - values ( - @mu, - @season, - @sigma, - @ordinal, - @userId, - 0 - ) -`); - -export function addInitialSkill({ - mu, - sigma, - season, - userId, -}: { - mu: number; - sigma: number; - season: number; - userId: number; -}) { - stm.run({ - mu, - sigma, - season, - ordinal: ordinal({ mu, sigma }), - userId, - }); -} diff --git a/scripts/season-initial-powers.ts b/scripts/season-initial-powers.ts index e1851a4f7..41a1bf781 100644 --- a/scripts/season-initial-powers.ts +++ b/scripts/season-initial-powers.ts @@ -3,8 +3,8 @@ import { ordinal } from "openskill"; import { db, sql } from "~/db/sql"; import type { Tables } from "~/db/tables"; import { TIERS, type TierName } from "~/features/mmr/mmr-constants"; +import * as SkillRepository from "~/features/mmr/SkillRepository.server"; import { freshUserSkills } from "~/features/mmr/tiered.server"; -import { addInitialSkill } from "~/features/sendouq/queries/addInitialSkill.server"; import invariant from "~/utils/invariant"; import { logger } from "~/utils/logger"; @@ -174,18 +174,12 @@ const newSkills = allSkills.map((s) => { }; }); -const allGroupsInactiveStm = sql.prepare(/* sql */ ` - update - "Group" - set - "status" = 'INACTIVE' -`); -sql.transaction(() => { +await db.transaction().execute(async (trx) => { for (const skill of newSkills) { - addInitialSkill(skill); + await SkillRepository.addInitialSkill(skill, trx); } - allGroupsInactiveStm.run(); -})(); + await trx.updateTable("Group").set({ status: "INACTIVE" }).execute(); +}); logger.info( `Done adding new skills for season ${nth} (${newSkills.length} added)`,