se supone que volvio
This commit is contained in:
224
README.md
224
README.md
@@ -12,219 +12,125 @@
|
||||
|
||||
## 📂 Estructura del proyecto
|
||||
|
||||
El proyecto ahora está organizado como un monorepo utilizando workspaces (npm/yarn/pnpm).
|
||||
|
||||
```
|
||||
planilla/
|
||||
├─ .gitea/workflows/build.yml # CI/CD: build + push + deploy
|
||||
├─ agent/ # Servicio Agent (Node.js)
|
||||
├─ api/ # servicio API
|
||||
│ ├─ Dockerfile
|
||||
│ └─ package.json
|
||||
├─ api/ # Servicio API (Node.js + Express)
|
||||
│ ├─ Dockerfile
|
||||
│ ├─ jsconfig.json
|
||||
│ ├─ package.json
|
||||
│ └─ server.js
|
||||
├─ core/
|
||||
│ └─ prisma/ # Paquete compartido para el schema y cliente Prisma
|
||||
│ ├─ package.json
|
||||
│ ├─ tsconfig.json
|
||||
│ ├─ schema.prisma
|
||||
│ ├─ index.ts # Exporta tipos de Prisma
|
||||
│ └─ client.ts # Exporta PrismaClient
|
||||
├─ mcp/ # Servicio MCP (Node.js)
|
||||
├─ ui/ # frontend Vue 3
|
||||
│ ├─ Dockerfile
|
||||
│ └─ package.json
|
||||
├─ ui/ # Frontend Vue 3 + Vite
|
||||
│ ├─ Dockerfile
|
||||
│ ├─ tsconfig.json
|
||||
│ ├─ package.json
|
||||
│ ├─ index.html
|
||||
│ ├─ src/
|
||||
│ └─ vite.config.js
|
||||
├─ worker/ # Servicio Worker (Node.js)
|
||||
│ ├─ Dockerfile
|
||||
│ ├─ jsconfig.json
|
||||
│ └─ package.json
|
||||
├─ package.json # package.json raíz para workspaces
|
||||
├─ tsconfig.base.json # Configuración base de TypeScript para todo el monorepo
|
||||
├─ docker-compose.yml # Orquestación de todos los servicios
|
||||
└─ README.md # Este documento
|
||||
├─ Dockerfile # imagen raíz (si aplica)
|
||||
├─ docker-compose.yml # orquestación de todos los servicios
|
||||
└─ README.md # este documento
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Workspaces and Shared Packages
|
||||
|
||||
Este monorepo utiliza workspaces para gestionar múltiples paquetes/servicios. La configuración de workspaces se encuentra en el `package.json` raíz.
|
||||
|
||||
### `@empresa/prisma-schema` (`core/prisma`)
|
||||
|
||||
Este es un paquete compartido que centraliza la definición del schema de Prisma y la configuración del cliente.
|
||||
|
||||
* **Schema**: `core/prisma/schema.prisma`
|
||||
* **Generación del Cliente**: El cliente Prisma se genera dentro de este paquete.
|
||||
* **Consumo de Tipos**: Otros servicios (UI, workers, etc.) deben importar los tipos generados por Prisma desde `@empresa/prisma-schema`.
|
||||
```typescript
|
||||
import type { Employee, OtherModel } from '@empresa/prisma-schema';
|
||||
```
|
||||
* **Consumo del Cliente Prisma (`PrismaClient`)**: La instancia de `PrismaClient` solo debe ser utilizada por el servicio `api`. Se importa de la siguiente manera:
|
||||
```javascript
|
||||
// En api/server.js o similar
|
||||
import { PrismaClient } from '@empresa/prisma-schema/client';
|
||||
const prisma = new PrismaClient();
|
||||
```
|
||||
Otros servicios **no deben** importar ni instanciar `PrismaClient` directamente. Deben interactuar con la base de datos a través de la API.
|
||||
|
||||
### TypeScript Configuration
|
||||
|
||||
* Un `tsconfig.base.json` en la raíz define configuraciones comunes de TypeScript, incluyendo alias de path para `@empresa/prisma-schema`.
|
||||
* Cada servicio/paquete que utiliza TypeScript tiene su propio `tsconfig.json` (o `jsconfig.json` para proyectos JavaScript) que extiende la configuración base.
|
||||
* El paquete `core/prisma` compila su salida (cliente Prisma y tipos) a su directorio `dist/`.
|
||||
|
||||
---
|
||||
|
||||
## 📝 Requisitos
|
||||
|
||||
* **Docker** (v20+)
|
||||
* **Docker Compose** (v2+)
|
||||
* **Node.js** (v18+) y **npm** (o yarn/pnpm) para desarrollo local y gestión de workspaces.
|
||||
* **Node.js** (v18+) y **npm** para desarrollo local
|
||||
* **Acceso a red** `app-net` y `principal` en Docker
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Variables de entorno
|
||||
|
||||
Las variables de entorno relevantes para cada servicio se pueden encontrar en sus respectivos Dockerfiles o en `docker-compose.yml`. La variable `DATABASE_URL` para la conexión a PostgreSQL es utilizada por el paquete `core/prisma` (y por ende, por la `api` que lo consume) y debe estar configurada para que la `api` funcione correctamente.
|
||||
Si querés cambiar credenciales, editá directamente en `docker-compose.yml` o usá un `.env`:
|
||||
|
||||
```dotenv
|
||||
# Ejemplo de variables en .env o docker-compose.yml
|
||||
COMPOSE_PROJECT_NAME=planilla
|
||||
POSTGRES_USER=usuario
|
||||
POSTGRES_PASSWORD=clave
|
||||
POSTGRES_DB=midb
|
||||
DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}?schema=public"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Levantando los servicios
|
||||
|
||||
1. **Clonar repo**
|
||||
```bash
|
||||
git clone [https://gitea.interno.com/nucleo000/planilla.git](https://gitea.interno.com/nucleo000/planilla.git)
|
||||
cd planilla
|
||||
```
|
||||
2. **Instalar dependencias de workspaces** (desde la raíz del monorepo)
|
||||
```bash
|
||||
npm install # o yarn install / pnpm install
|
||||
```
|
||||
3. **Generar cliente Prisma** (necesario después de instalar o si cambias el schema)
|
||||
Desde la raíz del monorepo:
|
||||
```bash
|
||||
npm run db:generate --workspace=@empresa/prisma-schema # o yarn workspace @empresa/prisma-schema db:generate
|
||||
```
|
||||
O directamente desde el paquete:
|
||||
```bash
|
||||
cd core/prisma
|
||||
npm run db:generate
|
||||
cd ../..
|
||||
```
|
||||
4. **Construir y levantar contenedores Docker**
|
||||
```bash
|
||||
docker compose up -d --build
|
||||
```
|
||||
5. **Ver logs**
|
||||
```bash
|
||||
docker compose logs -f api ui worker # Agrega otros servicios según sea necesario
|
||||
```
|
||||
6. **Detener todo**
|
||||
```bash
|
||||
docker compose down --remove-orphans
|
||||
```
|
||||
1. **Clonar repo**
|
||||
|
||||
```bash
|
||||
```
|
||||
|
||||
git clone [https://gitea.interno.com/nucleo000/planilla.git](https://gitea.interno.com/nucleo000/planilla.git)
|
||||
cd planilla
|
||||
|
||||
````
|
||||
2. **Construir y levantar**
|
||||
```bash
|
||||
docker compose up -d --build
|
||||
````
|
||||
|
||||
3. **Ver logs**
|
||||
|
||||
```bash
|
||||
```
|
||||
|
||||
docker compose logs -f api ui
|
||||
|
||||
````
|
||||
4. **Detener todo**
|
||||
```bash
|
||||
docker compose down --remove-orphans
|
||||
````
|
||||
|
||||
---
|
||||
|
||||
## 📡 Acceso a la aplicación
|
||||
|
||||
* La **UI** (`ui` service) no expone puertos en el host. En Nginx Proxy Manager (red `principal`):
|
||||
* **Domino**: `planilla.midominio.com` (o el que configures)
|
||||
* **Scheme**: http
|
||||
* **Forward Hostname**: `planilla-ui` (o el nombre de contenedor que uses en `docker-compose.yml`)
|
||||
* **Forward Port**: `80` (o el puerto que exponga el contenedor de la UI, si es diferente)
|
||||
Posteriormente, puedes habilitar SSL Let’s Encrypt desde la pestaña **SSL** en Nginx Proxy Manager.
|
||||
* La **UI** no expone puertos en el host. En Nginx Proxy Manager (red `principal`):
|
||||
|
||||
* La **API** (`api` service) corre internamente, por defecto en el puerto `4000`, y no se expone directamente al exterior. La UI u otros servicios internos pueden accederla por su nombre de servicio y puerto (e.g., `http://api:4000`).
|
||||
* **Domino**: `planilla.midominio.com`
|
||||
* **Scheme**: http
|
||||
* **Forward Hostname**: `planilla-ui` (o `ui` si así lo nombraste)
|
||||
* **Forward Port**: `80`
|
||||
|
||||
Después podés habilitar SSL Let’s Encrypt desde la pestaña **SSL**.
|
||||
|
||||
* La **API** corre internamente en `planilla-api:4000` y no se expone externamente. Vu hace proxy la UI o clientes internos.
|
||||
|
||||
---
|
||||
|
||||
## 🗄️ Detalles de cada servicio
|
||||
|
||||
### Base de datos (`db`)
|
||||
### Base de datos (db)
|
||||
|
||||
* Imagen: `postgres:15`
|
||||
* Volumen persistente: `db_data`
|
||||
* Credenciales y configuración en `docker-compose.yml` y/o archivo `.env`.
|
||||
* El schema es gestionado por Prisma en `core/prisma/schema.prisma`. Las migraciones se aplican a través de los comandos de Prisma CLI.
|
||||
* Imagen: `postgres:15`
|
||||
* Volumen persistente: `db_data`
|
||||
* Credenciales en `docker-compose.yml`.
|
||||
|
||||
### API (`api`)
|
||||
### API (api)
|
||||
|
||||
* **Framework**: Express
|
||||
* Utiliza el cliente Prisma desde `@empresa/prisma-schema/client` para interactuar con la base de datos.
|
||||
* Las definiciones de tipos (ej. para cuerpos de request/response) pueden ser importadas desde `@empresa/prisma-schema`.
|
||||
* Arranca en el puerto **4000** internamente (configurable).
|
||||
* Código principal en `api/server.js`.
|
||||
* **Framework**: Express
|
||||
* **DB**: `pg` (Pool)
|
||||
* **Endpoints**:
|
||||
|
||||
### UI (`ui`)
|
||||
* `GET /api/items` → devuelve `items` desde Postgres.
|
||||
* Arranca en puerto **4000** internamente.
|
||||
* Código principal en `api/server.js`.
|
||||
|
||||
* **Framework**: Vue 3 + Vite
|
||||
* Importa tipos de datos (ej. `Employee`) desde `@empresa/prisma-schema` para type-safety en el frontend.
|
||||
* Consume datos de la API (`api` service).
|
||||
* Arranca en el puerto **80** internamente (configurable a través de `vite.config.js` y `Dockerfile`).
|
||||
* Código fuente en `ui/src/`.
|
||||
> Aviso: si ves `SyntaxError` al usar `import`, asegurate de tener en `api/package.json`:
|
||||
>
|
||||
> ```json
|
||||
> {
|
||||
> "type": "module"
|
||||
> }
|
||||
> ```
|
||||
|
||||
### Worker (`worker`)
|
||||
### UI (ui)
|
||||
|
||||
* Servicio Node.js para tareas en segundo plano o programadas.
|
||||
* Puede importar tipos desde `@empresa/prisma-schema`.
|
||||
* Debe interactuar con la base de datos **a través de la API**, no directamente.
|
||||
|
||||
### Agent (`agent`) y MCP (`mcp`)
|
||||
|
||||
* Otros servicios Node.js.
|
||||
* Pueden importar tipos desde `@empresa/prisma-schema` si necesitan interactuar con estructuras de datos alineadas con la base de datos.
|
||||
* Deben interactuar con la base de datos **a través de la API**.
|
||||
|
||||
---
|
||||
|
||||
## Prisma Migrations
|
||||
|
||||
Las migraciones de la base de datos se gestionan con Prisma CLI desde el paquete `core/prisma`.
|
||||
|
||||
1. **Modificar el schema**: Edita `core/prisma/schema.prisma`.
|
||||
2. **Crear una nueva migración**:
|
||||
Desde la raíz del monorepo:
|
||||
```bash
|
||||
npm run prisma:migrate:dev --workspace=@empresa/prisma-schema -- --name tu-nombre-de-migracion
|
||||
```
|
||||
O directamente desde el paquete `core/prisma`:
|
||||
```bash
|
||||
cd core/prisma
|
||||
npx prisma migrate dev --name tu-nombre-de-migracion
|
||||
cd ../..
|
||||
```
|
||||
Esto generará los archivos SQL de migración en `core/prisma/migrations/`.
|
||||
3. **Aplicar migraciones** (generalmente manejado por el `entrypoint.sh` de la API o un script de despliegue):
|
||||
Desde la raíz:
|
||||
```bash
|
||||
npm run prisma:deploy --workspace=@empresa/prisma-schema
|
||||
```
|
||||
O desde `core/prisma`:
|
||||
```bash
|
||||
npx prisma migrate deploy
|
||||
```
|
||||
4. **Generar cliente Prisma** (después de cambios en el schema o migraciones):
|
||||
Esto se hace con el comando `db:generate` ya mencionado en la sección de levantamiento.
|
||||
* **Framework**: Vue 3 + Vite
|
||||
* **Build**: produce carpeta `dist/` y se sirve con Nginx
|
||||
* Arranca en puerto **80** internamente.
|
||||
* Código fuente en `ui/src/`, configuración en `vite.config.js`.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user