From 94a197920177e6d04c84bb89803c1786cd1b810b Mon Sep 17 00:00:00 2001 From: Guillermo Pages Date: Thu, 13 Nov 2025 15:36:59 +0100 Subject: [PATCH] fix: update facility detail types to match current API response shape The API now returns 'facility' with expanded address/settings fields instead of 'club', and slot types have been restructured to use flat properties instead of nested booking/meta objects. --- .../admin/clubs/[club_id]/AdminClubDetail.tsx | 4 +- .../admin/clubs/[club_id]/ClubDetailTabs.tsx | 4 +- src/lib/api/admin-clubs.ts | 17 ++++++- src/lib/api/courts.ts | 6 +-- src/types/admin-api.ts | 50 +++++++++---------- 5 files changed, 48 insertions(+), 33 deletions(-) diff --git a/src/app/[locale]/admin/clubs/[club_id]/AdminClubDetail.tsx b/src/app/[locale]/admin/clubs/[club_id]/AdminClubDetail.tsx index b30f990..7ec40e4 100644 --- a/src/app/[locale]/admin/clubs/[club_id]/AdminClubDetail.tsx +++ b/src/app/[locale]/admin/clubs/[club_id]/AdminClubDetail.tsx @@ -160,11 +160,11 @@ export default function AdminClubDetailComponent({ clubId }: AdminClubDetailProp

- {clubDetail.club.name} + {clubDetail.facility.name}

- {clubDetail.club.timezone} + {clubDetail.facility.timezone}
diff --git a/src/app/[locale]/admin/clubs/[club_id]/ClubDetailTabs.tsx b/src/app/[locale]/admin/clubs/[club_id]/ClubDetailTabs.tsx index f72f65f..7fff486 100644 --- a/src/app/[locale]/admin/clubs/[club_id]/ClubDetailTabs.tsx +++ b/src/app/[locale]/admin/clubs/[club_id]/ClubDetailTabs.tsx @@ -160,10 +160,10 @@ export default function ClubDetailTabs({ clubId }: ClubDetailTabsProps) { {/* Club Header */}

- {clubDetail.club.name} + {clubDetail.facility.name}

- {clubDetail.club.timezone} + {clubDetail.facility.timezone}

diff --git a/src/lib/api/admin-clubs.ts b/src/lib/api/admin-clubs.ts index 03365ad..1c9ffcb 100644 --- a/src/lib/api/admin-clubs.ts +++ b/src/lib/api/admin-clubs.ts @@ -185,10 +185,25 @@ export const MOCK_CLUBS: AdminClubsResponse = [ ]; export const MOCK_CLUB_DETAIL: AdminClubDetail = { - club: { + facility: { facility_id: 1, name: 'Central Padel Geneva', timezone: 'Europe/Zurich', + address: { + address_line_1: '123 Main Street', + address_line_2: null, + city: 'Geneva', + zip: '1200', + canton: 'GE', + country: 'Switzerland', + }, + settings: { + contact: { + email: 'info@centralpadel.ch', + phone: '+41 22 123 45 67', + website: 'https://centralpadel.ch', + }, + }, }, courts: [ { diff --git a/src/lib/api/courts.ts b/src/lib/api/courts.ts index 32c49d4..4a84a1c 100644 --- a/src/lib/api/courts.ts +++ b/src/lib/api/courts.ts @@ -37,9 +37,9 @@ export async function getClubProfile(clubId: number): Promise; // Slot generation rules (JSONB) + created_at: string; // ISO 8601 timestamp + updated_at: string; // ISO 8601 timestamp } export interface AdminSlot { - slot_id: number; // slot_instance_id + slot_instance_id: number; court_id: number; court_name: string; - facility_id: number; starts_at: string; // ISO 8601 timestamp ends_at: string; // ISO 8601 timestamp - booking: AdminSlotBooking; - meta: AdminSlotMeta; - updated_at: string; // ISO 8601 timestamp - etag: string; -} - -export interface AdminSlotBooking { - available: boolean; // Mapped from status - status: 'available' | 'pending' | 'booked' | 'cancelled'; capacity: number; booked_count: number; - players: AdminPlayer[]; -} - -export interface AdminPlayer { - display_name: string; - app_user_id?: number; // Optional for guests - position: number; - is_guest: boolean; -} - -export interface AdminSlotMeta { - tags?: string[]; // Optional annotations like ["maintenance"] - provider: 'local' | 'fairplay'; + status: string; // e.g., "cancelled", "available", "booked" + display_status: string; // e.g., "cancelled" + reason?: string | null; // e.g., "materialiser_retired" + source: string; // e.g., "internal" } export interface AdminProviderInfo {