94 lines
2.5 KiB
TypeScript
94 lines
2.5 KiB
TypeScript
import { database } from "~/database/context";
|
|
import * as schema from "~/database/schema";
|
|
import { eq, and, asc } from "drizzle-orm";
|
|
|
|
export async function addToQueue(data: {
|
|
seasonId: string;
|
|
teamId: string;
|
|
participantId: string;
|
|
queuePosition: number;
|
|
}) {
|
|
const db = database();
|
|
const [item] = await db.insert(schema.draftQueue).values(data).returning();
|
|
return item;
|
|
}
|
|
|
|
export async function removeFromQueue(queueId: string) {
|
|
const db = database();
|
|
await db.delete(schema.draftQueue).where(eq(schema.draftQueue.id, queueId));
|
|
}
|
|
|
|
export async function getTeamQueue(teamId: string) {
|
|
const db = database();
|
|
return await db
|
|
.select()
|
|
.from(schema.draftQueue)
|
|
.where(eq(schema.draftQueue.teamId, teamId))
|
|
.orderBy(asc(schema.draftQueue.queuePosition));
|
|
}
|
|
|
|
export async function isParticipantInQueue(teamId: string, participantId: string): Promise<boolean> {
|
|
const db = database();
|
|
const existing = await db.query.draftQueue.findFirst({
|
|
where: and(
|
|
eq(schema.draftQueue.teamId, teamId),
|
|
eq(schema.draftQueue.participantId, participantId)
|
|
),
|
|
});
|
|
return !!existing;
|
|
}
|
|
|
|
export async function clearTeamQueue(teamId: string) {
|
|
const db = database();
|
|
await db.delete(schema.draftQueue).where(eq(schema.draftQueue.teamId, teamId));
|
|
}
|
|
|
|
export async function reorderQueue(teamId: string, participantIds: string[]) {
|
|
// Delete existing queue
|
|
await clearTeamQueue(teamId);
|
|
|
|
// Get season ID from first queue item (or we need to pass it)
|
|
// For now, we'll need to pass seasonId
|
|
return participantIds;
|
|
}
|
|
|
|
export async function reorderQueueWithSeason(
|
|
seasonId: string,
|
|
teamId: string,
|
|
participantIds: string[]
|
|
) {
|
|
// Delete existing queue
|
|
await clearTeamQueue(teamId);
|
|
|
|
// Insert new queue in order
|
|
const items = participantIds.map((participantId, index) => ({
|
|
seasonId,
|
|
teamId,
|
|
participantId,
|
|
queuePosition: index + 1,
|
|
}));
|
|
|
|
if (items.length > 0) {
|
|
const db = database();
|
|
await db.insert(schema.draftQueue).values(items);
|
|
}
|
|
}
|
|
|
|
export async function removeParticipantFromQueue(teamId: string, participantId: string) {
|
|
const db = database();
|
|
await db
|
|
.delete(schema.draftQueue)
|
|
.where(
|
|
and(
|
|
eq(schema.draftQueue.teamId, teamId),
|
|
eq(schema.draftQueue.participantId, participantId)
|
|
)
|
|
);
|
|
}
|
|
|
|
export async function clearAllQueuesForSeason(seasonId: string) {
|
|
const db = database();
|
|
await db
|
|
.delete(schema.draftQueue)
|
|
.where(eq(schema.draftQueue.seasonId, seasonId));
|
|
}
|