From 31560933057ed03b4cbef7b410d39c6b09a16195 Mon Sep 17 00:00:00 2001 From: Mahdi Date: Thu, 30 Jul 2026 20:39:58 +0330 Subject: [PATCH] Track uploads util; ignore only runtime /uploads directory. Co-authored-by: Cursor --- .gitignore | 4 ++-- src/uploads/uploads.util.ts | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 src/uploads/uploads.util.ts diff --git a/.gitignore b/.gitignore index 1490f2f..9992ee6 100644 --- a/.gitignore +++ b/.gitignore @@ -18,8 +18,8 @@ prisma/dev.db-journal # local runtime toggles data/ -# uploaded tenant assets -uploads/ +# uploaded tenant assets (runtime dir at repo root — keep src/uploads source tracked) +/uploads/ # logs & ide *.log diff --git a/src/uploads/uploads.util.ts b/src/uploads/uploads.util.ts new file mode 100644 index 0000000..dd9cea5 --- /dev/null +++ b/src/uploads/uploads.util.ts @@ -0,0 +1,20 @@ +import { existsSync, mkdirSync } from 'fs'; +import { join } from 'path'; + +export const UPLOADS_ROOT = join(process.cwd(), 'uploads'); +export const AVATARS_DIR = join(UPLOADS_ROOT, 'avatars'); + +export function ensureUploadsDirs() { + if (!existsSync(AVATARS_DIR)) { + mkdirSync(AVATARS_DIR, { recursive: true }); + } +} + +export function publicApiBase(config: { + get: (key: string, defaultValue?: string) => string | undefined; +}): string { + const fromEnv = config.get('PUBLIC_API_URL')?.replace(/\/$/, ''); + if (fromEnv) return fromEnv; + const port = config.get('PORT', '3001') ?? '3001'; + return `http://localhost:${port}`; +}