feat: dar prioridad a DB_PATH sobre DATA_DIR en la BD SQLite

Co-authored-by: aider (openrouter/openai/gpt-5) <aider@aider.chat>
webui
brobert 2 weeks ago
parent 122beb7663
commit 3d6c446547

@ -17,6 +17,7 @@ PORT=3007
NODE_ENV="production" # production | development | test
TZ="Europe/Madrid" # Zona horaria usada para "hoy/mañana" y render de fechas
WEB_BASE_URL="https://taskbot.server.brobert.net" # Host público de la web (p.ej. https://wtask.org en producción)
# DB_PATH="./data/tasks.db" # Si se define, ignora DATA_DIR y usa esta ruta exacta
# Sincronización de grupos (opcional)
# Intervalo en milisegundos; por defecto 86400000 (24h). En desarrollo puede bajarse (mínimo recomendable 10000ms).

@ -21,6 +21,7 @@ Variables de entorno (principales)
- 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'
- DATA_DIR: directorio base para la base de datos SQLite (por defecto ./data).
- DB_PATH: ruta absoluta o relativa al archivo SQLite; si se define, tiene prioridad sobre DATA_DIR. Ej.: DB_PATH='./data/tasks.db'
- WEB_BASE_URL: base pública de la interfaz web para construir enlaces absolutos (p. ej., /login?token=...). Obligatoria para /t web. Ej.: WEB_BASE_URL='https://wtask.org'
Endpoints operativos

@ -1,7 +1,7 @@
import { Database } from 'bun:sqlite';
import { normalizeWhatsAppId } from './utils/whatsapp';
import { mkdirSync } from 'fs';
import { join, resolve } from 'path';
import { join, resolve, dirname } from 'path';
import { Migrator } from './db/migrator';
function applyDefaultPragmas(instance: Database): void {
@ -20,6 +20,22 @@ function applyDefaultPragmas(instance: Database): void {
// Function to get a database instance. Defaults to 'data/tasks.db'
export function getDb(filename: string = 'tasks.db'): Database {
// Prioridad 1: DB_PATH (ruta completa al archivo). Si está definida, se usa tal cual.
const dbPathEnv = process?.env?.DB_PATH ? String(process.env.DB_PATH).trim() : '';
if (dbPathEnv) {
const absolutePath = resolve(dbPathEnv);
// Crear directorio padre si no existe
try {
mkdirSync(dirname(absolutePath), { recursive: true });
} catch (err) {
if ((err as any)?.code !== 'EEXIST') throw err; // Solo ignorar "ya existe"
}
const instance = new Database(absolutePath);
applyDefaultPragmas(instance);
return instance;
}
// Prioridad 2: DATA_DIR + filename (comportamiento actual)
// 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);

Loading…
Cancel
Save