108 lines
3.2 KiB
TypeScript
108 lines
3.2 KiB
TypeScript
/**
|
|
* Dealer API Service
|
|
* Handles API calls for dealer-related operations
|
|
*/
|
|
|
|
import apiClient from './authApi';
|
|
|
|
export interface DealerInfo {
|
|
dealerId: string;
|
|
userId?: string | null; // User ID if dealer is logged in
|
|
email: string; // domain_id from dealers table
|
|
dealerCode: string; // dlrcode from dealers table
|
|
dealerName: string; // dealership from dealers table
|
|
displayName: string; // dealer_principal_name from dealers table
|
|
phone?: string; // dp_contact_number from dealers table
|
|
department?: string;
|
|
designation?: string;
|
|
isLoggedIn: boolean; // Whether dealer's domain_id exists in users table
|
|
salesCode?: string | null;
|
|
serviceCode?: string | null;
|
|
gearCode?: string | null;
|
|
gmaCode?: string | null;
|
|
region?: string | null;
|
|
state?: string | null;
|
|
district?: string | null;
|
|
city?: string | null;
|
|
dealerPrincipalName?: string | null;
|
|
dealerPrincipalEmailId?: string | null;
|
|
}
|
|
|
|
/**
|
|
* Get all dealers (with optional search)
|
|
* @param searchTerm - Optional search term to filter dealers
|
|
* @param limit - Maximum number of records to return (default: 10)
|
|
*/
|
|
export async function getAllDealers(searchTerm?: string, limit: number = 10): Promise<DealerInfo[]> {
|
|
try {
|
|
const params: any = { limit };
|
|
if (searchTerm) {
|
|
params.q = searchTerm;
|
|
}
|
|
const res = await apiClient.get('/dealers', { params });
|
|
return res.data?.data || res.data || [];
|
|
} catch (error) {
|
|
console.error('[DealerAPI] Error fetching dealers:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get dealer by code
|
|
*/
|
|
export async function getDealerByCode(dealerCode: string): Promise<DealerInfo | null> {
|
|
try {
|
|
const res = await apiClient.get(`/dealers/code/${dealerCode}`);
|
|
return res.data?.data || res.data || null;
|
|
} catch (error) {
|
|
console.error('[DealerAPI] Error fetching dealer by code:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get dealer by email
|
|
*/
|
|
export async function getDealerByEmail(email: string): Promise<DealerInfo | null> {
|
|
try {
|
|
const res = await apiClient.get(`/dealers/email/${encodeURIComponent(email)}`);
|
|
return res.data?.data || res.data || null;
|
|
} catch (error) {
|
|
console.error('[DealerAPI] Error fetching dealer by email:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Search dealers
|
|
* @param searchTerm - Search term to filter dealers
|
|
* @param limit - Maximum number of records to return (default: 10)
|
|
*/
|
|
export async function searchDealers(searchTerm: string, limit: number = 10): Promise<DealerInfo[]> {
|
|
try {
|
|
const res = await apiClient.get('/dealers/search', {
|
|
params: { q: searchTerm, limit },
|
|
});
|
|
return res.data?.data || res.data || [];
|
|
} catch (error) {
|
|
console.error('[DealerAPI] Error searching dealers:', error);
|
|
return [];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Verify dealer is logged in to the system
|
|
* Throws error if dealer is not logged in
|
|
*/
|
|
export async function verifyDealerLogin(dealerCode: string): Promise<DealerInfo> {
|
|
try {
|
|
const res = await apiClient.get(`/dealers/verify/${dealerCode}`);
|
|
return res.data?.data || res.data;
|
|
} catch (error: any) {
|
|
const errorMessage = error.response?.data?.message || error.message || 'Dealer verification failed';
|
|
console.error('[DealerAPI] Error verifying dealer login:', errorMessage);
|
|
throw new Error(errorMessage);
|
|
}
|
|
}
|
|
|