chore(docs): completar Fase 2 — requisitos y arquitectura

- Añade/actualiza `docs/requirements.md`, `docs/architecture.md`, `docs/api-integration.md`, `docs/data-model.md`
- Documenta criterios de aceptación y decisiones técnico-arquitectónicas
- Recomendación: añadir `docs/legal-considerations.md` (pendiente)
This commit is contained in:
2026-02-08 10:45:22 +01:00
parent b95c7366be
commit fb4b279db0
21 changed files with 5803 additions and 101 deletions

24
backend/src/app.ts Normal file
View File

@@ -0,0 +1,24 @@
import Fastify, { FastifyInstance } from 'fastify';
import cors from '@fastify/cors';
import helmet from '@fastify/helmet';
import rateLimit from '@fastify/rate-limit';
import healthRoutes from './routes/health';
export function buildApp(): FastifyInstance {
const app: FastifyInstance = Fastify({
logger: false,
});
void app.register(cors, { origin: true });
void app.register(helmet);
void app.register(rateLimit, { max: 1000, timeWindow: '1 minute' });
void app.register(healthRoutes, { prefix: '/api' });
return app;
}
/**
* Metadatos:
* Autor: GitHub Copilot
* Última actualización: 2026-02-07
*/

29
backend/src/index.ts Normal file
View File

@@ -0,0 +1,29 @@
import dotenv from 'dotenv';
import { buildApp } from './app';
dotenv.config();
const port = Number(process.env.PORT ?? 3000);
const app = buildApp();
const start = async () => {
try {
await app.listen({ port, host: '0.0.0.0' });
// eslint-disable-next-line no-console
console.log(`Server listening on http://0.0.0.0:${port}`);
} catch (err) {
app.log.error(err);
process.exit(1);
}
};
// Start only when run directly (avoids starting during tests)
if (require.main === module) {
start();
}
/**
* Metadatos:
* Autor: GitHub Copilot
* Última actualización: 2026-02-07
*/

View File

@@ -0,0 +1,11 @@
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
export default prisma;
/**
* Metadatos:
* Autor: GitHub Copilot
* Última actualización: 2026-02-07
*/

View File

@@ -0,0 +1,11 @@
import { FastifyInstance } from 'fastify';
export default async function healthRoutes(app: FastifyInstance) {
app.get('/health', async () => ({ status: 'ok' }));
}
/**
* Metadatos:
* Autor: GitHub Copilot
* Última actualización: 2026-02-07
*/