75 lines
2.4 KiB
TypeScript
75 lines
2.4 KiB
TypeScript
import type {
|
|
Player,
|
|
PlayerInfo,
|
|
PlayerInput,
|
|
PlayerUpdateInput,
|
|
PlayerStats,
|
|
} from "@/features/players/types";
|
|
import { transformPlayer, transformPlayerInfo } from "@/lib/pocketbase/util/transform-types";
|
|
import PocketBase from "pocketbase";
|
|
import { DataFetchOptions } from "./base";
|
|
|
|
export function createPlayersService(pb: PocketBase) {
|
|
return {
|
|
async getPlayerInfo(id: string): Promise<PlayerInfo> {
|
|
const result = await pb.collection("players").getOne(id, {
|
|
fields: "id,first_name,last_name"
|
|
});
|
|
return transformPlayerInfo(result);
|
|
},
|
|
|
|
async listPlayerInfos(): Promise<PlayerInfo[]> {
|
|
const result = await pb.collection("players").getFullList({
|
|
fields: "id,first_name,last_name",
|
|
});
|
|
return result.map(transformPlayerInfo);
|
|
},
|
|
async getPlayerByAuthId(authId: string): Promise<Player | null> {
|
|
const result = await pb.collection("players").getList<Player>(1, 1, {
|
|
filter: `auth_id = "${authId}"`,
|
|
expand: 'teams'
|
|
});
|
|
return result.items[0] ? transformPlayer(result.items[0]) : null;
|
|
},
|
|
|
|
async getPlayer(id: string): Promise<Player> {
|
|
const result = await pb.collection("players").getOne(id, {
|
|
expand: "teams",
|
|
});
|
|
return transformPlayer(result);
|
|
},
|
|
|
|
async listPlayers(): Promise<Player[]> {
|
|
const result = await pb.collection("players").getFullList<Player>({
|
|
fields: "id,first_name,last_name",
|
|
});
|
|
return result.map(transformPlayer);
|
|
},
|
|
|
|
async createPlayer(data: PlayerInput): Promise<Player> {
|
|
const result = await pb.collection("players").create<Player>(data);
|
|
return transformPlayer(result);
|
|
},
|
|
|
|
async updatePlayer(id: string, data: PlayerUpdateInput): Promise<Player> {
|
|
const result = await pb.collection("players").update<Player>(id, data);
|
|
return transformPlayer(result);
|
|
},
|
|
|
|
async getUnassociatedPlayers(): Promise<Player[]> {
|
|
const result = await pb.collection("players").getFullList<Player>({
|
|
filter: 'auth_id = ""',
|
|
fields: "id,first_name,last_name",
|
|
});
|
|
return result.map(transformPlayer);
|
|
},
|
|
|
|
async getPlayerStats(playerId: string): Promise<PlayerStats[]> {
|
|
const result = await pb.collection("player_stats").getFullList<PlayerStats>({
|
|
filter: `player_id = "${playerId}"`,
|
|
});
|
|
return result;
|
|
},
|
|
};
|
|
}
|