fix: unify data directory for dev and prod environments (#116)

Add DATA_DIR env var support to configure the data directory path.
All hardcoded resolve(cwd, 'data') paths now use a central getDataDir()
function from db-utils.ts that checks DATA_DIR first, falling back to
resolve(cwd, 'data').

This prevents local dev (cd backend && npm run dev) from creating a
separate backend/data/ directory instead of using the root data/ folder.

Changes:
- Add getDataDir() to db-utils.ts as single source of truth
- Update all 8 source files that reference the data directory
- Add dotenv fallback to ../.env for local dev from backend/
- Add DATA_DIR documentation to .env.example
- Add 7 new tests for getDataDir and getDbPaths with DATA_DIR
- 493 tests pass, TypeScript clean
This commit is contained in:
Daniel Volz
2026-02-08 11:20:55 +01:00
committed by GitHub
parent 99bb9c3931
commit 2a84a43654
13 changed files with 102 additions and 16 deletions
+11 -1
View File
@@ -21,6 +21,16 @@ const migrationsFolder = resolve(__dirname, "../../drizzle");
// Path & Directory utilities
// =============================================================================
/**
* Get the data directory path.
* Checks DATA_DIR env var first, then falls back to resolve(cwd, "data").
* This ensures local dev (`cd backend && npm run dev`) and Docker both
* use the same directory when DATA_DIR is set.
*/
export function getDataDir(cwd: string = process.cwd()): string {
return process.env.DATA_DIR ? resolve(process.env.DATA_DIR) : resolve(cwd, "data");
}
/** Build the database URL from a path */
export function buildDbUrl(dbPath: string): string {
return `file:${dbPath}`;
@@ -28,7 +38,7 @@ export function buildDbUrl(dbPath: string): string {
/** Get data directory and database path */
export function getDbPaths(cwd: string = process.cwd()): { dataDir: string; dbPath: string; url: string } {
const dataDir = resolve(cwd, "data");
const dataDir = getDataDir(cwd);
const dbPath = resolve(dataDir, "medassist-ng.db");
const url = buildDbUrl(dbPath);
return { dataDir, dbPath, url };