82 lines
1.9 KiB
TypeScript
82 lines
1.9 KiB
TypeScript
import type { PageServerLoad } from './$types';
|
|
|
|
export const load: PageServerLoad = async ({ cookies, fetch, url, parent }) => {
|
|
// Esperar a que el layout padre valide/refresque el token
|
|
await parent();
|
|
|
|
const token = cookies.get('access_token');
|
|
|
|
if (!token) {
|
|
return {
|
|
error: 'No authenticated',
|
|
items: [],
|
|
total: 0,
|
|
page: 1,
|
|
page_size: 50
|
|
};
|
|
}
|
|
|
|
try {
|
|
// Obtener parámetros de paginación de la URL
|
|
const page = parseInt(url.searchParams.get('page') || '1');
|
|
const pageSize = parseInt(url.searchParams.get('page_size') || '50');
|
|
|
|
// Configurar la URL de la API para SSR
|
|
let apiUrl = process.env.INTERNAL_API_URL;
|
|
if (!apiUrl) {
|
|
apiUrl = import.meta.env.VITE_API_URL;
|
|
// Reemplazar 'localhost' con 'backend' para llamadas desde el servidor (SSR)
|
|
apiUrl = apiUrl?.replace('localhost', 'backend').replace('127.0.0.1', 'backend');
|
|
}
|
|
|
|
// Normalizar la URL
|
|
const baseUrl = apiUrl?.endsWith('/') ? apiUrl : `${apiUrl}/`;
|
|
|
|
const response = await fetch(
|
|
`${baseUrl}v1/countries?page=${page}&page_size=${pageSize}`,
|
|
{
|
|
headers: {
|
|
'Authorization': `Bearer ${token}`,
|
|
'Content-Type': 'application/json'
|
|
}
|
|
}
|
|
);
|
|
|
|
if (!response.ok) {
|
|
const errorText = await response.text();
|
|
console.error('📊 [Countries] API Error:', {
|
|
status: response.status,
|
|
statusText: response.statusText,
|
|
error: errorText
|
|
});
|
|
|
|
return {
|
|
error: `Error ${response.status}: ${response.statusText}`,
|
|
items: [],
|
|
total: 0,
|
|
page: page,
|
|
page_size: pageSize
|
|
};
|
|
}
|
|
|
|
const data = await response.json();
|
|
|
|
return {
|
|
items: data.items || [],
|
|
total: data.total || 0,
|
|
page: data.page || page,
|
|
page_size: data.page_size || pageSize,
|
|
error: null
|
|
};
|
|
} catch (error) {
|
|
console.error('📊 [Countries] Load error:', error);
|
|
return {
|
|
error: 'Error loading data',
|
|
items: [],
|
|
total: 0,
|
|
page: 1,
|
|
page_size: 50
|
|
};
|
|
}
|
|
};
|