mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-05-23 20:07:35 -05:00
* Mode Map Pool picker component initial
* Component in settings
* Lottery initial
* Fix tests
* useTrusters as perf optimization
* unionAll -> union
* Fancy picker for tournaments
* Map pools memento
* FC's initial
* Friend code when registering for tournament
* FC in flows
* SHow FC in places
* Add catch in case
* Fix disabling
* Show ELO changed
* Wiggle MapPool button if already selected
* CSS vars typing
* Rechallenging
* Team (all) leaderboard
* Preview groups
* Fix chat width changing
* Solid reported weapons
* Clearer cancel requested header
* Dynamic revalidates
* spDiff from memento
* (Partly) Revert "Remove screen banning"
This reverts commit 076cabfbfa.
* Screen indicators in looking view
* FC i18n
* noscreen = 0
* E2E test
* E2E 2
103 lines
2.3 KiB
TypeScript
103 lines
2.3 KiB
TypeScript
import { db } from "~/db/sql";
|
|
import type { Tables, UserMapModePreferences } from "~/db/tables";
|
|
import { modesShort, type MainWeaponId } from "~/modules/in-game-lists";
|
|
|
|
export async function settingsByUserId(userId: number) {
|
|
const preferences = await db
|
|
.selectFrom("User")
|
|
.select([
|
|
"User.mapModePreferences",
|
|
"User.vc",
|
|
"User.languages",
|
|
"User.qWeaponPool",
|
|
"User.noScreen",
|
|
])
|
|
.where("id", "=", userId)
|
|
.executeTakeFirstOrThrow();
|
|
|
|
return {
|
|
...preferences,
|
|
languages: preferences.languages?.split(","),
|
|
};
|
|
}
|
|
|
|
export async function updateUserMapModePreferences({
|
|
userId,
|
|
mapModePreferences,
|
|
}: {
|
|
userId: number;
|
|
mapModePreferences: UserMapModePreferences;
|
|
}) {
|
|
const modesExcluded = modesShort.filter(
|
|
(mode) => !mapModePreferences.pool.some((mp) => mp.mode === mode),
|
|
);
|
|
|
|
const currentPreferences = (
|
|
await db
|
|
.selectFrom("User")
|
|
.select("mapModePreferences")
|
|
.where("id", "=", userId)
|
|
.executeTakeFirstOrThrow()
|
|
).mapModePreferences;
|
|
|
|
for (const mode of modesExcluded) {
|
|
const previousModePreference = currentPreferences?.pool.filter(
|
|
(mp) => mp.mode === mode,
|
|
);
|
|
if (previousModePreference && previousModePreference.length > 0) {
|
|
mapModePreferences.pool.push(...previousModePreference);
|
|
}
|
|
}
|
|
|
|
return db
|
|
.updateTable("User")
|
|
.set({ mapModePreferences: JSON.stringify(mapModePreferences) })
|
|
.where("id", "=", userId)
|
|
.execute();
|
|
}
|
|
|
|
export function updateVoiceChat(args: {
|
|
userId: number;
|
|
vc: Tables["User"]["vc"];
|
|
languages: string[];
|
|
}) {
|
|
return db
|
|
.updateTable("User")
|
|
.set({
|
|
vc: args.vc,
|
|
languages: args.languages.length > 0 ? args.languages.join(",") : null,
|
|
})
|
|
.where("User.id", "=", args.userId)
|
|
.execute();
|
|
}
|
|
|
|
export function updateSendouQWeaponPool(args: {
|
|
userId: number;
|
|
weaponPool: MainWeaponId[];
|
|
}) {
|
|
return db
|
|
.updateTable("User")
|
|
.set({
|
|
qWeaponPool:
|
|
args.weaponPool.length > 0 ? JSON.stringify(args.weaponPool) : null,
|
|
})
|
|
.where("User.id", "=", args.userId)
|
|
.execute();
|
|
}
|
|
|
|
export function updateNoScreen({
|
|
noScreen,
|
|
userId,
|
|
}: {
|
|
noScreen: number;
|
|
userId: number;
|
|
}) {
|
|
return db
|
|
.updateTable("User")
|
|
.set({
|
|
noScreen,
|
|
})
|
|
.where("User.id", "=", userId)
|
|
.execute();
|
|
}
|