# Planilla **ESTE REPOSITORIO ES UNA COPIA DEL DE GITEA. EL PRINCIPAL ES EL DE GITEA** **Sistema de gestión de planillas** compuesto por: * **Base de datos**: PostgreSQL * **API**: Express + Node.js (módulo `api`) * **Interfaz de usuario**: Vue 3 + Vite (módulo `ui`) * **Orquestación**: Docker Compose * **Proxy y SSL**: nginx-proxy-manager (red `principal`) --- ## 📂 Estructura del proyecto ``` planilla/ ├─ .gitea/workflows/build.yml # CI/CD: build + push + deploy ├─ api/ # servicio API │ ├─ Dockerfile │ ├─ package.json │ └─ server.js ├─ ui/ # frontend Vue 3 │ ├─ Dockerfile │ ├─ index.html │ ├─ src/ │ └─ vite.config.js ├─ Dockerfile # imagen raíz (si aplica) ├─ docker-compose.yml # orquestación de todos los servicios └─ README.md # este documento ``` --- ## 📝 Requisitos * **Docker** (v20+) * **Docker Compose** (v2+) * **Node.js** (v18+) y **npm** para desarrollo local * **Acceso a red** `app-net` y `principal` en Docker --- ## ⚙️ Variables de entorno Si querés cambiar credenciales, editá directamente en `docker-compose.yml` o usá un `.env`: ```dotenv COMPOSE_PROJECT_NAME=planilla POSTGRES_USER=usuario POSTGRES_PASSWORD=clave POSTGRES_DB=midb ``` --- ## 🚀 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. **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** no expone puertos en el host. En Nginx Proxy Manager (red `principal`): * **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) * Imagen: `postgres:15` * Volumen persistente: `db_data` * Credenciales en `docker-compose.yml`. ### API (api) * **Framework**: Express * **DB**: `pg` (Pool) * **Endpoints**: * `GET /api/items` → devuelve `items` desde Postgres. * Arranca en puerto **4000** internamente. * Código principal en `api/server.js`. > Aviso: si ves `SyntaxError` al usar `import`, asegurate de tener en `api/package.json`: > > ```json > { > "type": "module" > } > ``` ### UI (ui) * **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`. ### Notificaciones en tiempo real (SSE) El backend expone un endpoint `/events` que utiliza **Server-Sent Events**. La base de datos PostgreSQL emite mensajes mediante triggers en las tablas `Planilla`, `Cliente`, `TareaRealizada` y `Asistencia`. Cada cambio se reenvía automáticamente a los navegadores conectados. ```javascript const source = new EventSource('http://localhost:4000/events'); source.onmessage = (e) => { const data = JSON.parse(e.data); console.log('Evento recibido', data); }; ``` #### Card Animation The data cards implemented in `ui/src/components/ui/NucleoDataCard.vue` now feature a subtle growing animation when hovered over. This animation is implemented purely with CSS using keyframes and transitions defined within the component's `