feat: añadir DATA_DIR para DB compartida y configurar Bun workspaces

Co-authored-by: aider (openrouter/openai/gpt-5) <aider@aider.chat>
webui
borja 3 weeks ago
parent 5e762dbdf7
commit e647ad7c3a

@ -0,0 +1,3 @@
bun install
bun create svelte@latest apps/web
cd apps/web && bun add -d @sveltejs/adapter-node

@ -73,6 +73,7 @@ Variables clave:
- METRICS_ENABLED, PORT. - METRICS_ENABLED, PORT.
- Rate limit: RATE_LIMIT_PER_MIN, RATE_LIMIT_BURST. - Rate limit: RATE_LIMIT_PER_MIN, RATE_LIMIT_BURST.
- Intervalos y retención: GROUP_SYNC_INTERVAL_MS, GROUP_MEMBERS_SYNC_INTERVAL_MS, GROUP_MEMBERS_INACTIVE_RETENTION_DAYS. - Intervalos y retención: GROUP_SYNC_INTERVAL_MS, GROUP_MEMBERS_SYNC_INTERVAL_MS, GROUP_MEMBERS_INACTIVE_RETENTION_DAYS.
- DATA_DIR: directorio raíz para la base de datos SQLite compartida (por defecto ./data).
Consulta: Consulta:
- docs/operations.md para operación, endpoints y variables de entorno. - docs/operations.md para operación, endpoints y variables de entorno.

@ -0,0 +1 @@
workspaces = ["apps/*"]

@ -20,6 +20,7 @@ Variables de entorno (principales)
- ADMIN_USERS: lista separada por comas de IDs/JIDs autorizados para /admin (se normalizan a dígitos). Ej.: ADMIN_USERS='34600123456, 5554443333, +34 600 111 222' - ADMIN_USERS: lista separada por comas de IDs/JIDs autorizados para /admin (se normalizan a dígitos). Ej.: ADMIN_USERS='34600123456, 5554443333, +34 600 111 222'
- ALLOWED_GROUPS: lista separada por comas de group_id@g.us para sembrado inicial en arranque. Ej.: ALLOWED_GROUPS='12345-67890@g.us, 11111-22222@g.us' - ALLOWED_GROUPS: lista separada por comas de group_id@g.us para sembrado inicial en arranque. Ej.: ALLOWED_GROUPS='12345-67890@g.us, 11111-22222@g.us'
- NOTIFY_ADMINS_ON_DISCOVERY: 'true'/'false' para avisar por DM a ADMIN_USERS al descubrir un grupo (modo 'discover'). Ej.: NOTIFY_ADMINS_ON_DISCOVERY='true' - NOTIFY_ADMINS_ON_DISCOVERY: 'true'/'false' para avisar por DM a ADMIN_USERS al descubrir un grupo (modo 'discover'). Ej.: NOTIFY_ADMINS_ON_DISCOVERY='true'
- DATA_DIR: directorio base para la base de datos SQLite (por defecto ./data).
Endpoints operativos Endpoints operativos
- GET /metrics - GET /metrics

@ -1,7 +1,7 @@
import { Database } from 'bun:sqlite'; import { Database } from 'bun:sqlite';
import { normalizeWhatsAppId } from './utils/whatsapp'; import { normalizeWhatsAppId } from './utils/whatsapp';
import { mkdirSync } from 'fs'; import { mkdirSync } from 'fs';
import { join } from 'path'; import { join, resolve } from 'path';
import { Migrator } from './db/migrator'; import { Migrator } from './db/migrator';
function applyDefaultPragmas(instance: Database): void { function applyDefaultPragmas(instance: Database): void {
@ -18,15 +18,20 @@ function applyDefaultPragmas(instance: Database): void {
} }
} }
// Function to get a database instance. Defaults to 'data/tasks.db' // Function to get a database instance. Defaults to 'data/tasks.db'
export function getDb(filename: string = 'tasks.db'): Database { export function getDb(filename: string = 'tasks.db'): Database {
// Determine base directory for the database (env DATA_DIR or default './data'), resolve to absolute
const dataDir = process?.env?.DATA_DIR ? String(process.env.DATA_DIR) : 'data';
const dirPath = resolve(dataDir);
// Try to create data directory if it doesn't exist (ignore if already exists) // Try to create data directory if it doesn't exist (ignore if already exists)
try { try {
mkdirSync('data', { recursive: true }); mkdirSync(dirPath, { recursive: true });
} catch (err) { } catch (err) {
if (err.code !== 'EEXIST') throw err; // Only ignore "already exists" errors if ((err as any)?.code !== 'EEXIST') throw err; // Only ignore "already exists" errors
} }
const instance = new Database(join('data', filename));
const instance = new Database(join(dirPath, filename));
applyDefaultPragmas(instance); applyDefaultPragmas(instance);
return instance; return instance;
} }

Loading…
Cancel
Save