Simplify and accelerate CRUD service development in your NestJS applications using Prisma with nest-prisma-crud-kit
. This package leverages object-oriented principles, including inheritance and abstractions, to minimize boilerplate code and enhance maintainability.
- Rapid CRUD Development: Drastically reduce the time spent creating standard CRUD services. ⏱️
-
Base Abstraction: Provides
BasePrismaCrudService
andBasePrismaCrudWithFileService
abstract classes for reusable CRUD logic. 🏗️ - Extensibility: Easily extend base classes to add custom functionality, like file handling. 📂
- Built-in Pagination: Includes robust pagination support for efficient data retrieval. 📄
- Standardized DTOs: Provides base DTOs and interfaces for consistent data handling. 📝
- Flexible Sorting: Allows customization of sort order for query results. 🔄
npm i @big_blue_dragon/nest-prisma-crud-kit
Before using nest-prisma-crud-kit
, ensure you have Prisma configured in your NestJS project. If not, follow these steps:
-
Install Prisma CLI and Client:
npm i -D prisma npm install @prisma/client
-
Initialize Prisma:
npx prisma init
- Inject model in to Module:
import { Module } from '@nestjs/common';
import { PrismaModule } from 'src/prisma/prisma.module';
import { BasePrismaCrudService } from 'src/shared/classes/BasePrismaCrudService';
import { UserService } from './user.service';
@Module({
providers: [
// inject model name here
{
provide: 'model',
useValue: 'user',
},
BasePrismaCrudService,
// Rest of your code
],
imports: [PrismaModule],
exports: [UserService],
controllers: [UserController],
})
export class UserModule {}
-
Create a Service:
import { Injectable } from '@nestjs/common'; import { PrismaService } from 'src/prisma/prisma.service'; import { BasePrismaCrudService } from 'nest-prisma-crud-kit'; import { User, UserCreateDto, UserUpdateDto, UserFindManyDto, UserFindOneDto, UserDeleteDto, } from './user.dto'; @Injectable() export class UserService extends BasePrismaCrudService< User, UserCreateDto, UserFindManyDto, UserFindOneDto, UserDeleteDto, UserUpdateDto > { constructor(protected prisma: PrismaService) { super(prisma, 'user'); // 'user' is the Prisma model name } }
-
Create DTOs (e.g.,
user.dto.ts
):import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; import { IsString, IsOptional, IsNumber } from 'class-validator'; import { FindManyDto } from 'nest-prisma-crud-kit'; export class User { id: string; name: string; email: string; } // ... (UserCreateDto, UserUpdateDto, UserFindOneDto, UserDeleteDto, UserFindManyDto)
-
Using the Service in a Controller:
import { Controller, Get, Post, Body, Param, Put, Delete, Query, } from '@nestjs/common'; import { UserService } from './user.service'; import { UserCreateDto, UserUpdateDto, UserFindManyDto, UserFindOneDto, UserDeleteDto, } from './user.dto'; import { PaginationDto } from 'nest-prisma-crud-kit'; @Controller('users') export class UserController { constructor(private readonly userService: UserService) {} @Post() create(@Body() createUserDto: UserCreateDto) { return this.userService.create(createUserDto); } @Get() async findAll( @Query() query: UserFindManyDto, ): Promise<PaginationDto<any>> { // ... (Pagination logic) } @Get(':id') findOne(@Param('id') id: string) { return this.userService.findOne({ id }); } @Put(':id') update(@Param('id') id: string, @Body() updateUserDto: UserUpdateDto) { return this.userService.update({ where: { id }, data: updateUserDto }); } @Delete(':id') remove(@Param('id') id: string) { return this.userService.delete({ id }); } }
Contributions are welcome! Please feel free to submit pull requests or open issues to improve this package.