feat(backend): initial setup for cms backend service
This commit is contained in:
15
backend/src/config/database.ts
Normal file
15
backend/src/config/database.ts
Normal file
@ -0,0 +1,15 @@
|
||||
import { drizzle } from 'drizzle-orm/better-sqlite3';
|
||||
import Database from 'better-sqlite3';
|
||||
import * as schema from '../db/schema.js';
|
||||
import { env } from './env.js';
|
||||
|
||||
if (!env.DATABASE_PATH) {
|
||||
throw new Error('DATABASE_PATH environment variable is not set');
|
||||
}
|
||||
|
||||
const sqlite = new Database(env.DATABASE_PATH);
|
||||
|
||||
// Enable WAL mode for better concurrent access
|
||||
sqlite.pragma('journal_mode = WAL');
|
||||
|
||||
export const db = drizzle(sqlite, { schema });
|
||||
51
backend/src/config/env.ts
Normal file
51
backend/src/config/env.ts
Normal file
@ -0,0 +1,51 @@
|
||||
// Environment configuration with validation
|
||||
export const env = {
|
||||
// Database
|
||||
DATABASE_PATH: process.env.DATABASE_PATH || './data/gallus_cms.db',
|
||||
|
||||
// Gitea OAuth
|
||||
GITEA_URL: process.env.GITEA_URL || 'https://git.bookageek.ch',
|
||||
GITEA_CLIENT_ID: process.env.GITEA_CLIENT_ID || '',
|
||||
GITEA_CLIENT_SECRET: process.env.GITEA_CLIENT_SECRET || '',
|
||||
GITEA_REDIRECT_URI: process.env.GITEA_REDIRECT_URI || 'http://localhost:3000/api/auth/callback',
|
||||
GITEA_ALLOWED_USERS: process.env.GITEA_ALLOWED_USERS || '',
|
||||
|
||||
// Git Configuration
|
||||
GIT_REPO_URL: process.env.GIT_REPO_URL || '',
|
||||
GIT_TOKEN: process.env.GIT_TOKEN || '',
|
||||
GIT_USER_NAME: process.env.GIT_USER_NAME || 'Gallus CMS',
|
||||
GIT_USER_EMAIL: process.env.GIT_USER_EMAIL || 'cms@galluspub.ch',
|
||||
GIT_WORKSPACE_DIR: process.env.GIT_WORKSPACE_DIR || '/tmp/gallus-repo',
|
||||
|
||||
// JWT & Session
|
||||
JWT_SECRET: process.env.JWT_SECRET || '',
|
||||
SESSION_SECRET: process.env.SESSION_SECRET || '',
|
||||
|
||||
// Server
|
||||
PORT: parseInt(process.env.PORT || '3000', 10),
|
||||
NODE_ENV: process.env.NODE_ENV || 'development',
|
||||
CORS_ORIGIN: process.env.CORS_ORIGIN || 'http://localhost:5173',
|
||||
FRONTEND_URL: process.env.FRONTEND_URL || 'http://localhost:5173',
|
||||
|
||||
// Upload
|
||||
MAX_FILE_SIZE: parseInt(process.env.MAX_FILE_SIZE || '5242880', 10),
|
||||
};
|
||||
|
||||
// Validate required environment variables
|
||||
export function validateEnv() {
|
||||
const required = [
|
||||
'DATABASE_PATH',
|
||||
'GITEA_CLIENT_ID',
|
||||
'GITEA_CLIENT_SECRET',
|
||||
'GIT_REPO_URL',
|
||||
'GIT_TOKEN',
|
||||
'JWT_SECRET',
|
||||
'SESSION_SECRET',
|
||||
];
|
||||
|
||||
const missing = required.filter(key => !env[key as keyof typeof env]);
|
||||
|
||||
if (missing.length > 0) {
|
||||
throw new Error(`Missing required environment variables: ${missing.join(', ')}`);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user