/** * Serviço de Médicos (Frontend) */ import { apiClient } from "../api/client"; import type { Doctor, CreateDoctorInput, UpdateDoctorInput, DoctorFilters, } from "./types"; class DoctorService { /** * Lista todos os médicos */ async list(filters?: DoctorFilters): Promise { try { const params = new URLSearchParams(); if (filters?.crm) { params.append("crm", `eq.${filters.crm}`); } if (filters?.crm_uf) { params.append("crm_uf", `eq.${filters.crm_uf}`); } if (filters?.specialty) { params.append("specialty", `ilike.*${filters.specialty}*`); } if (filters?.active !== undefined) { params.append("active", `eq.${filters.active}`); } if (filters?.full_name) { params.append("full_name", `ilike.*${filters.full_name}*`); } const queryString = params.toString(); const url = queryString ? `/doctors?${queryString}` : "/doctors"; const response = await apiClient.get(url); return response.data; } catch (error: any) { // Silenciar erro 401 (não autenticado) - é esperado em páginas públicas if (error?.response?.status !== 401) { console.error("Erro ao listar médicos:", error); } throw error; } } /** * Busca médico por ID */ async getById(id: string): Promise { try { const response = await apiClient.get(`/doctors?id=eq.${id}`); if (response.data && response.data.length > 0) { return response.data[0]; } throw new Error("Médico não encontrado"); } catch (error) { console.error("Erro ao buscar médico:", error); throw error; } } /** * Cria novo médico */ async create(data: CreateDoctorInput): Promise { try { const response = await apiClient.post("/doctors", data); return response.data; } catch (error) { console.error("Erro ao criar médico:", error); throw error; } } /** * Atualiza médico existente */ async update(id: string, data: UpdateDoctorInput): Promise { try { const response = await apiClient.patch( `/doctors?id=eq.${id}`, data ); if (response.data && response.data.length > 0) { return response.data[0]; } throw new Error("Médico não encontrado"); } catch (error) { console.error("Erro ao atualizar médico:", error); throw error; } } /** * Deleta médico */ async delete(id: string): Promise { try { await apiClient.delete(`/doctors?id=eq.${id}`); } catch (error) { console.error("Erro ao deletar médico:", error); throw error; } } } export const doctorService = new DoctorService();