정화 코딩

[Node.js] NestJS에서 semester의 service 파일 생성 본문

Web Development

[Node.js] NestJS에서 semester의 service 파일 생성

jungh150c 2024. 11. 7. 03:23

semester.controller.ts 파일과 semester.service.ts 파일 생성

# controller 파일 생성 명령어
...apps\admin-backend> nest g controller semester --no-spec
// src/semester/semester.controller.ts

import { Controller } from '@nestjs/common';

@Controller('semester')
export class SemesterController {}

위의 명령어로 파일을 생성했을 때 기본적으로 들어있는 내용이다.

# service 파일 생성 명령어
...apps\admin-backend> nest g service semester --no-spec
// src/semester/semester.service.ts

import { Injectable } from '@nestjs/common';

@Injectable()
export class SemesterService {}

위의 명령어로 파일을 생성했을 때 기본적으로 들어있는 내용이다.

// src/semester/semester.module.ts

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

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

자동으로 SemesterController, SemesterService를 import하는 부분이 추가되고 providers와 controllers에 추가된 것을 확인할 수 있다. 

// src/app.module.ts

import { Module } from '@nestjs/common';
import { SemesterModule } from './semester/semester.module';

@Module({
  imports: [SemesterModule]
})
export class AppModule {}

app.module.ts에서 SemesterModule을 import 해준다.

semester.repository.ts 파일에 CRUD 함수 작성

// 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 getSemester(params: {
    where: Prisma.SemesterWhereUniqueInput;
  }): Promise<Semester> {
    const { where } = params;
    return this.prisma.semester.findUnique({ where });
  }

  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 });
  }
}

semester.service.ts 파일에 CRUD 함수 작성

// src/semester/semester.service.ts

import { Injectable } from '@nestjs/common';
import type { Prisma, Semester } from "@prisma/client";
import type { SemesterRepository } from "./semester.repository";

@Injectable()
export class SemesterService {
  constructor(private semesterRepository: SemesterRepository) {}

  async createSemester(params: { data: Prisma.SemesterCreateInput }) {
    const { data } = params;
    const semester = await this.semesterRepository.createSemester({ data });
    return semester;
  }

  async getSemesters(): Promise<Semester[]> {
    const semesters = await this.semesterRepository.getSemesters();
    return semesters;
  }

  async getSemesterById(params: { id: number }): Promise<Semester | null> {
    const { id } = params;
    const semester = await this.semesterRepository.getSemester({
      where: { id },
    });
    return semester;
  }

  async updateSemester(params: { where: Prisma.SemesterWhereUniqueInput; data: Prisma.SemesterUpdateInput }) {
    const { where, data } = params;
    const semester = await this.semesterRepository.updateSemester({
      where,
      data,
    });
    return semester;
  }

  async deleteSemester(params: { where: Prisma.SemesterWhereUniqueInput }) {
    const { where } = params;
    const semester = await this.semesterRepository.deleteSemester({ where });
    return semester;
  }
}

 

Comments