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 {