// ================================================================ // frontend/src/api/services/demo.ts // ================================================================ /** * Demo Session Service - Complete backend alignment * * Backend API structure (3-tier architecture): * - ATOMIC: demo_accounts.py, demo_sessions.py * - OPERATIONS: demo_operations.py * * Note: Demo service does NOT use tenant prefix * * Last Updated: 2025-10-05 * Status: ✅ Complete - Zero drift with backend */ import { apiClient } from '../client'; export interface DemoAccount { account_type: string; email: string; name: string; password: string; description?: string; features?: string[]; business_model?: string; } export interface DemoSession { session_id: string; virtual_tenant_id: string; base_demo_tenant_id: string; demo_account_type: string; status: 'active' | 'expired' | 'destroyed'; created_at: string; expires_at: string; remaining_extensions: number; } export interface CreateSessionRequest { demo_account_type: 'individual_bakery' | 'central_baker'; } export interface ExtendSessionRequest { session_id: string; } export interface DestroySessionRequest { session_id: string; } // =================================================================== // ATOMIC: Demo Accounts // Backend: services/demo_session/app/api/demo_accounts.py // =================================================================== /** * Get available demo accounts * GET /demo/accounts */ export const getDemoAccounts = async (): Promise => { return await apiClient.get('/demo/accounts'); }; // =================================================================== // ATOMIC: Demo Sessions // Backend: services/demo_session/app/api/demo_sessions.py // =================================================================== /** * Create a new demo session * POST /demo/sessions */ export const createDemoSession = async ( request: CreateSessionRequest ): Promise => { return await apiClient.post('/demo/sessions', request); }; /** * Get demo session details * GET /demo/sessions/{session_id} */ export const getDemoSession = async (sessionId: string): Promise => { return await apiClient.get(`/demo/sessions/${sessionId}`); }; // =================================================================== // OPERATIONS: Demo Session Management // Backend: services/demo_session/app/api/demo_operations.py // =================================================================== /** * Extend an existing demo session * POST /demo/sessions/{session_id}/extend */ export const extendDemoSession = async ( request: ExtendSessionRequest ): Promise => { return await apiClient.post( `/demo/sessions/${request.session_id}/extend`, {} ); }; /** * Destroy a demo session * Note: This might be a DELETE endpoint - verify backend implementation */ export const destroyDemoSession = async ( request: DestroySessionRequest ): Promise<{ message: string }> => { return await apiClient.post<{ message: string }>( `/demo/sessions/${request.session_id}/destroy`, {} ); }; /** * Get demo session statistics * GET /demo/stats */ export const getDemoStats = async (): Promise => { return await apiClient.get('/demo/stats'); }; /** * Cleanup expired demo sessions (Admin/Operations) * POST /demo/operations/cleanup */ export const cleanupExpiredSessions = async (): Promise => { return await apiClient.post('/demo/operations/cleanup', {}); };