feat: implement server API route to set active company in cookie and update setActiveCompany method

This commit is contained in:
2026-02-13 12:46:47 -06:00
parent 7d1fe2bae8
commit 13254bbcfc
2 changed files with 45 additions and 3 deletions

View File

@@ -120,7 +120,7 @@ class CompanyStore {
* @param company - La compañía a establecer como activa
* @param silent - Si es true, no dispara el evento companyChanged (para inicialización)
*/
setActiveCompany(company: Company, silent: boolean = false) {
async setActiveCompany(company: Company, silent: boolean = false) {
const previousCompanyId = this._activeCompany?.id;
this._activeCompany = company;
@@ -130,8 +130,21 @@ class CompanyStore {
}
// Guardar en cookie para acceso desde el servidor (SSR)
if (typeof document !== 'undefined') {
document.cookie = `active_company_id=${company.id}; path=/; max-age=${60 * 60 * 24 * 30}; SameSite=Lax`;
// Usar el endpoint del servidor para garantizar que la cookie esté disponible en SSR
if (browser) {
try {
await fetch('/api-sveltekit/company/set-active', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ companyId: company.id }),
credentials: 'include'
});
console.log('Cookie set via server:', `active_company_id=${company.id}`);
} catch (error) {
console.error('Error setting active company cookie:', error);
}
}
// Despachar evento personalizado solo si:

View File

@@ -0,0 +1,29 @@
/**
* API route para establecer la compañía activa en una cookie
*/
import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';
export const POST: RequestHandler = async ({ cookies, request }) => {
try {
const { companyId } = await request.json();
if (!companyId || typeof companyId !== 'number') {
return json({ error: 'Invalid company ID' }, { status: 400 });
}
// Establecer la cookie desde el servidor
cookies.set('active_company_id', companyId.toString(), {
path: '/',
maxAge: 60 * 60 * 24 * 30, // 30 días
sameSite: 'lax',
httpOnly: false, // Permitir acceso desde JavaScript
secure: process.env.NODE_ENV === 'production'
});
return json({ success: true, companyId });
} catch (error) {
console.error('Error setting active company:', error);
return json({ error: 'Internal server error' }, { status: 500 });
}
};