first commit
This commit is contained in:
37
api/src/config/data-source.ts
Normal file
37
api/src/config/data-source.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import 'reflect-metadata';
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
import { DataSource } from 'typeorm';
|
||||
import { env } from './env.js';
|
||||
import { AppSetting } from '../entities/AppSetting.js';
|
||||
import { Category } from '../entities/Category.js';
|
||||
import { Expense } from '../entities/Expense.js';
|
||||
import { Merchant } from '../entities/Merchant.js';
|
||||
import { Proof } from '../entities/Proof.js';
|
||||
import { User } from '../entities/User.js';
|
||||
|
||||
const entities = [User, Category, Expense, Proof, AppSetting, Merchant];
|
||||
const baseOptions = { entities, synchronize: env.DB_SYNC, logging: env.DB_LOGGING };
|
||||
|
||||
if (env.DB_TYPE === 'sqlite') {
|
||||
const file = path.resolve(env.DB_PATH);
|
||||
fs.mkdirSync(path.dirname(file), { recursive: true });
|
||||
}
|
||||
|
||||
export const AppDataSource =
|
||||
env.DB_TYPE === 'postgres'
|
||||
? new DataSource({
|
||||
type: 'postgres',
|
||||
host: env.DB_HOST,
|
||||
port: env.DB_PORT,
|
||||
username: env.DB_USER,
|
||||
password: env.DB_PASSWORD,
|
||||
database: env.DB_NAME,
|
||||
...baseOptions
|
||||
})
|
||||
: new DataSource({
|
||||
type: 'sqljs',
|
||||
location: path.resolve(env.DB_PATH),
|
||||
autoSave: true,
|
||||
...baseOptions
|
||||
});
|
||||
33
api/src/config/env.ts
Normal file
33
api/src/config/env.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import dotenv from 'dotenv';
|
||||
dotenv.config();
|
||||
type DbType = 'postgres' | 'sqlite';
|
||||
const toNumber = (value: string | undefined, fallback: number) => {
|
||||
const parsed = Number(value);
|
||||
return Number.isFinite(parsed) ? parsed : fallback;
|
||||
};
|
||||
const toBoolean = (value: string | undefined, fallback: boolean) => {
|
||||
if (value === undefined) return fallback;
|
||||
return value === 'true' || value === '1';
|
||||
};
|
||||
export const env = {
|
||||
NODE_ENV: process.env.NODE_ENV ?? 'development',
|
||||
APP_PORT: toNumber(process.env.APP_PORT, 4000),
|
||||
JWT_SECRET: process.env.JWT_SECRET ?? 'dev-secret-key',
|
||||
JWT_EXPIRES_IN: process.env.JWT_EXPIRES_IN ?? '7d',
|
||||
DB_TYPE: (process.env.DB_TYPE as DbType | undefined) ?? 'sqlite',
|
||||
DB_HOST: process.env.DB_HOST ?? 'localhost',
|
||||
DB_PORT: toNumber(process.env.DB_PORT, 5432),
|
||||
DB_NAME: process.env.DB_NAME ?? 'expense_control',
|
||||
DB_USER: process.env.DB_USER ?? 'expense_app',
|
||||
DB_PASSWORD: process.env.DB_PASSWORD ?? 'expense_app',
|
||||
DB_PATH: process.env.DB_PATH ?? './data/dev.sqlite',
|
||||
DB_SYNC: toBoolean(process.env.DB_SYNC, true),
|
||||
DB_LOGGING: toBoolean(process.env.DB_LOGGING, false),
|
||||
APP_NAME: process.env.APP_NAME ?? 'Expense Control',
|
||||
DEFAULT_CURRENCY: process.env.DEFAULT_CURRENCY ?? 'PLN',
|
||||
ADMIN_EMAIL: process.env.ADMIN_EMAIL ?? 'admin@example.com',
|
||||
ADMIN_PASSWORD: process.env.ADMIN_PASSWORD ?? 'Admin123!',
|
||||
UPLOAD_DIR: process.env.UPLOAD_DIR ?? './uploads',
|
||||
MAX_UPLOAD_SIZE_MB: toNumber(process.env.MAX_UPLOAD_SIZE_MB, 10),
|
||||
API_CORS_ORIGIN: process.env.API_CORS_ORIGIN ?? 'http://localhost:4200'
|
||||
};
|
||||
Reference in New Issue
Block a user