@un-dev-suisse/nestjs-prisma
v1.0.4
Published
NestJS Prisma Service - A simple prisma service for NestJS applications
Maintainers
Readme
@un-dev-suisse/nestjs-prisma
Un service Prisma simple et robuste pour les applications NestJS.
Installation
npm install @un-dev-suisse/nestjs-prismaConfiguration
1. Créer un schéma Prisma
Créez un fichier schema.prisma dans votre projet :
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite" // ou postgresql, mysql, etc.
url = "file:./dev.db"
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}2. Générer le client Prisma
npx prisma generate3. Importer le module
import { Module } from '@nestjs/common';
import { PrismaModule } from '@un-dev-suisse/nestjs-prisma';
@Module({
imports: [PrismaModule],
})
export class AppModule {}Utilisation
Injection du service
import { Injectable } from '@nestjs/common';
import { PrismaService } from '@un-dev-suisse/nestjs-prisma';
@Injectable()
export class UserService {
constructor(private readonly prisma: PrismaService) {}
async findAll() {
return this.prisma.user.findMany();
}
async create(data: { email: string; name?: string }) {
return this.prisma.user.create({
data,
});
}
}Accès statique (optionnel)
import { PrismaService } from '@un-dev-suisse/nestjs-prisma';
// Accès statique au service (après injection)
const user = await PrismaService.prisma.user.findMany();Fonctionnalités
- ✅ Gestion automatique des connexions : Connexion à l'initialisation, déconnexion à la destruction
- ✅ Pattern Singleton : Instance unique partagée
- ✅ Accès statique : Possibilité d'accéder au service sans injection
- ✅ TypeScript : Support complet des types Prisma
- ✅ NestJS : Intégration native avec le système de modules
Gestion du cycle de vie
Le service gère automatiquement :
- Connexion : Se connecte à la base de données au démarrage du module
- Déconnexion : Se déconnecte proprement à l'arrêt de l'application
Exemple complet
import { Module } from '@nestjs/common';
import { PrismaModule } from '@un-dev-suisse/nestjs-prisma';
@Module({
imports: [PrismaModule],
providers: [UserService],
controllers: [UserController],
})
export class AppModule {}
// Service utilisant Prisma
@Injectable()
export class UserService {
constructor(private readonly prisma: PrismaService) {}
async findAll() {
return this.prisma.user.findMany();
}
async findOne(id: number) {
return this.prisma.user.findUnique({
where: { id },
});
}
async create(data: { email: string; name?: string }) {
return this.prisma.user.create({
data,
});
}
async update(id: number, data: { email?: string; name?: string }) {
return this.prisma.user.update({
where: { id },
data,
});
}
async remove(id: number) {
return this.prisma.user.delete({
where: { id },
});
}
}Dépendances
@nestjs/common: Framework NestJS@prisma/client: Client Prismaprisma: CLI Prisma
Licence
MIT
