import { isApiError } from "@/lib/errors" import type { PlayerService } from "@/lib/types" import { httpJson } from "./http" type Paginated = { items: T[] | null meta: { total: number offset: number limit: number } } function itemsFrom(value: Paginated | T[]): T[] { if (Array.isArray(value)) return value return value.items ?? [] } export type ServiceInput = { gameId: string title: string description: string price: number unit: string rankRange?: string availability: string[] } function serviceJson(input: ServiceInput) { return { gameId: input.gameId, title: input.title, description: input.description, price: input.price, unit: input.unit, rankRange: input.rankRange, availability: input.availability, } } export async function listServices(): Promise { const res = await httpJson("/api/v1/services", { cache: "no-store" }) if (typeof res === "object" && res !== null && "items" in res) { return itemsFrom(res as Paginated) } return res as PlayerService[] } export async function getServiceById(serviceId: string): Promise { try { return await httpJson(`/api/v1/services/${encodeURIComponent(serviceId)}`, { cache: "no-store", }) } catch (error) { if (error instanceof Error && error.message === "UNAUTHORIZED") { throw error } if (isApiError(error) && error.code === 404) { return undefined } throw error } } export async function listServicesByPlayer(playerId: string): Promise { const res = await httpJson | PlayerService[]>( `/api/v1/players/${encodeURIComponent(playerId)}/services`, { cache: "no-store", }, ) if (typeof res === "object" && res !== null && "items" in res) { return itemsFrom(res as Paginated) } return itemsFrom(res) } export async function createPlayerService(input: ServiceInput): Promise { return httpJson("/api/v1/services", { method: "POST", json: serviceJson(input), }) } export async function updatePlayerService(serviceId: string, input: ServiceInput): Promise { await httpJson(`/api/v1/services/${encodeURIComponent(serviceId)}`, { method: "PUT", json: serviceJson(input), }) } export async function deletePlayerService(serviceId: string): Promise { await httpJson(`/api/v1/services/${encodeURIComponent(serviceId)}`, { method: "DELETE", }) }