upcoming tournament page, minor changes

This commit is contained in:
yohlo
2025-09-09 23:20:19 -05:00
parent c5d69f1a19
commit c74da09bde
29 changed files with 1125 additions and 46 deletions

View File

@@ -1,15 +1,15 @@
import { logger } from "@/lib/logger";
import PocketBase from "pocketbase";
import { transformTeam, transformTeamInfo } from "@/lib/pocketbase/util/transform-types";
import { Team, TeamInfo } from "@/features/teams/types";
import { DataFetchOptions } from "./base";
import { Team, TeamInfo, TeamInput, TeamUpdateInput } from "@/features/teams/types";
export function createTeamsService(pb: PocketBase) {
return {
async getTeamInfo(id: string): Promise<TeamInfo> {
logger.info("PocketBase | Getting team info", id);
const result = await pb.collection("teams").getOne(id, {
fields: "id,name,primary_color,accent_color"
fields: "id,name,primary_color,accent_color,logo",
expand: "players"
});
return transformTeamInfo(result);
},
@@ -17,10 +17,12 @@ export function createTeamsService(pb: PocketBase) {
async listTeamInfos(): Promise<TeamInfo[]> {
logger.info("PocketBase | Listing team infos");
const result = await pb.collection("teams").getFullList({
fields: "id,name,primary_color,accent_color"
fields: "id,name,primary_color,accent_color,logo",
expand: "players"
});
return result.map(transformTeamInfo);
},
async getTeam(id: string): Promise<Team | null> {
logger.info("PocketBase | Getting team", id);
const result = await pb.collection("teams").getOne(id, {
@@ -28,5 +30,56 @@ export function createTeamsService(pb: PocketBase) {
});
return transformTeam(result);
},
async createTeam(data: TeamInput): Promise<Team> {
logger.info("PocketBase | Creating team", data);
try {
for (const playerId of data.players) {
const playerExists = await pb.collection("players").getOne(playerId).catch(() => null);
if (!playerExists) {
throw new Error(`Player with ID ${playerId} not found`);
}
}
const result = await pb.collection("teams").create({
...data,
players: data.players
});
for (const playerId of data.players) {
await pb.collection("players").update(playerId, {
"teams+": result.id
});
}
return transformTeam(await pb.collection("teams").getOne(result.id, {
expand: "players, tournaments"
}));
} catch (error) {
logger.error("PocketBase | Error creating team", error);
throw error;
}
},
async updateTeam(id: string, data: TeamUpdateInput): Promise<Team> {
logger.info("PocketBase | Updating team", { id, updates: Object.keys(data) });
try {
const existingTeam = await pb.collection("teams").getOne(id).catch(() => null);
if (!existingTeam) {
throw new Error(`Team with ID ${id} not found`);
}
const result = await pb.collection("teams").update(id, data);
return transformTeam(await pb.collection("teams").getOne(result.id, {
expand: "players, tournaments"
}));
} catch (error) {
logger.error("PocketBase | Error updating team", error);
throw error;
}
},
};
}