@nestjs-crud/prisma
v2.1.1
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
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 — current state for Prisma (consumer-owned)
- v2 Migration guide
