riseup-squad21/services/medicosApi.ts
2025-10-23 01:39:29 -03:00

87 lines
2.4 KiB
TypeScript

// Caminho: services/medicosApi.ts (Corrigido)
import api from './api';
export interface Doctor {
id: string;
full_name: string;
crm: string;
crm_uf: string;
specialty: string;
active?: boolean;
location?: string;
phone?: string;
}
export interface CreateDoctorData {
email: string;
full_name: string;
cpf: string;
crm: string;
crm_uf: string;
specialty?: string;
phone_mobile?: string;
}
interface ListParams {
active?: boolean;
specialty?: string;
}
export const medicosApi = {
/**
* Lista médicos com filtros opcionais.
* @param params - Objeto com filtros como { active: true }
*/
list: async (params: ListParams = {}): Promise<Doctor[]> => {
// Prepara os parâmetros para o formato do PostgREST
const queryParams: { [key: string]: any } = {
select: '*',
};
if (params.active !== undefined) {
queryParams.active = `eq.${params.active}`; // CORREÇÃO: Usa 'eq.true' ou 'eq.false'
}
if (params.specialty) {
queryParams.specialty = `eq.${params.specialty}`;
}
const response = await api.get<Doctor[]>('/rest/v1/doctors', {
params: queryParams,
});
return response.data;
},
/**
* Cria um novo médico com validações através da Edge Function.
* @param data - Dados do médico a ser criado.
*/
createWithValidation: async (data: CreateDoctorData): Promise<any> => {
const response = await api.post('/functions/v1/create-doctor', data);
return response.data;
},
getById: async (id: string): Promise<Doctor> => {
const response = await api.get<Doctor[]>(`/rest/v1/doctors?id=eq.${id}&select=*`);
if (response.data.length === 0) {
throw new Error("Médico não encontrado");
}
return response.data[0];
},
update: async (id: string, data: Partial<Doctor>): Promise<Doctor> => {
const response = await api.patch<Doctor[]>(`/rest/v1/doctors?id=eq.${id}`, data, {
headers: { 'Prefer': 'return=representation' },
});
return response.data[0];
},
/**
* Busca uma lista de médicos de exemplo do endpoint de mock.
* Usado como fallback quando a API real não retorna dados.
*/
getMockDoctors: async (): Promise<Doctor[]> => {
const response = await api.get<Doctor[]>('https://mock.apidog.com/m1/1053378-0-default/rest/v1/doctors');
return Array.isArray(response.data) ? response.data : [response.data];
},
};