chore: estructura inicial del MVP
Backend (Express + MariaDB) y frontend (React + Vite, identidad Fluent/Windows) con el nucleo funcional: seguridad, organizacion, proyectos, actividades, subtareas, dependencias, dashboard, calendario, gantt, comentarios, adjuntos, notificaciones in-app y catalogos. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
import mysql from 'mysql2/promise';
|
||||
import { env } from './env.js';
|
||||
|
||||
export const pool = mysql.createPool({
|
||||
host: env.db.host,
|
||||
port: env.db.port,
|
||||
database: env.db.name,
|
||||
user: env.db.user,
|
||||
password: env.db.password,
|
||||
waitForConnections: true,
|
||||
connectionLimit: 10,
|
||||
dateStrings: true,
|
||||
});
|
||||
@@ -0,0 +1,32 @@
|
||||
import 'dotenv/config';
|
||||
|
||||
const required = ['DB_HOST', 'DB_NAME', 'DB_USER', 'DB_PASSWORD', 'JWT_SECRET'];
|
||||
|
||||
for (const key of required) {
|
||||
if (!process.env[key]) {
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
throw new Error(`Falta la variable de entorno obligatoria: ${key}`);
|
||||
}
|
||||
console.warn(`[env] Falta ${key} — completa backend/.env`);
|
||||
}
|
||||
}
|
||||
|
||||
if (process.env.NODE_ENV === 'production' && (process.env.JWT_SECRET || '').length < 32) {
|
||||
throw new Error('JWT_SECRET debe tener al menos 32 caracteres en producción');
|
||||
}
|
||||
|
||||
export const env = {
|
||||
port: Number(process.env.PORT || 4019),
|
||||
nodeEnv: process.env.NODE_ENV || 'development',
|
||||
db: {
|
||||
host: process.env.DB_HOST,
|
||||
port: Number(process.env.DB_PORT || 3306),
|
||||
name: process.env.DB_NAME,
|
||||
user: process.env.DB_USER,
|
||||
password: process.env.DB_PASSWORD,
|
||||
},
|
||||
jwtSecret: process.env.JWT_SECRET || 'dev-only-insecure-secret',
|
||||
jwtExpires: process.env.JWT_EXPIRES || '8h',
|
||||
corsOrigin: process.env.CORS_ORIGIN || 'http://localhost:5196',
|
||||
storageRoot: process.env.STORAGE_ROOT || './storage',
|
||||
};
|
||||
Reference in New Issue
Block a user