@nestjs-crud/prisma
v2.3.0
Published
NestJs CRUD for RESTful APIs - Prisma ORM
Maintainers
Readme
New in v2.0.0. The API follows the same patterns as TypeORM. See the Prisma service docs for full Prisma adapter API.
Install
Requires Node.js 22.12.0 or later — NestJS 12 ships as ESM only, and this package is CommonJS; it loads NestJS 12 through Node's require(esm) support, which arrives at 22.12.0.
npm i @nestjs-crud/prisma @prisma/client
npm i -D prismaUsage
Assume you have a Prisma model in your schema.prisma:
model Company {
id Int @id @default(autoincrement())
name String
}Run npx prisma generate, expose a PrismaClient provider, then create a service. Unlike TypeORM/MikroORM, Prisma generated types are not classes, so PrismaCrudService requires an explicit column manifest plus a PrismaJoinResolver for relation fields:
import { BadRequestException, Inject, Injectable } from '@nestjs/common';
import { PrismaCrudService, PrismaJoinResolver } from '@nestjs-crud/prisma';
import type { Company, PrismaClient } from '@prisma/client';
@Injectable()
export class CompaniesService extends PrismaCrudService<Company> {
constructor(@Inject('PRISMA_CLIENT') prisma: PrismaClient) {
super(prisma, 'company', {
entityColumns: ['id', 'name'],
entityPrimaryColumns: ['id'],
entityHasDeleteColumn: false,
softDeleteColumn: null,
onBadRequest: (msg) => {
throw new BadRequestException(msg);
},
joinResolver: new PrismaJoinResolver({
relationFields: [],
allowedColumnsByRelation: {},
}),
});
}
}Then provide your service in a controller:
import { Controller } from '@nestjs/common';
import { Crud } from '@nestjs-crud/core';
import { CompaniesService } from './companies.service';
class CompanyModel {
id!: number;
name!: string;
}
@Crud({
model: { type: CompanyModel },
})
@Controller('companies')
export class CompaniesController {
constructor(public service: CompaniesService) {}
}See also
- Wiki: ServicePrisma — full Prisma adapter API
- Wiki: Logging — optional
LoggerServiceonserviceConfig.logger(v2.0.0); defaults tonew Logger(PrismaCrudService.name)when omitted - Wiki: Caching —
@Crud({ query: { cache } })honored viaPrismaRedisCacheStrategyorPrismaAccelerateCacheStrategy(v2.2.0+) - v2 Migration guide
