fix
This commit is contained in:
@@ -68,6 +68,52 @@ export interface SaveFieldValuesResponse {
|
||||
data: unknown[];
|
||||
}
|
||||
|
||||
// Search parameters for public agent search
|
||||
export interface SearchAgentsParams {
|
||||
search?: string;
|
||||
city?: string;
|
||||
state?: string;
|
||||
country?: string;
|
||||
agentTypeId?: string;
|
||||
isVerified?: boolean;
|
||||
page?: number;
|
||||
limit?: number;
|
||||
sortBy?: 'createdAt' | 'averageRating' | 'totalReviews' | 'firstName';
|
||||
sortOrder?: 'asc' | 'desc';
|
||||
}
|
||||
|
||||
// Public agent listing response
|
||||
export interface PublicAgentProfile {
|
||||
id: string;
|
||||
firstName: string;
|
||||
lastName: string;
|
||||
slug: string;
|
||||
email: string | null;
|
||||
phone: string | null;
|
||||
bio: string | null;
|
||||
avatar: string | null;
|
||||
licenseNumber: string | null;
|
||||
experience: number | null;
|
||||
specializations: string[];
|
||||
languages: string[];
|
||||
serviceAreas: string[];
|
||||
rating: number | null;
|
||||
reviewCount: number;
|
||||
isVerified: boolean;
|
||||
isFeatured: boolean;
|
||||
agentTypeId: string | null;
|
||||
agentType: AgentType | null;
|
||||
createdAt?: string;
|
||||
}
|
||||
|
||||
export interface SearchAgentsResponse {
|
||||
data: PublicAgentProfile[];
|
||||
total: number;
|
||||
page: number;
|
||||
limit: number;
|
||||
totalPages: number;
|
||||
}
|
||||
|
||||
// Agents Service for Web
|
||||
class AgentsService {
|
||||
private basePath = '/agents';
|
||||
@@ -113,6 +159,27 @@ class AgentsService {
|
||||
const response = await api.get<ApiResponse<AgentType[]>>('/agent-types');
|
||||
return response.data.data;
|
||||
}
|
||||
|
||||
async searchAgents(params: SearchAgentsParams = {}): Promise<SearchAgentsResponse> {
|
||||
const queryParams = new URLSearchParams();
|
||||
|
||||
if (params.search) queryParams.set('search', params.search);
|
||||
if (params.city) queryParams.set('city', params.city);
|
||||
if (params.state) queryParams.set('state', params.state);
|
||||
if (params.country) queryParams.set('country', params.country);
|
||||
if (params.agentTypeId) queryParams.set('agentTypeId', params.agentTypeId);
|
||||
if (params.isVerified !== undefined) queryParams.set('isVerified', String(params.isVerified));
|
||||
if (params.page) queryParams.set('page', String(params.page));
|
||||
if (params.limit) queryParams.set('limit', String(params.limit));
|
||||
if (params.sortBy) queryParams.set('sortBy', params.sortBy);
|
||||
if (params.sortOrder) queryParams.set('sortOrder', params.sortOrder);
|
||||
|
||||
const queryString = queryParams.toString();
|
||||
const url = queryString ? `${this.basePath}?${queryString}` : this.basePath;
|
||||
|
||||
const response = await api.get<ApiResponse<SearchAgentsResponse>>(url);
|
||||
return response.data.data;
|
||||
}
|
||||
}
|
||||
|
||||
export const agentsService = new AgentsService();
|
||||
|
||||
Reference in New Issue
Block a user