소스 코드

[리포지 링크]

들어가기 전에

이번 장에서는 앞에서 직접 개발했던 Backend API에 Delete 기능과 최소한의 예외처리를 해보겠다.

1. Backend API 스펙 확인

아래와 같이 추가하고 싶은 API의 스펙을 작성한다

URL HTTP 메서드 설명
/landingPage DELETE params로 넘어온 클래스 고유번호와 유저 고유번호로 해당 유저의 데이터를 제거한다

2. 리포지토리에 인터페이스와 함수 추가

순서 3. 리포지토리(landingPage.repository.ts)에 인터페이스를 정의하고, 몽고DB를 다룰 함수를 정의한다.

// landingPage.repository.ts

... 생략 ...

export interface LandingPageRepository {
	... 생략 ...
    
    // 리포지토리 인터페이스에 추가
    deletePost(userNum: number, classNum: number);
}

@Injectable()
export class LandingMongoRepository implements LandingPageRepository {
	... 생략 ...
    
    // 특정 유저의 랜딩페이지의 구성값 제거
    async deletePost(userNum: number, classNum: number) {
    	this.landingPageModel.findOneAndDelete({ userNum, classNum });
    }
}

3. 서비스(LandingPageService)에 코드 추가

// landingPage.service.ts

... 생략 ...

@Injectable()
export class LandingPageService {
	... 생략 ...

    // 추가
    deletePost(userNum: number, classNum: number) {
        this.landingRepository.deletePost(userNum, classNum);
    }
}

4. 컨트롤러(landingPage.controller)에 코드 추가

// landingPage.controller.ts

... 생략 ...

@Controller('landingPage')
export class LandingPageController {
  ... 생략 ...

  // 추가
  @Delete('/:classNum/:userNum')
  deletePost(@Param('userNum') userNum: number, @Param('classNum') classNum: number) {
    console.log('랜딩페이지 제거');
    return 'success'
  }
}

5. 예외 처리

컨트롤러(landingPage.controller.ts)에서 userNum과 classNum이 모두 있는지를 체크하고, 그렇지 않으면 에러를 던져 로그로 출력하게 했다.

// landingPage.repository.ts

... 생략 ...

export class LandingMongoRepository implements LandingPageRepository {
	... 생략 ...
    async deletePost(userNum: number, classNum: number) {
        try {
            // 1. userName과 className이 둘다 있는지 체크
            const areBothKeyExist =
                await this.landingPageModel.exists({ userNum, classNum });
            if (!areBothKeyExist) { throw new Error('userNum || classNum 없음.') }
            // ... 1

            await this.landingPageModel.findOneAndDelete({ userNum, classNum });
        } catch (error) {
            console.log(error);
        }
    }
}

참고

다음에 다루게 될 것

  • NestJS 환경변수(1) - 환경 변수(.env) 설정, 커스텀 환경 변수 설정”

댓글남기기