123 lines
4.4 KiB
TypeScript
123 lines
4.4 KiB
TypeScript
import { superTokensAdminFunctionMiddleware, superTokensFunctionMiddleware } from "@/utils/supertokens";
|
|
import { createServerFn } from "@tanstack/react-start";
|
|
import { pbAdmin } from "@/lib/pocketbase/client";
|
|
import { tournamentInputSchema } from "@/features/tournaments/types";
|
|
import { logger } from ".";
|
|
import { z } from "zod";
|
|
import { toServerResult } from "@/lib/tanstack-query/utils/to-server-result";
|
|
|
|
export const listTournaments = createServerFn()
|
|
.middleware([superTokensFunctionMiddleware])
|
|
.handler(async () =>
|
|
toServerResult(pbAdmin.listTournaments)
|
|
);
|
|
|
|
export const createTournament = createServerFn()
|
|
.validator(tournamentInputSchema)
|
|
.middleware([superTokensAdminFunctionMiddleware])
|
|
.handler(async ({ data }) =>
|
|
toServerResult(() => pbAdmin.createTournament(data))
|
|
);
|
|
|
|
export const updateTournament = createServerFn()
|
|
.validator(z.object({
|
|
id: z.string(),
|
|
updates: tournamentInputSchema.partial()
|
|
}))
|
|
.middleware([superTokensAdminFunctionMiddleware])
|
|
.handler(async ({ data }) =>
|
|
toServerResult(() => pbAdmin.updateTournament(data.id, data.updates))
|
|
);
|
|
|
|
export const getTournament = createServerFn()
|
|
.validator(z.string())
|
|
.middleware([superTokensFunctionMiddleware])
|
|
.handler(async ({ data: tournamentId, context }) => {
|
|
const isAdmin = context.roles.includes("Admin");
|
|
return toServerResult(() => pbAdmin.getTournament(tournamentId, isAdmin));
|
|
});
|
|
|
|
export const getCurrentTournament = createServerFn()
|
|
.middleware([superTokensFunctionMiddleware])
|
|
.handler(async () =>
|
|
toServerResult(() => pbAdmin.getMostRecentTournament())
|
|
);
|
|
|
|
export const enrollTeam = createServerFn()
|
|
.validator(z.object({
|
|
tournamentId: z.string(),
|
|
teamId: z.string()
|
|
}))
|
|
.middleware([superTokensFunctionMiddleware])
|
|
.handler(async ({ data: { tournamentId, teamId }, context }) =>
|
|
toServerResult(async () => {
|
|
const userId = context.userAuthId;
|
|
const isAdmin = context.roles.includes("Admin");
|
|
|
|
const team = await pbAdmin.getTeam(teamId);
|
|
if (!team) { throw new Error('Team not found'); }
|
|
|
|
const isPlayerOnTeam = team.players?.some(player => player.id === userId);
|
|
|
|
if (!isPlayerOnTeam && !isAdmin) {
|
|
throw new Error('You do not have permission to enroll this team');
|
|
}
|
|
|
|
logger.info('Enrolling team in tournament', { tournamentId, teamId, userId });
|
|
const tournament = await pbAdmin.enrollTeam(tournamentId, teamId);
|
|
return tournament;
|
|
})
|
|
);
|
|
|
|
export const unenrollTeam = createServerFn()
|
|
.validator(z.object({
|
|
tournamentId: z.string(),
|
|
teamId: z.string()
|
|
}))
|
|
.middleware([superTokensAdminFunctionMiddleware])
|
|
.handler(async ({ data: { tournamentId, teamId }, context }) =>
|
|
toServerResult(() => pbAdmin.unenrollTeam(tournamentId, teamId))
|
|
);
|
|
|
|
export const getUnenrolledTeams = createServerFn()
|
|
.validator(z.string())
|
|
.middleware([superTokensAdminFunctionMiddleware])
|
|
.handler(async ({ data: tournamentId }) =>
|
|
toServerResult(() => pbAdmin.getUnenrolledTeams(tournamentId))
|
|
);
|
|
|
|
export const getFreeAgents = createServerFn()
|
|
.validator(z.string())
|
|
.middleware([superTokensAdminFunctionMiddleware])
|
|
.handler(async ({ data: tournamentId }) =>
|
|
toServerResult(() => pbAdmin.getFreeAgents(tournamentId))
|
|
);
|
|
|
|
export const enrollFreeAgent = createServerFn()
|
|
.validator(z.object({ phone: z.string(), tournamentId: z.string() }))
|
|
.middleware([superTokensFunctionMiddleware])
|
|
.handler(async ({ context, data }) =>
|
|
toServerResult(async () => {
|
|
const userAuthId = context.userAuthId;
|
|
const player = await pbAdmin.getPlayerByAuthId(userAuthId);
|
|
if (!player) throw new Error("Player not found");
|
|
|
|
await pbAdmin.enrollFreeAgent(player.id, data.phone, data.tournamentId);
|
|
logger.info('Player enrolled as free agent', { playerId: player.id, phone: data.phone });
|
|
})
|
|
);
|
|
|
|
export const unenrollFreeAgent = createServerFn()
|
|
.validator(z.object({ tournamentId: z.string() }))
|
|
.middleware([superTokensFunctionMiddleware])
|
|
.handler(async ({ context, data }) =>
|
|
toServerResult(async () => {
|
|
const userAuthId = context.userAuthId;
|
|
const player = await pbAdmin.getPlayerByAuthId(userAuthId);
|
|
if (!player) throw new Error("Player not found");
|
|
|
|
await pbAdmin.unenrollFreeAgent(player.id, data.tournamentId);
|
|
logger.info('Player unenrolled as free agent', { playerId: player.id });
|
|
})
|
|
);
|