정화 코딩

[Node.js] NestJS와 Prisma 연결 + semester의 module, repository 파일 생성 본문

Web Development

[Node.js] NestJS와 Prisma 연결 + semester의 module, repository 파일 생성

jungh150c 2024. 10. 14. 22:58

원래의 prisma 폴더 가져오기

admin-backend/
├── src/
│   ├── prisma/
│   │   ├── schema.prisma
│   │   └── ...
│   ├── semester/
│   ├── .env
│   ├── app.module.ts
│   ├── main.ts
├── test/
├── .gitignore
├── package.json
└── ...

나는 기존에 NestJS가 아닌 Express로 Prisma를 사용했었다. 그래서 기존의 prisma 폴더를 그대로 가져와 새롭게 만든 폴더 admin-backend 아래 src 폴더 아래에 넣어주었다. (.env도 일단 그대로 복사했다.)

prisma 관련 필요한 패키지 설치

...icpc-sinchon-workspace\apps\admin-backend> pnpm install prisma --save-dev
...icpc-sinchon-workspace\apps\admin-backend> pnpm install @prisma/client
...icpc-sinchon-workspace\apps\admin-backend> pnpm install prisma-markdown
...icpc-sinchon-workspace\apps\admin-backend> npx prisma generate

prisma.service.ts 파일과 prisma.module.ts 파일 생성

// /src/prisma/prisma.service.ts

import { Injectable, OnModuleInit } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';

@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit {
  async onModuleInit() {
    await this.$connect();
  }
}
// /src/prisma/prisma.module.ts

import { Module } from '@nestjs/common';
import { PrismaService } from './prisma.service';

@Module({
  providers: [PrismaService],
  exports: [PrismaService],
})
export class PrismaModule {}

semester.repository.ts 파일과 semester.module.ts 파일 생성

// src/semester/semester.repository.ts

import { Injectable } from '@nestjs/common';
import type { Prisma, Semester } from "@prisma/client";
import type { PrismaService } from "src/prisma/prisma.service";

@Injectable()
export class SemesterRepository {
  constructor(private prisma: PrismaService) {}

  async createSemester(params: {
    data: Prisma.SemesterCreateInput;
  }): Promise<Semester> {
    const { data } = params;
    return this.prisma.semester.create({ data });
  }

  async getSemesters(): Promise<Semester[]> {
    return this.prisma.semester.findMany();
  }

  async updateSemester(params: {
    where: Prisma.SemesterWhereUniqueInput;
    data: Prisma.SemesterUpdateInput;
  }): Promise<Semester> {
    const { where, data } = params;
    return this.prisma.semester.update({ where, data });
  }

  async deleteSemester(params: {
    where: Prisma.SemesterWhereUniqueInput;
  }): Promise<Semester> {
    const { where } = params;
    return this.prisma.semester.delete({ where });
  }
}
# module 파일 생성 명령어
...apps\admin-backend> nest g module semester
// src/semester/semester.module.ts

import { Module } from '@nestjs/common';
import { PrismaModule } from 'src/prisma/prisma.module';
import { SemesterRepository } from './semester.repository';

@Module({
  imports: [PrismaModule],
  providers: [SemesterRepository],
 })
export class SemesterModule {}

 

[참고]

https://www.tomray.dev/nestjs-prisma

https://docs.nestjs.com/recipes/prisma

 

Comments