mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-19 05:26:47 +00:00
5c054863b9
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`.
30 lines
1.1 KiB
TypeScript
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;
|
|
}
|