import { Prisma } from "generated/prisma/client"; import { PlayerState } from "generated/prisma/enums"; import { PlayerModel } from "generated/prisma/models"; import { PartialPlayer } from "data/crud/types"; import { prisma } from "lib/prisma"; import { Context } from "types"; import { getUserInfo } from "utils"; import { create, del, get, update } from "../crud"; export const createPlayer = async (ctx: Context) => { const { playerId, userName } = await getUserInfo(ctx); return await create("player", { userName, playerId, }); }; export const createPlayers = async (data: PartialPlayer[]) => { return await create("player", data); }; export const deletePlayer = async (id: number) => { return await del("player", id); }; export const deletePlayers = async (ids: number[]) => { return await del("player", ids); }; export const getPlayer = async ( findBy: string | Context, ifNotFound?: "throw" | "create", ) => { const playerId = typeof findBy === "string" ? findBy : getUserInfo(findBy).playerId; const player = await get("player", playerId); if (ifNotFound && !player) { if (ifNotFound === "throw") { throw new Error(`Player with id ${playerId} not found`); } return await createPlayer(ifNotFound); } return player; }; export const getPlayers = async (ids: string[]) => { return await get("player", ids); }; export const updatePlayer = async (id: number, data: Partial) => { return await update, PlayerModel>("player", data, id); }; export const updatePlayers = async ( ids: number[], data: Partial, ) => { return await update, PlayerModel[]>("player", data, ids); }; export const updatePlayerState = async (id: number, newState: PlayerState) => { await prisma.$executeRaw` UPDATE "Player" SET "previousState" = "state", "state" = ${newState} WHERE "id" IS ${id}); `; }; export const updatePlayerStates = async ( ids: number[], newState: PlayerState, ) => { await prisma.$executeRaw` UPDATE "Player" SET "previousState" = "state", "state" = ${newState} WHERE "id" IN (${Prisma.join(ids)}); `; }; export const updatePlayerGame = async (id: number, currentGameId: number) => { return await update( "player", { currentGameId }, id, ); }; export const updatePlayerGames = async ( ids: number[], currentGameId: number, ) => { return await update( "player", { currentGameId }, ids, ); }; export const updatePlayerUsername = async (id: number, userName: string) => { return await update("player", { userName }, id); };