/* * File: signupAPI.ts * Description: Signup API service with validation and hospital endpoints * Design & Developed by Tech4Biz Solutions * Copyright (c) Spurrin Innovations. All rights reserved. */ import { create } from 'apisauce'; import { SignUpData, EmailValidationApiResponse, UsernameValidationApiResponse, HospitalListApiResponse, SignUpApiResponse } from '../types/signup'; // ============================================================================ // API CONFIGURATION // ============================================================================ /** * API Base Configuration * * Purpose: Configure the base API client for signup operations * * Features: * - Base URL configuration * - Request/response interceptors * - Error handling * - Timeout settings */ const API_BASE_URL = 'https://api.neoscan-physician.com/v1'; // TODO: Replace with actual API URL const api = create({ baseURL: API_BASE_URL, headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', }, timeout: 30000, // 30 seconds }); // ============================================================================ // REQUEST INTERCEPTORS // ============================================================================ /** * Request Interceptor * * Purpose: Add authentication headers and logging */ api.addRequestTransform((request) => { // Add any common headers here console.log('API Request:', { method: request.method, url: request.url, data: request.data, }); }); // ============================================================================ // RESPONSE INTERCEPTORS // ============================================================================ /** * Response Interceptor * * Purpose: Handle common response patterns and errors */ api.addResponseTransform((response) => { console.log('API Response:', { status: response.status, url: response.config?.url, data: response.data, }); // Handle common error patterns if (response.status === 401) { // Handle unauthorized access console.error('Unauthorized access'); } if (response.status === 500) { // Handle server errors console.error('Server error occurred'); } }); // ============================================================================ // EMAIL VALIDATION API // ============================================================================ /** * Validate Email * * Purpose: Check if email is available for registration * * @param email - Email address to validate * @returns Promise with validation result */ export const validatemail = async (email: string): Promise => { try { const response = await api.post('/auth/validate-email', { email, }); if (response.ok && response.data) { return response.data; } else { throw new Error(response.problem || 'Failed to validate email'); } } catch (error) { console.error('Email validation error:', error); throw error; } }; // ============================================================================ // USERNAME VALIDATION API // ============================================================================ /** * Validate Username * * Purpose: Check if username is available for registration * * @param username - Username to validate * @returns Promise with validation result */ export const validateusername = async (username: string): Promise => { try { const response = await api.post('/auth/validate-username', { username, }); if (response.ok && response.data) { return response.data; } else { throw new Error(response.problem || 'Failed to validate username'); } } catch (error) { console.error('Username validation error:', error); throw error; } }; // ============================================================================ // HOSPITAL API // ============================================================================ /** * Get Hospitals List * * Purpose: Fetch list of available hospitals * * @param params - Query parameters for filtering * @returns Promise with hospital list */ export const gethospitals = async (params?: { page?: number; limit?: number; search?: string; type?: string; city?: string; state?: string; }): Promise => { try { const response = await api.get('/hospitals', params); if (response.ok && response.data) { return response.data; } else { throw new Error(response.problem || 'Failed to fetch hospitals'); } } catch (error) { console.error('Get hospitals error:', error); throw error; } }; /** * Get Hospital by ID * * Purpose: Fetch specific hospital details * * @param hospitalId - Hospital ID * @returns Promise with hospital details */ export const getHospitalById = async (hospitalId: string) => { try { const response = await api.get(`/hospitals/${hospitalId}`); if (response.ok && response.data) { return response.data; } else { throw new Error(response.problem || 'Failed to fetch hospital details'); } } catch (error) { console.error('Get hospital by ID error:', error); throw error; } }; // ============================================================================ // SIGNUP API // ============================================================================ /** * Complete Signup * * Purpose: Submit complete signup data * * @param formData - FormData with signup information * @returns Promise with signup result */ export const signup = async (formData: FormData): Promise => { try { const response = await api.post('/auth/signup', formData, { headers: { 'Content-Type': 'multipart/form-data', }, }); console.log('actual response ',response) if (response.ok && response.data) { return response.data; } else { throw new Error(response.problem || 'Failed to complete signup'); } } catch (error) { console.error('Complete signup error:', error); throw error; } }; // ============================================================================ // MOCK API FUNCTIONS (FOR DEVELOPMENT) // ============================================================================ /** * Mock Validate Email * * Purpose: Mock email validation for development * * @param email - Email address to validate * @returns Promise with mock validation result */ export const mockValidatemail = async (email: string): Promise => { // Simulate API delay await new Promise(resolve => setTimeout(resolve, 1000)); // Mock validation logic const isAvailable = email !== 'existing@hospital.com'; return { success: true, isAvailable, message: isAvailable ? 'Email is available' : 'Email is already registered', suggestions: isAvailable ? undefined : ['Try a different email address'], }; }; /** * Mock Validate Username * * Purpose: Mock username validation for development * * @param username - Username to validate * @returns Promise with mock validation result */ export const mockValidateusername = async (username: string): Promise => { // Simulate API delay await new Promise(resolve => setTimeout(resolve, 800)); // Mock validation logic const isAvailable = username !== 'existinguser'; return { success: true, isAvailable, message: isAvailable ? 'Username is available' : 'Username is already taken', suggestions: isAvailable ? undefined : ['Try adding numbers or special characters'], }; }; /** * Mock Get Hospitals * * Purpose: Mock hospital list for development * * @returns Promise with mock hospital list */ export const mockGethospitals = async (): Promise => { // Simulate API delay await new Promise(resolve => setTimeout(resolve, 1500)); // Mock hospital data const mockHospitals = [ { id: '1', name: 'General Hospital', address: '123 Main Street', city: 'New York', state: 'NY', country: 'USA', phoneNumber: '+1-555-0123', email: 'info@generalhospital.com', website: 'https://generalhospital.com', type: 'GENERAL' as const, specialties: ['Emergency Medicine', 'Cardiology', 'Neurology'], isActive: true, }, { id: '2', name: 'University Medical Center', address: '456 University Ave', city: 'Boston', state: 'MA', country: 'USA', phoneNumber: '+1-555-0456', email: 'info@umc.edu', website: 'https://umc.edu', type: 'UNIVERSITY' as const, specialties: ['Emergency Medicine', 'Trauma', 'Research'], isActive: true, }, { id: '3', name: 'Specialty Medical Center', address: '789 Specialty Blvd', city: 'Los Angeles', state: 'CA', country: 'USA', phoneNumber: '+1-555-0789', email: 'info@specialtycenter.com', website: 'https://specialtycenter.com', type: 'SPECIALTY' as const, specialties: ['Cardiology', 'Neurology', 'Oncology'], isActive: true, }, ]; return { success: true, data: mockHospitals, total: mockHospitals.length, page: 1, limit: 10, }; }; /** * Mock Complete Signup * * Purpose: Mock signup completion for development * * @param signUpData - Complete signup data * @returns Promise with mock signup result */ export const mockSignup = async (signUpData: SignUpData): Promise => { // Simulate API delay await new Promise(resolve => setTimeout(resolve, 2000)); // Mock successful signup return { success: true, message: 'Account created successfully', data: { userId: 'user_' + Date.now(), email: signUpData.email, token: 'mock_token_' + Date.now(), }, }; }; // ============================================================================ // EXPORTS // ============================================================================ export const authAPI = { // Real API functions validatemail, validateusername, gethospitals, getHospitalById, signup, // Mock API functions (for development) mockValidatemail, mockValidateusername, mockGethospitals, mockSignup, }; /* * End of File: signupAPI.ts * Design & Developed by Tech4Biz Solutions * Copyright (c) Spurrin Innovations. All rights reserved. */