Files
TREK/server/src/db/db-path.ts
T
Maurice 5c054863b9 refactor(server): resolve the data directory in one place
The data and uploads directories were derived independently in about ten
files, each counting `..` hops from its own `__dirname`, and the file
logger used `process.cwd()` instead. Moving a file or starting the server
from another directory quietly moved where secrets, backups or logs went,
and the backup code named `data/travel.db` directly, so with TREK_DB_FILE
set a backup archived and a restore replaced a file the connection never
opened.

`resolveDataPaths()` in app-config now anchors data/, uploads/, backups,
tmp, logs, the JWT secret and encryption key files and the database file
(TREK_DB_FILE when set, else data/travel.db) on the server package root.
Code that runs before the container calls it directly; Nest classes inject
the new `DataPathsService`. Every previous anchor uses it, and the resolved
paths are unchanged for the image and for `npm run dev`.
2026-10-08 18:40:15 +02:00

30 lines
1.1 KiB
TypeScript

import { readEnv } from '../app-config';
import { resolveDataPaths } from '../app-config/data-paths';
import fs from 'fs';
import path from 'path';
/**
* The SQLite file this process talks to.
*
* Shared by `database.ts` (which opens the connection) and `mikro-orm.config.ts`
* (which needs the same target for the CLI and for the Nest-owned ORM). Kept in
* one place because a config that names a different file than the connection is
* the kind of mistake that only shows up as an empty database.
*
* Creates the containing directory as a side effect, exactly as the original
* inline block in `database.ts` did.
*/
export function resolveDbPath(): string {
// In test mode each vitest worker gets an isolated in-memory DB so that
// parallel forks can't race on the same file or share migration state.
if (readEnv().app.isTest) return ':memory:';
// TREK_DB_FILE (the Playwright E2E harness runs against a throwaway file this
// way) or data/travel.db, both resolved by the one data layout.
const file = resolveDataPaths().dbFile;
const dir = path.dirname(file);
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
return file;
}