task(E6-frontend): guest panel with ribbon entry and api client

This commit is contained in:
Agent Zero
2026-08-28 07:30:43 +02:00
parent e99cf597f8
commit 5eb741d2a7
4 changed files with 204 additions and 0 deletions
+48
View File
@@ -764,3 +764,51 @@ export async function aiChat(
}
return res.json();
}
// ─── Guests (Task E6) ──────────────────────────────────
export interface Guest {
id: string;
drawing_id: string;
name: string;
email?: string | null;
category: string;
seat_element_id?: string | null;
notes?: string | null;
created_at: string;
}
export async function listGuests(token: string, drawingId: string): Promise<Guest[]> {
const res = await fetch(`${API_BASE}/api/drawings/${drawingId}/guests`, {
headers: authHeaders(token),
});
if (!res.ok) throw new Error(`Failed to list guests: ${res.status}`);
return res.json();
}
export async function createGuest(token: string, drawingId: string, data: { name: string; email?: string; category?: string; notes?: string }): Promise<Guest> {
const res = await fetch(`${API_BASE}/api/drawings/${drawingId}/guests`, {
method: 'POST',
headers: authHeaders(token),
body: JSON.stringify(data),
});
if (!res.ok) throw new Error(`Failed to create guest: ${res.status}`);
return res.json();
}
export async function updateGuest(token: string, id: string, data: Partial<{ name: string; email: string; category: string; seat_element_id: string; notes: string }>): Promise<Guest> {
const res = await fetch(`${API_BASE}/api/guests/${id}`, {
method: 'PATCH',
headers: authHeaders(token),
body: JSON.stringify(data),
});
if (!res.ok) throw new Error(`Failed to update guest: ${res.status}`);
return res.json();
}
export async function deleteGuest(token: string, id: string): Promise<void> {
const res = await fetch(`${API_BASE}/api/guests/${id}`, {
method: 'DELETE',
headers: authHeaders(token),
});
if (!res.ok) throw new Error(`Failed to delete guest: ${res.status}`);
}