cleanUrl: /기본-사용-권한-시스템
floatFirstTOC: right

관리자 승인 기능 구현하기

이제 사용자가 제출한 보고서를 관리자가 승인하거나 거부하는 기능을 구현해보자.

기능에 대한 요구사항은 다음과 같다.

먼저 보고서의 승인 상태를 나타낼 수 있도록 report.entity.ts 파일에 다음과 같은 속성을 추가한다.

@Column({ default: false })
approved: boolean;

@Column({ default: false })설정을 통해 보고서가 생성될 때 approved 값은 자동으로 false가 된다.

이제 보고서의 승인 여부를 전달받을 DTO를 만든다.

// dtos/approve-report.dto.ts

import { IsBoolean } from 'class-validator';

export class ApproveReportDto {
  @IsBoolean()
  approved: boolean;
}

@IsBoolean 데코레이터는 클라이언트로부터 받은 approved 값이 true/false인지 검증한다.

이후 컨트롤러에 PATCH 라우터를 추가하여 특정 보고서를 승인하거나 승인 취소할 수 있도록 한다.

이때 @Param으로 URL의 ID 파라미터를 가져오고, @Body로 클라이언트가 보낸 본문 데이터를 가져온다.

// reports.controller.ts

import { Patch, Param, Body } from '@nestjs/common';
import { ApproveReportDto } from './dtos/approve-report.dto';

@Patch('/:id')
approveReport(@Param('id') id: string, @Body() body: ApproveReportDto) {
	return this.reportsService.changeApproval(id, body.approved);
}