diff --git a/README.md b/README.md index eb98a43..f0df7fc 100644 --- a/README.md +++ b/README.md @@ -12,125 +12,219 @@ ## 📂 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 -├─ api/ # servicio API +├─ agent/ # Servicio Agent (Node.js) │ ├─ Dockerfile +│ └─ package.json +├─ api/ # Servicio API (Node.js + Express) +│ ├─ Dockerfile +│ ├─ jsconfig.json │ ├─ package.json │ └─ server.js -├─ ui/ # frontend Vue 3 +├─ 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) │ ├─ Dockerfile +│ └─ package.json +├─ ui/ # Frontend Vue 3 + Vite +│ ├─ Dockerfile +│ ├─ tsconfig.json +│ ├─ package.json │ ├─ 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 +├─ 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 ``` --- +## 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** para desarrollo local +* **Node.js** (v18+) y **npm** (o yarn/pnpm) para desarrollo local y gestión de workspaces. * **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`: +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. ```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. **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 -```` +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 + ``` --- ## 📡 Acceso a la aplicación -* La **UI** no expone puertos en el host. En Nginx Proxy Manager (red `principal`): +* 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. - * **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. +* 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`). --- ## 🗄️ Detalles de cada servicio -### Base de datos (db) +### Base de datos (`db`) -* Imagen: `postgres:15` -* Volumen persistente: `db_data` -* Credenciales en `docker-compose.yml`. +* 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. -### API (api) +### API (`api`) -* **Framework**: Express -* **DB**: `pg` (Pool) -* **Endpoints**: +* **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`. - * `GET /api/items` → devuelve `items` desde Postgres. -* Arranca en puerto **4000** internamente. -* Código principal en `api/server.js`. +### UI (`ui`) -> Aviso: si ves `SyntaxError` al usar `import`, asegurate de tener en `api/package.json`: -> -> ```json -> { -> "type": "module" -> } -> ``` +* **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/`. -### UI (ui) +### Worker (`worker`) -* **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`. +* 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. --- diff --git a/agent/jsconfig.json b/agent/jsconfig.json new file mode 100644 index 0000000..aa97f2c --- /dev/null +++ b/agent/jsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "checkJs": false, + "resolveJsonModule": true, + "moduleResolution": "node", + "target": "esnext", // Or appropriate target for your Node.js version + "module": "esnext", // Since package.json has "type": "module" + // Paths are inherited from tsconfig.base.json + "baseUrl": "." // baseUrl is still needed if there are other local paths + }, + "include": ["**/*.js"], + "exclude": ["node_modules"] +} diff --git a/agent/package.json b/agent/package.json index 010f853..eeac75a 100644 --- a/agent/package.json +++ b/agent/package.json @@ -15,6 +15,7 @@ "@open-wa/wa-automate": "^4.34.3", "mime-types": "^2.1.35", "@modelcontextprotocol/sdk": "^1.0.0", - "@philschmid/weather-mcp": "^1.0.0" + "@philschmid/weather-mcp": "^1.0.0", + "@empresa/prisma-schema": "1.0.0" } } diff --git a/api/jsconfig.json b/api/jsconfig.json new file mode 100644 index 0000000..aa97f2c --- /dev/null +++ b/api/jsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "checkJs": false, + "resolveJsonModule": true, + "moduleResolution": "node", + "target": "esnext", // Or appropriate target for your Node.js version + "module": "esnext", // Since package.json has "type": "module" + // Paths are inherited from tsconfig.base.json + "baseUrl": "." // baseUrl is still needed if there are other local paths + }, + "include": ["**/*.js"], + "exclude": ["node_modules"] +} diff --git a/api/package.json b/api/package.json index dc1dc90..93239d5 100644 --- a/api/package.json +++ b/api/package.json @@ -7,13 +7,11 @@ "start": "node server.js" }, "dependencies": { - "@prisma/client": "^6.8.2", + "@empresa/prisma-schema": "1.0.0", "cors": "^2.8.5", "express": "^4.18.2", "node-cron": "^4.0.5", "pg": "^8.8.0" }, - "devDependencies": { - "prisma": "^6.8.2" - } + "devDependencies": {} } diff --git a/api/prisma/migrations/20250515020056_init/migration.sql b/api/prisma/migrations/20250515020056_init/migration.sql deleted file mode 100644 index 555a426..0000000 --- a/api/prisma/migrations/20250515020056_init/migration.sql +++ /dev/null @@ -1,84 +0,0 @@ --- CreateTable -CREATE TABLE "Cliente" ( - "id" BIGSERIAL NOT NULL, - "created_at" TIMESTAMP(3) NOT NULL DEFAULT (now() AT TIME ZONE 'utc'), - "updated_at" TIMESTAMP(3) NOT NULL DEFAULT (now() AT TIME ZONE 'utc'), - "name" TEXT NOT NULL, - "cedula" BIGINT NOT NULL, - "ubicacion" TEXT NOT NULL DEFAULT '.', - "grupo_estudio" TEXT, - "empleado" BOOLEAN NOT NULL DEFAULT false, - "avatar_url" TEXT, - "telefono" TEXT, - "idciat" TEXT, - - CONSTRAINT "Cliente_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "Planilla" ( - "id" BIGSERIAL NOT NULL, - "created_at" TIMESTAMP(3) NOT NULL DEFAULT (now() AT TIME ZONE 'utc'), - "updated_at" TIMESTAMP(3) NOT NULL DEFAULT (now() AT TIME ZONE 'utc'), - "fecha_desde" TIMESTAMP(3) NOT NULL, - "fecha_hasta" TIMESTAMP(3) NOT NULL, - "titulo" TEXT NOT NULL, - "total" DECIMAL(65,30), - "estado" TEXT NOT NULL DEFAULT 'pagado', - "fecha_anulado" TIMESTAMP(3), - "empleado_id" BIGINT NOT NULL, - "creador_id" UUID, - "anulador_id" UUID, - - CONSTRAINT "Planilla_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "TareaRealizada" ( - "id" BIGSERIAL NOT NULL, - "empleado_id" BIGINT NOT NULL, - "planilla_id" BIGINT, - "titulo" TEXT NOT NULL, - "precio" DOUBLE PRECISION, - "estado" TEXT NOT NULL DEFAULT 'pendiente', - "observacion" TEXT, - "fecha" TIMESTAMP(3) NOT NULL, - "created_at" TIMESTAMP(3) NOT NULL DEFAULT (now() AT TIME ZONE 'utc'), - "tipo" TEXT NOT NULL DEFAULT '', - "fecha_anulado" TIMESTAMP(3), - "creador_id" UUID NOT NULL, - "anulador_id" UUID, - - CONSTRAINT "TareaRealizada_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "Asistencia" ( - "id" BIGSERIAL NOT NULL, - "created_at" TIMESTAMP(3) NOT NULL DEFAULT (now() AT TIME ZONE 'utc'), - "updated_at" TIMESTAMP(3) NOT NULL DEFAULT (now() AT TIME ZONE 'utc'), - "entrada" TIMESTAMP(3) DEFAULT (now() AT TIME ZONE 'utc'), - "salida" TIMESTAMP(3), - "historial" JSONB, - "observacion" TEXT, - "estado" TEXT DEFAULT 'pendiente', - "fecha_anulado" TIMESTAMP(3), - "empleado_id" BIGINT NOT NULL, - "creador_id" UUID NOT NULL, - "modificado_id" UUID, - "anulador_id" UUID, - - CONSTRAINT "Asistencia_pkey" PRIMARY KEY ("id") -); - --- CreateIndex -CREATE UNIQUE INDEX "Cliente_cedula_key" ON "Cliente"("cedula"); - --- AddForeignKey -ALTER TABLE "Planilla" ADD CONSTRAINT "Planilla_empleado_id_fkey" FOREIGN KEY ("empleado_id") REFERENCES "Cliente"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "TareaRealizada" ADD CONSTRAINT "TareaRealizada_empleado_id_fkey" FOREIGN KEY ("empleado_id") REFERENCES "Cliente"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "Asistencia" ADD CONSTRAINT "Asistencia_empleado_id_fkey" FOREIGN KEY ("empleado_id") REFERENCES "Cliente"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/api/prisma/migrations/20250530222717_init/migration.sql b/api/prisma/migrations/20250530222717_init/migration.sql deleted file mode 100644 index f6c8cd5..0000000 --- a/api/prisma/migrations/20250530222717_init/migration.sql +++ /dev/null @@ -1,18 +0,0 @@ --- AlterTable -ALTER TABLE "Asistencia" ALTER COLUMN "created_at" SET DEFAULT (now() AT TIME ZONE 'utc'), -ALTER COLUMN "updated_at" SET DEFAULT (now() AT TIME ZONE 'utc'), -ALTER COLUMN "entrada" SET DEFAULT (now() AT TIME ZONE 'utc'); - --- AlterTable -ALTER TABLE "Cliente" ALTER COLUMN "created_at" SET DEFAULT (now() AT TIME ZONE 'utc'), -ALTER COLUMN "updated_at" SET DEFAULT (now() AT TIME ZONE 'utc'); - --- AlterTable -ALTER TABLE "Planilla" ALTER COLUMN "created_at" SET DEFAULT (now() AT TIME ZONE 'utc'), -ALTER COLUMN "updated_at" SET DEFAULT (now() AT TIME ZONE 'utc'); - --- AlterTable -ALTER TABLE "TareaRealizada" ALTER COLUMN "created_at" SET DEFAULT (now() AT TIME ZONE 'utc'); - --- AddForeignKey -ALTER TABLE "TareaRealizada" ADD CONSTRAINT "TareaRealizada_planilla_id_fkey" FOREIGN KEY ("planilla_id") REFERENCES "Planilla"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/api/prisma/migrations/migration_lock.toml b/api/prisma/migrations/migration_lock.toml deleted file mode 100644 index 044d57c..0000000 --- a/api/prisma/migrations/migration_lock.toml +++ /dev/null @@ -1,3 +0,0 @@ -# Please do not edit this file manually -# It should be added in your version-control system (e.g., Git) -provider = "postgresql" diff --git a/api/server.js b/api/server.js index cbef05c..3ecfc54 100644 --- a/api/server.js +++ b/api/server.js @@ -1,6 +1,5 @@ import express from 'express'; -import { PrismaClient } from './prisma/generated/client/index.js'; -import { Decimal } from '@prisma/client/runtime/library.js'; +import { PrismaClient } from '@empresa/prisma-schema/client'; import cors from 'cors'; // Import new routers @@ -16,7 +15,6 @@ import planillasRouter from './routes/planillas/planillas.js'; // Resto del código BigInt.prototype.toJSON = function () { return this.toString(); }; -Decimal.prototype.toJSON = function () { return this.toString(); }; const prisma = new PrismaClient(); export const app = express(); diff --git a/core/prisma/client.ts b/core/prisma/client.ts new file mode 100644 index 0000000..5331bfe --- /dev/null +++ b/core/prisma/client.ts @@ -0,0 +1,2 @@ +// This file exports the PrismaClient instance for use in Node.js environments (specifically the API). +export { PrismaClient } from './generated/client'; diff --git a/core/prisma/index.ts b/core/prisma/index.ts new file mode 100644 index 0000000..606e800 --- /dev/null +++ b/core/prisma/index.ts @@ -0,0 +1,7 @@ +// This file serves as the entry point for the @empresa/prisma-schema package. +// It re-exports only the generated types by default. +// For PrismaClient instance, import from '@empresa/prisma-schema/client'. + +export * from './generated/client/index-browser'; // Exports types for browser/non-Node.js environments +// If you need all types including Node.js specific ones (less common for shared types): +// export * from './generated/client'; diff --git a/core/prisma/package.json b/core/prisma/package.json new file mode 100644 index 0000000..95837a6 --- /dev/null +++ b/core/prisma/package.json @@ -0,0 +1,27 @@ +{ + "name": "@empresa/prisma-schema", + "version": "1.0.0", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + }, + "./client": { + "types": "./dist/client.d.ts", + "default": "./dist/client.js" + } + }, + "scripts": { + "db:generate": "prisma generate", + "prisma:migrate:dev": "prisma migrate dev", + "prisma:deploy": "prisma migrate deploy" + }, + "devDependencies": { + "prisma": "^5.10.2" + }, + "dependencies": { + "@prisma/client": "^5.10.2" + } +} diff --git a/api/prisma/schema.prisma b/core/prisma/schema.prisma similarity index 98% rename from api/prisma/schema.prisma rename to core/prisma/schema.prisma index 3d1f0e6..995370c 100644 --- a/api/prisma/schema.prisma +++ b/core/prisma/schema.prisma @@ -1,6 +1,6 @@ generator client { provider = "prisma-client-js" - output = "generated/client" + output = "./generated/client" } datasource db { diff --git a/core/prisma/tsconfig.json b/core/prisma/tsconfig.json new file mode 100644 index 0000000..d5408bf --- /dev/null +++ b/core/prisma/tsconfig.json @@ -0,0 +1,26 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "target": "es2017", + "module": "commonjs", + "moduleResolution": "node", + "outDir": "dist", + "declaration": true, + "emitDeclarationOnly": true, + "declarationDir": "dist", + // Overriding base to be specific for this package + "baseUrl": ".", + "paths": {} // Clear paths from base, not needed here + }, + "include": ["./schema.prisma", "./generated/client", "index.ts", "client.ts"], + "exclude": [ + "node_modules", + "dist", + ".next", + ".turbo", + "coverage", + "build", + "prisma/seed.ts" + ] +} diff --git a/mcp/jsconfig.json b/mcp/jsconfig.json new file mode 100644 index 0000000..aa97f2c --- /dev/null +++ b/mcp/jsconfig.json @@ -0,0 +1,14 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "checkJs": false, + "resolveJsonModule": true, + "moduleResolution": "node", + "target": "esnext", // Or appropriate target for your Node.js version + "module": "esnext", // Since package.json has "type": "module" + // Paths are inherited from tsconfig.base.json + "baseUrl": "." // baseUrl is still needed if there are other local paths + }, + "include": ["**/*.js"], + "exclude": ["node_modules"] +} diff --git a/mcp/package.json b/mcp/package.json index 5c5221f..eee4861 100644 --- a/mcp/package.json +++ b/mcp/package.json @@ -6,6 +6,7 @@ "start": "node index.js" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.0.0" + "@modelcontextprotocol/sdk": "^1.0.0", + "@empresa/prisma-schema": "1.0.0" } } diff --git a/package.json b/package.json new file mode 100644 index 0000000..e00022a --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "empresa-monorepo", + "version": "1.0.0", + "private": true, + "workspaces": [ + "agent", + "api", + "core/prisma", + "mcp", + "ui", + "worker" + ], + "scripts": { + "db:generate": "npm run db:generate --workspace=@empresa/prisma-schema", + "prisma:migrate:dev": "npm run prisma:migrate:dev --workspace=@empresa/prisma-schema", + "prisma:deploy": "npm run prisma:deploy --workspace=@empresa/prisma-schema" + } +} diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..0a8da5a --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@empresa/prisma-schema": ["core/prisma/index.ts"], // Points to the main entry for types + "@empresa/prisma-schema/client": ["core/prisma/client.ts"] // Points to the client entry + }, + // Common options + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "strict": true + } +} diff --git a/ui/package.json b/ui/package.json index 703e76b..de316f7 100644 --- a/ui/package.json +++ b/ui/package.json @@ -13,7 +13,8 @@ "axios": "^1.9.0", "pinia": "^3.0.2", "vue": "^3.5.13", - "vue-router": "^4.5.1" + "vue-router": "^4.5.1", + "@empresa/prisma-schema": "1.0.0" }, "devDependencies": { "@vitejs/plugin-vue": "^5.2.2", diff --git a/ui/src/components/empleados/cardEmpleado.vue b/ui/src/components/empleados/cardEmpleado.vue index 9011c93..7cec4a0 100644 --- a/ui/src/components/empleados/cardEmpleado.vue +++ b/ui/src/components/empleados/cardEmpleado.vue @@ -43,20 +43,7 @@