upcoming tournament page, minor changes
This commit is contained in:
@@ -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;
|
||||
}
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user