{"_id":"@alleen/prisma","_rev":"5-7da32e3f36f08189830b167328b18251","name":"@alleen/prisma","dist-tags":{"latest":"1.0.1"},"versions":{"0.1.0":{"name":"@alleen/prisma","version":"0.1.0","author":{"name":"OLIVIER ADOU"},"license":"ISC","_id":"@alleen/prisma@0.1.0","maintainers":[{"name":"olivieradou","email":"adouolivier@outlook.com"}],"dist":{"shasum":"5500ef8671c7a2f2c26a2375e3ade076caaac900","tarball":"https://registry.npmjs.org/@alleen/prisma/-/prisma-0.1.0.tgz","fileCount":34,"integrity":"sha512-6byIoYXa1hkp0Ly1zj8FJP4M4y59+k8YFyj8xXRUINJvA5GM3qaePWSJIlBtW6tbjO8YGze2b5b6S2xRvqtZag==","signatures":[{"sig":"MEUCIQCqKpF/O380lk55XHmi6y22uIEFrKqhBFne9eVFYTvenAIgDl/6pfSw4tMZB9A5bAeGMmfg0mUnMEkl0YiSTUeW3fY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29206},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"ts-node src/index.ts","build":"tsc"},"_npmUser":{"name":"olivieradou","email":"adouolivier@outlook.com"},"_npmVersion":"10.8.2","description":"Core NestJS module for alleen-api — dynamic multi-database Prisma registry","directories":{},"_nodeVersion":"18.20.8","dependencies":{"rxjs":"^7.8.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.4.0","@types/node":"^20.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.1.13"},"peerDependencies":{"@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/prisma_0.1.0_1775408507793_0.3402731903672307","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@alleen/prisma","version":"2.0.0","author":{"name":"OLIVIER ADOU"},"license":"ISC","_id":"@alleen/prisma@2.0.0","maintainers":[{"name":"olivieradou","email":"adouolivier@outlook.com"}],"dist":{"shasum":"3bc4a804788e284e3ab75d3106072047ec0efff9","tarball":"https://registry.npmjs.org/@alleen/prisma/-/prisma-2.0.0.tgz","fileCount":34,"integrity":"sha512-4Hm6/XFSI0s5TkPdlx1wzDkUMDgG1tqAfF7B22VgnP/mJi65jYABEWZP/d/nN0T0av6DFef83Ot/MhpKRL8Dig==","signatures":[{"sig":"MEYCIQDfBOvbyyM/FUJoSnA4DgtyN43izLCQzNlHF5cREsQuhwIhAJ+jDxS8xQuy8lzhI1mAjo2Mb1nFI83gsCdW7XCrYZS8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29206},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"8a797ba6f2de0f7024376f56a2de7f2bf28c031c","scripts":{"dev":"ts-node src/index.ts","build":"tsc"},"_npmUser":{"name":"olivieradou","email":"adouolivier@outlook.com"},"_npmVersion":"10.8.2","description":"Core NestJS module for alleen-api — dynamic multi-database Prisma registry","directories":{},"_nodeVersion":"18.20.8","dependencies":{"rxjs":"^7.8.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ts-node":"^10.9.2","typescript":"^5.4.0","@types/node":"^20.0.0","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.1.13"},"peerDependencies":{"@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.1.13"},"_npmOperationalInternal":{"tmp":"tmp/prisma_2.0.0_1775516235721_0.8543075348281446","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@alleen/prisma","version":"1.0.1","description":"Core NestJS module for alleen-api — dynamic multi-database Prisma registry","main":"./dist/index.js","types":"./dist/index.d.ts","publishConfig":{"access":"public"},"scripts":{"build":"tsc","dev":"ts-node src/index.ts"},"peerDependencies":{"@nestjs/common":"^10.0.0","@nestjs/core":"^10.0.0","reflect-metadata":"^0.1.13"},"devDependencies":{"@nestjs/common":"^10.0.0","@nestjs/core":"^10.0.0","@types/node":"^20.0.0","reflect-metadata":"^0.1.13","ts-node":"^10.9.2","typescript":"^5.4.0"},"engines":{"node":">=18.0.0"},"dependencies":{"rxjs":"^7.8.2"},"author":{"name":"OLIVIER ADOU"},"license":"ISC","_id":"@alleen/prisma@1.0.1","gitHead":"ccaa0585784198e1cf229391bf427e328398c6bb","_nodeVersion":"18.20.8","_npmVersion":"10.8.2","dist":{"integrity":"sha512-dMMnZze5kr7mjC5GBvxH91IJ8dW+C+IUVCA7S+x5t4cQ1ODJ9RWXFKdvjOIttinEInKf0FYqdbOmHyEyvQjMlw==","shasum":"f57f78d6b1545806757731d51747826db84d7be2","tarball":"https://registry.npmjs.org/@alleen/prisma/-/prisma-1.0.1.tgz","fileCount":34,"unpackedSize":29504,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDPoW4suFyvjzTRZCA/JVu6zaVMU7I51We8n1Bnl2uRNAiEA4L5mPiIhc9289VxNhTOqvjGQk30/N51W28FuQcqsGos="}]},"_npmUser":{"name":"olivieradou","email":"adouolivier@outlook.com"},"directories":{},"maintainers":[{"name":"olivieradou","email":"adouolivier@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/prisma_1.0.1_1775517359232_0.09743353485614437"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-05T17:01:47.676Z","modified":"2026-04-06T23:15:59.534Z","0.1.0":"2026-04-05T17:01:47.938Z","2.0.0":"2026-04-06T22:57:15.853Z","1.0.0":"2026-04-06T23:02:32.002Z","1.0.1":"2026-04-06T23:15:59.399Z"},"author":{"name":"OLIVIER ADOU"},"license":"ISC","description":"Core NestJS module for alleen-api — dynamic multi-database Prisma registry","maintainers":[{"name":"olivieradou","email":"adouolivier@outlook.com"}],"readme":"# @alleen/prisma\n\n> ⚠️ **Important**\n>\n> This package cannot function on its own.  \n> It is designed as a required dependency for **alleen** to work properly within a project.\n>\n> 👉 To correctly initialize a compatible project, use the official repository:  \n> https://github.com/olivierAdou/alleen-api.git\n\n\n> Base Prisma service for **alleen-api** — connection management, retry, health checks.  \n> Tous les services générés par `@alleen/cli` étendent automatiquement `BasePrismaService`.\n\n---\n\n## Installation\n\n```bash\nnpm install @alleen/prisma\n```\n\n---\n\n## Ce que ça remplace\n\nAvant `@alleen/prisma`, chaque service généré avait son propre code de connexion :\n\n```ts\n// ❌ Avant — dupliqué dans chaque service\nasync onModuleInit() { await this.$connect(); }\nasync onModuleDestroy() { await this.$disconnect(); }\n```\n\nAprès, le service généré fait juste :\n\n```ts\n// ✅ Après — 5 lignes, tout le reste est dans BasePrismaService\n@Injectable()\nexport class PhoenixPrismaService extends BasePrismaService {\n  constructor() {\n    super('phoenix');\n  }\n}\n```\n\n`BasePrismaService` gère en interne :\n- Connexion avec **retry automatique** (3 tentatives par défaut)\n- **Timeout** de connexion configurable\n- **Déconnexion propre** au shutdown\n- **Health check** `SELECT 1` par DB\n- **Logging structuré** par DB\n\n---\n\n## Setup dans `app.module.ts`\n\n```ts\nimport { AlleenPrismaModule }   from '@alleen/prisma';\nimport { PhoenixPrismaService } from './prisma/phoenix.service';\nimport { BulkPrismaService }    from './prisma/bulk.service';\n\n@Module({\n  imports: [\n    AlleenPrismaModule.forRoot({\n      services: [PhoenixPrismaService, BulkPrismaService],\n      globalOptions: {\n        retryAttempts:     5,\n        retryDelay:        2000,\n        connectionTimeout: 15000,\n        verbose:           false,\n      },\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n---\n\n## Injection avec `@InjectDb`\n\nPour injecter une DB spécifique dans n'importe quel service :\n\n```ts\nimport { Injectable }      from '@nestjs/common';\nimport { InjectDb, BasePrismaService } from '@alleen/prisma';\n\n@Injectable()\nexport class OrderService {\n  constructor(\n    @InjectDb('phoenix') private readonly db: BasePrismaService\n  ) {}\n\n  async getOrders() {\n    return this.db.order.findMany({ where: { status: 'ACTIVE' } });\n  }\n}\n```\n\n---\n\n## Health checks\n\n```ts\nimport { PrismaHealthService } from '@alleen/prisma';\n\n@Controller('health')\nexport class HealthController {\n  constructor(private readonly health: PrismaHealthService) {}\n\n  @Get()\n  async check() {\n    return this.health.checkAll();\n  }\n}\n```\n\n**Réponse :**\n```json\n{\n  \"overall\": \"healthy\",\n  \"databases\": [\n    { \"database\": \"phoenix\", \"status\": \"up\", \"latency\": 4, \"checkedAt\": \"...\" },\n    { \"database\": \"bulk\",    \"status\": \"up\", \"latency\": 6, \"checkedAt\": \"...\" }\n  ],\n  \"checkedAt\": \"2026-04-05T10:00:00.000Z\"\n}\n```\n\n`overall` vaut `\"healthy\"`, `\"degraded\"` (certaines DBs down), ou `\"down\"` (toutes down).\n\n---\n\n## Options de connexion\n\n| Option | Type | Default | Description |\n|---|---|---|---|\n| `retryAttempts` | `number` | `3` | Tentatives avant d'abandonner |\n| `retryDelay` | `number` | `3000` | Délai entre tentatives (ms) |\n| `connectionTimeout` | `number` | `10000` | Timeout de connexion (ms) |\n| `verbose` | `boolean` | `false` | Logs Prisma détaillés |\n\n---\n\n## License\n\nMIT © olivier adou","readmeFilename":"README.md"}