Ejemplos de Código
Esta sección proporciona ejemplos prácticos de cómo interactuar con la API CECOM-BRYSA.
Autenticación
Login con cURL
# Iniciar sesión
curl -X POST https://api.cecom-brysa.cl/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "usuario@brysa.cl",
"password": "su-contraseña"
}'
# Respuesta:
# {
# "status": "success",
# "data": {
# "token": "eyJhbGciOiJIUzI1NiIs...",
# "user": { ... }
# }
# }
Login con JavaScript (Fetch)
async function login(email, password) {
const response = await fetch('https://api.cecom-brysa.cl/api/auth/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ email, password })
});
if (!response.ok) {
throw new Error('Error de autenticación');
}
const { data } = await response.json();
return data.token;
}
// Uso
const token = await login('usuario@brysa.cl', 'contraseña');
console.log('Token obtenido:', token);
Listar Recursos
cURL
curl https://api.cecom-brysa.cl/api/resource-panel/resources \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
JavaScript
async function listarRecursos(token) {
const response = await fetch('https://api.cecom-brysa.cl/api/resource-panel/resources', {
headers: {
'Authorization': `Bearer ${token}`
}
});
const { data } = await response.json();
return data;
}
// Uso
const recursos = await listarRecursos(token);
console.log('Recursos:', recursos);
Listar Brigadistas con Paginación
cURL
curl "https://api.cecom-brysa.cl/api/brigadista?page=1&limit=20" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
JavaScript
async function listarBrigadistas(token, page = 1, limit = 20) {
const url = new URL('https://api.cecom-brysa.cl/api/brigadista');
url.searchParams.append('page', page);
url.searchParams.append('limit', limit);
const response = await fetch(url, {
headers: {
'Authorization': `Bearer ${token}`
}
});
const result = await response.json();
return {
brigadistas: result.data,
paginacion: result.pagination
};
}
// Uso
const { brigadistas, paginacion } = await listarBrigadistas(token, 1, 10);
console.log(`Mostrando ${brigadistas.length} de ${paginacion.total}`);
Registrar Carga de Combustible
cURL
curl -X POST https://api.cecom-brysa.cl/api/fuel \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"carId": "B-1",
"fuelDate": "2026-05-23",
"fuelTime": "10:30",
"currentMileage": 125000,
"liters": 80,
"responsible": "Juan Pérez"
}'
JavaScript
async function registrarCarga(token, datosCarga) {
const response = await fetch('https://api.cecom-brysa.cl/api/fuel', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(datosCarga)
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.message);
}
const { data } = await response.json();
return data;
}
// Uso
const nuevaCarga = await registrarCarga(token, {
carId: 'B-1',
fuelDate: '2026-05-23',
fuelTime: '10:30',
currentMileage: 125000,
liters: 80,
responsible: 'Juan Pérez'
});
Crear Emergencia
cURL
curl -X POST https://api.cecom-brysa.cl/api/emergencies \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
-H "Content-Type: application/json" \
-d '{
"formData": {
"date": "2026-05-23",
"time": "10:30",
"name": "Juan Pérez",
"phone": "+56912345678",
"position": "Supervisor",
"company": "BRYSA",
"radioChannel": "Canal 1",
"emergencyType": "CODIGO-1",
"location": "DMC",
"specificLocation": "Sector Norte, Km 5",
"description": "Incendio sector norte"
}
}'
JavaScript
async function crearEmergencia(token, datosEmergencia) {
const response = await fetch('https://api.cecom-brysa.cl/api/emergencies', {
method: 'POST',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify(datosEmergencia)
});
const { data } = await response.json();
return data;
}
// Uso
const emergencia = await crearEmergencia(token, {
formData: {
date: '2026-05-23',
time: '10:30',
name: 'Juan Pérez',
phone: '+56912345678',
position: 'Supervisor',
company: 'BRYSA',
radioChannel: 'Canal 1',
emergencyType: 'CODIGO-1',
location: 'DMC',
specificLocation: 'Sector Norte, Km 5',
description: 'Incendio sector norte'
}
});
console.log('Emergencia creada:', emergencia.id);
Cliente API Completo
/**
* Cliente API CECOM-BRYSA
* Ejemplo de implementación
*/
class CecomAPI {
constructor(baseUrl = 'https://api.cecom-brysa.cl/api') {
this.baseUrl = baseUrl;
this.token = null;
}
async request(endpoint, options = {}) {
const url = `${this.baseUrl}${endpoint}`;
const headers = {
'Content-Type': 'application/json',
...options.headers
};
if (this.token) {
headers['Authorization'] = `Bearer ${this.token}`;
}
const response = await fetch(url, {
...options,
headers
});
const data = await response.json();
if (!response.ok) {
throw new Error(data.message || 'Error en la solicitud');
}
return data;
}
// Autenticación
async login(email, password) {
const result = await this.request('/auth/login', {
method: 'POST',
body: JSON.stringify({ email, password })
});
this.token = result.data.token;
return result.data;
}
async logout() {
this.token = null;
}
// Recursos
async getRecursos() {
return this.request('/resource-panel/resources');
}
// Brigadistas
async getBrigadistas(page = 1, limit = 20) {
return this.request(`/brigadista?page=${page}&limit=${limit}`);
}
// Emergencias
async getEmergenciaActiva() {
return this.request('/emergencies/active');
}
async crearEmergencia(datos) {
return this.request('/emergencies', {
method: 'POST',
body: JSON.stringify(datos)
});
}
// Combustible
async registrarCarga(datos) {
return this.request('/fuel', {
method: 'POST',
body: JSON.stringify(datos)
});
}
}
// Uso del cliente
const api = new CecomAPI();
await api.login('usuario@brysa.cl', 'contraseña');
const recursos = await api.getRecursos();
console.log('Recursos:', recursos.data);
const { data: brigadistas, pagination } = await api.getBrigadistas(1, 10);
console.log(`Brigadistas: ${brigadistas.length}/${pagination.total}`);
Manejo de Errores
async function ejemploConErrores(api) {
try {
const resultado = await api.getRecursos();
return resultado;
} catch (error) {
if (error.message.includes('Token')) {
// Token expirado - reautenticar
console.log('Token expirado, reautenticando...');
await api.login(email, password);
return api.getRecursos();
}
if (error.message.includes('permisos')) {
// Sin permisos
console.error('No tiene permisos para esta operación');
return null;
}
// Otro error
console.error('Error:', error.message);
throw error;
}
}
Colección Postman
Para una experiencia más completa, importe la especificación OpenAPI en Postman o Insomnia desde /api-docs.json en un entorno local o interno autorizado. En producción pública, use la Referencia OpenAPI.