87 lines
2.4 KiB
TypeScript
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];
|
|
},
|
|
}; |