{"_id":"@camtom-backend/contracts","name":"@camtom-backend/contracts","dist-tags":{"latest":"0.0.1"},"versions":{"0.0.1":{"name":"@camtom-backend/contracts","version":"0.0.1","private":false,"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"description":"Shared Prisma schema and Zod types for Camtom","main":"dist/index.js","exports":{"./client":"./dist/generated/prisma/client/index.js","./schemas":"./dist/generated/schemas/index.js","./schemas/models":"./dist/generated/schemas/modelSchema/index.js","./schemas/inputs":"./dist/generated/schemas/inputTypeSchemas/index.js","./schemas/outputs":"./dist/generated/schemas/outputTypeSchemas/index.js","./schemas/enums":"./dist/generated/schemas/inputTypeSchemas/index.js"},"typesVersions":{"*":{"client":["dist/generated/prisma/client/index.d.ts"],"schemas":["dist/generated/schemas/index.d.ts"],"schemas/models":["dist/generated/schemas/modelSchema/index.d.ts"],"schemas/inputs":["dist/generated/schemas/inputTypeSchemas/index.d.ts"],"schemas/outputs":["dist/generated/schemas/outputTypeSchemas/index.d.ts"],"schemas/enums":["dist/generated/schemas/inputTypeSchemas/index.d.ts"]}},"scripts":{"build":"npx prisma generate && tsc && mkdir -p dist/generated/prisma/client && cp -R src/generated/prisma/client/* dist/generated/prisma/client/"},"keywords":[],"author":"","license":"ISC","dependencies":{"@prisma/client":"^6.2.1","zod":"^3.24.2"},"devDependencies":{"@types/node":"^22.10.7","prisma":"^6.2.1","typescript":"^5.7.3","zod-prisma-types":"^3.2.1"},"_id":"@camtom-backend/contracts@0.0.1","_nodeVersion":"24.9.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-Jkn6kqEilL0kx0sGZ4eU1ELGHPTkU6WP5mBS6dlep+JKnk7TBV3uBybEPNB/qa97XIHzpt43Kz5WRy6yo+CAVw==","shasum":"08bec4921123428a2a2afce27914d9128d40821e","tarball":"https://registry.npmjs.org/@camtom-backend/contracts/-/contracts-0.0.1.tgz","fileCount":328,"unpackedSize":21093650,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDxJMEwn3PtHVIQifvUFrgDGQaOqp0ajx0Xq0AqwHZ1JwIhAIg2zes6igFHfjRb31jGyudm2HxIJ61JAA34bUTWAWCB"}]},"_npmUser":{"name":"tacosyhorchata","email":"priosabarca@hotmail.com"},"directories":{},"maintainers":[{"name":"tacosyhorchata","email":"priosabarca@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/contracts_0.0.1_1769481442892_0.5915637591350404"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-27T02:37:22.799Z","0.0.1":"2026-01-27T02:37:23.372Z","modified":"2026-01-27T02:37:23.579Z"},"maintainers":[{"name":"tacosyhorchata","email":"priosabarca@hotmail.com"}],"description":"Shared Prisma schema and Zod types for Camtom","keywords":[],"license":"ISC","readme":"# @camtom-backend/contracts - Guía de Uso e Integración\n\nEste paquete actúa como la **única fuente de verdad** para la definición de datos en el ecosistema Camtom. Contiene el esquema de la base de datos (Prisma), el cliente de base de datos generado y los esquemas de validación (Zod) compartidos entre el Backend y el Frontend.\n\n## 📦 1. Despliegue y Publicación\n\n### Estructura del Paquete\nEl paquete utiliza \"Subpath Exports\" para separar claramente las dependencias del servidor (Prisma Client) de las del cliente (Zod Schemas), evitando que código pesado de servidor llegue al bundle del frontend.\n\n- `@camtom-backend/contracts/prisma/client`: Cliente de Base de Datos (Solo Backend).\n- `@camtom-backend/contracts/schemas/*`: Esquemas de Validación (Backend y Frontend).\n\n### Comandos de Construcción\nAntes de desplegar o publicar, es necesario generar los artefactos:\n\n```bash\n# Dentro de packages/contracts-system\nnpm install\nnpm run build\n```\n\nEste comando ejecuta internamente:\n1.  `prisma generate`: Genera el Prisma Client y los Zod Schemas basados en `prisma/schema.prisma`.\n2.  `tsc`: Compila el código TypeScript a JavaScript (ESM y CommonJS) en la carpeta `dist/`.\n3.  Copia de definiciones de tipos (`.d.ts`) para soportar intellisense.\n\n### Publicación\nSi utilizas un registro privado (ej. Verdaccio, AWS CodeArtifact, GitHub Packages) o npmjs org:\n\n1.  Asegúrate de incrementar la versión en `package.json`.\n2.  Ejecuta:\n    ```bash\n    npm publish --access restricted\n    ```\n\n**Nota sobre Monorepo:** Si estás trabajando localmente en el monorepo, asegúrate de que los `package.json` de `dev_nodejs` y `dev_front` apunten a la versión correcta o usen workspaces (`\"file:../../packages/contracts-system\"` o la versión definida en el workspace root).\n\n---\n\n## 🖥️ 2. Uso en Backend (Node.js / FastAPI)\n\n*Nota: Actualmente optimizado para Node.js/TypeScript. Para Python (FastAPI), se recomienda usar el cliente de Prisma para Python o mantener los modelos Pydantic sincronizados manualmente por ahora, aunque existen generadores de Pydantic para Prisma.*\n\n### Instalación\n```bash\nnpm install @camtom-backend/contracts\n```\n\n### Implementación (Patrón Singleton)\nEl paquete ya exporta una instancia optimizada de Prisma Client. No necesitas instanciar `PrismaClient` manualmente.\n\n**Ejemplo: Servicio de Lifeline**\n\n```typescript\n// dev_nodejs/src/modules/Lifeline/services/lifelinePrisma.service.ts\nimport { db } from '@camtom-backend/contracts/prisma/client'; // Importar la instancia DB\nimport { LifelineSchema } from '@camtom-backend/contracts/schemas/lifeline'; // Importar tipos/validación\n\nexport class LifelinePrismaService {\n  \n  async createLifeline(data: unknown) {\n    // 1. Validar datos (opcional si confías en el input, pero recomendado)\n    const validatedData = LifelineSchema.parse(data);\n\n    // 2. Usar Prisma Client directamente\n    const lifeline = await db.lifeline.create({\n      data: {\n        ...validatedData,\n        // Manejo de fechas u otros campos específicos\n        createdAt: new Date(),\n      }\n    });\n\n    return lifeline;\n  }\n\n  async getLifeline(id: string) {\n    return await db.lifeline.findUnique({\n      where: { id }\n    });\n  }\n}\n```\n\n---\n\n## 🎨 3. Uso en Frontend (React)\n\nEl frontend solo debe importar los **esquemas**, nunca el cliente de base de datos.\n\n### Instalación\n```bash\nnpm install @camtom-backend/contracts\n```\n*Asegúrate de que `zod` también esté instalado como peer dependency si es necesario.*\n\n### Integración en Formularios (React Hook Form)\nUtiliza los esquemas generados para validar formularios automáticamente.\n\n**Ejemplo: Formulario de Creación**\n\n```tsx\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { LifelineSchema } from '@camtom-backend/contracts/schemas/lifeline';\nimport type { z } from 'zod';\n\n// Inferir el tipo TypeScript directamente del esquema\ntype LifelineFormValues = z.infer<typeof LifelineSchema>;\n\nexport const CreateLifelineForm = () => {\n  const { register, handleSubmit, formState: { errors } } = useForm<LifelineFormValues>({\n    // Conectar el validador Zod del paquete compartido\n    resolver: zodResolver(LifelineSchema), \n    defaultValues: {\n      status: 'DRAFT',\n      // ...\n    }\n  });\n\n  const onSubmit = (data: LifelineFormValues) => {\n    // 'data' ya está tipado y validado aquí\n    console.log(\"Enviando al backend:\", data);\n    // api.post('/lifelines', data);\n  };\n\n  return (\n    <form onSubmit={handleSubmit(onSubmit)}>\n      <input {...register(\"referenceId\")} placeholder=\"Referencia\" />\n      {errors.referenceId && <span className=\"error\">{errors.referenceId.message}</span>}\n      \n      <button type=\"submit\">Guardar</button>\n    </form>\n  );\n};\n```\n\n---\n\n## 🛡️ 4. Buenas Prácticas y Flujo de Trabajo\n\n### Flujo de Desarrollo (Haciendo cambios en la BD)\n1.  **Editar:** Modifica `packages/contracts-system/prisma/schema.prisma`.\n2.  **Validar:** Ejecuta `npx prisma validate` para asegurar que el esquema es correcto.\n3.  **Generar:** Ejecuta `npm run build` en la carpeta del paquete. Esto actualiza:\n    *   Los tipos de TypeScript.\n    *   El Cliente de Prisma.\n    *   Los Esquemas Zod.\n4.  **Consumir:** Reinicia los servidores de desarrollo (Node/React) para que tomen los nuevos tipos.\n\n### Control de Versiones (Versioning)\n*   Usa **Versionado Semántico (SemVer)**.\n*   Si cambias una columna obligatoria a opcional -> **Minor** change (compatible hacia atrás usualmente).\n*   Si eliminas una columna o la haces obligatoria -> **Major** change (Breaking change).\n*   Asegúrate de que Backend y Frontend usen versiones compatibles del paquete.\n\n### Tipado Estricto\nEvita crear interfaces manuales (`interface ILifeline { ... }`) en el frontend o backend. Siempre infiere los tipos desde el esquema Zod o los tipos de Prisma exportados.\n\n```typescript\n// ✅ CORRECTO\nimport type { Lifeline } from '@camtom-backend/contracts/prisma/client';\nimport { LifelineSchema } from '@camtom-backend/contracts/schemas/lifeline';\ntype LifelineInput = z.infer<typeof LifelineSchema>;\n\n// ❌ INCORRECTO\ninterface Lifeline {\n  id: string;\n  reference: string;\n  // ... duplicación manual propensa a errores\n}\n```\n\n### Solución de Problemas Comunes\n\n*   **Error: \"PrismaClient is unable to be run in the browser\"**:\n    *   Causa: Estás importando `@camtom-backend/contracts/prisma/client` en un archivo de React.\n    *   Solución: Asegúrate de importar solo desde `@camtom-backend/contracts/schemas/*` en el frontend.\n\n*   **Error de Tipos en VS Code**:\n    *   A veces VS Code no detecta los cambios en `node_modules`. Reinicia el servidor de TypeScript (Cmd+Shift+P -> \"TypeScript: Restart TS Server\").\n","readmeFilename":"README.md","_rev":"1-48cfceadf652454640fec31683b3668e"}