52 lines
1.8 KiB
TypeScript
52 lines
1.8 KiB
TypeScript
import { createSessionClient } from './appwrite.server';
|
|
|
|
export interface UserPreferences {
|
|
hiddenColumns?: Record<string, string[]>; // entidad -> lista de nombres de campos ocultos
|
|
sortConfig?: Record<string, { field: string, direction: 'asc' | 'desc' }>;
|
|
}
|
|
|
|
/**
|
|
* Obtiene las preferencias persistidas del usuario desde Appwrite Account Prefs
|
|
*/
|
|
export async function getUserPreferences(): Promise<UserPreferences> {
|
|
try {
|
|
const PROJECT_ID = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID || '69b84df5003bd8957c5c';
|
|
const { cookies } = await import('next/headers');
|
|
const cookieStore = await cookies();
|
|
const sessionCookie = cookieStore.get(`a_session_${PROJECT_ID.toLowerCase()}`);
|
|
|
|
// En modo bypass no hay preferencias persistidas reales que valga la pena pedir a account.get()
|
|
if (sessionCookie?.value === "admin-bypass-session") {
|
|
return {};
|
|
}
|
|
|
|
const sessionClient = await createSessionClient();
|
|
if (!sessionClient) return {};
|
|
|
|
const account = await sessionClient.account.get();
|
|
return (account.prefs as UserPreferences) || {};
|
|
} catch (error) {
|
|
console.error('Error fetching user prefs:', error);
|
|
return {};
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Actualiza una preferencia específica del usuario
|
|
*/
|
|
export async function updateUserPreference(update: Partial<UserPreferences>): Promise<boolean> {
|
|
try {
|
|
const sessionClient = await createSessionClient();
|
|
if (!sessionClient) return false;
|
|
|
|
const currentPrefs = await getUserPreferences();
|
|
const newPrefs = { ...currentPrefs, ...update };
|
|
|
|
await sessionClient.account.updatePrefs(newPrefs);
|
|
return true;
|
|
} catch (error) {
|
|
console.error('Error updating user prefs:', error);
|
|
return false;
|
|
}
|
|
}
|