// src/apiService.ts import axios from 'axios'; import type { ProyeccionBancas, MunicipioSimple, TelegramaData, CatalogoItem, CategoriaResumen, ResultadoTicker, ApiResponseResultadosPorSeccion } from './types/types'; const API_BASE_URL = 'http://localhost:5217/api'; const apiClient = axios.create({ baseURL: API_BASE_URL, headers: { 'Content-Type': 'application/json' }, }); interface PartidoData { id: string; nombre: string; nombreCorto: string | null; bancasTotales: number; color: string | null; } interface CamaraData { camaraNombre: string; totalBancas: number; bancasEnJuego: number; partidos: PartidoData[]; presidenteBancada: { color: string | null } | null; } export interface ComposicionData { diputados: CamaraData; senadores: CamaraData; } export interface OcupanteBanca { id: number; nombreOcupante: string; fotoUrl: string | null; periodo: string | null; } interface PartidoData { id: string; nombre: string; nombreCorto: string | null; bancasTotales: number; color: string | null; ocupantes: OcupanteBanca[]; } export interface BancadaDetalle { id: number; // Este es el ID de la Bancada camara: number; // 0 o 1 numeroBanca: number; agrupacionPoliticaId: string | null; ocupante: OcupanteBanca | null; } export interface ConfiguracionPublica { TickerResultadosCantidad?: string; ConcejalesResultadosCantidad?: string; // ... otras claves públicas que pueda añadir en el futuro } export interface ResultadoDetalleSeccion { id: string; // ID de la agrupación para la key nombre: string; votos: number; porcentaje: number; color: string | null; } export const getResumenProvincial = async (): Promise => { const response = await apiClient.get('/resultados/provincia/02'); return response.data; }; export const getBancasPorSeccion = async (seccionId: string): Promise => { const response = await apiClient.get(`/resultados/bancas/${seccionId}`); return response.data; }; /** * Obtiene la lista de Secciones Electorales desde la API. */ export const getSeccionesElectorales = async (categoriaId?: number): Promise => { let url = '/catalogos/secciones-electorales'; // Si se proporciona una categoría, la añadimos a la URL if (categoriaId) { url += `?categoriaId=${categoriaId}`; } const response = await apiClient.get(url); return response.data; }; /** * Obtiene los datos completos de un telegrama por su ID de mesa. */ export const getTelegramaPorId = async (mesaId: string): Promise => { const response = await apiClient.get(`/telegramas/${mesaId}`); return response.data; }; export const getSecciones = async (): Promise => { const response = await apiClient.get('/catalogos/secciones'); return response.data; }; export const getMunicipiosPorSeccion = async (seccionId: string): Promise => { const response = await apiClient.get(`/catalogos/municipios/${seccionId}`); return response.data; }; export const getCircuitosPorMunicipio = async (municipioId: string): Promise => { const response = await apiClient.get(`/catalogos/circuitos/${municipioId}`); return response.data; }; export const getEstablecimientosPorCircuito = async (circuitoId: string): Promise => { const response = await apiClient.get(`/catalogos/establecimientos/${circuitoId}`); return response.data; }; export const getMesasPorEstablecimiento = async (establecimientoId: string): Promise => { const response = await apiClient.get(`/catalogos/mesas/${establecimientoId}`); return response.data; }; export const getComposicionCongreso = async (): Promise => { const response = await apiClient.get('/resultados/composicion-congreso'); return response.data; }; export const getBancadasDetalle = async (): Promise => { const response = await apiClient.get('/resultados/bancadas-detalle'); return response.data; }; export const getConfiguracionPublica = async (): Promise => { const response = await apiClient.get('/resultados/configuracion-publica'); return response.data; }; export const getResultadosPorSeccion = async (seccionId: string, categoriaId: number): Promise => { const response = await apiClient.get(`/resultados/seccion-resultados/${seccionId}?categoriaId=${categoriaId}`); return response.data; }; export const getDetalleSeccion = async (seccionId: string, categoriaId: number): Promise => { const response = await apiClient.get(`/resultados/seccion/${seccionId}?categoriaId=${categoriaId}`); return response.data; }; export const getResultadosPorMunicipioYCategoria = async (municipioId: string, categoriaId: number): Promise => { const response = await apiClient.get(`/resultados/partido/${municipioId}?categoriaId=${categoriaId}`); return response.data.resultados; }; export const getResultadosPorMunicipio = async (municipioId: string, categoriaId: number): Promise => { const response = await apiClient.get(`/resultados/partido/${municipioId}?categoriaId=${categoriaId}`); // La respuesta es un objeto, nosotros extraemos el array de resultados return response.data.resultados; }; export const getMunicipios = async (categoriaId?: number): Promise => { let url = '/catalogos/municipios'; if (categoriaId) { url += `?categoriaId=${categoriaId}`; } const response = await apiClient.get(url); // La API ahora devuelve { seccionId, nombre }, lo mapeamos a { id, nombre } return response.data.map((m: any) => ({ id: m.seccionId, nombre: m.nombre })); };