일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 러스트 기초 학습
- ethers
- 깃허브명령어
- Vue.js
- 스마트컨트렉트 예약어 함수이름 중복
- 스마트컨트렉트프록시
- multicall
- 프록시배포구조
- 컨트렉트 배포 자동화
- 러스트기초
- ethers typescript
- 체인의정석
- SBT표준
- rust 기초
- 컨트렉트 동일한 함수이름 호출
- 스마트컨트렉트 함수이름 중복 호출
- nest.js설명
- git rebase
- 러스트 기초
- Vue
- ethers v6
- 스마트컨트렉트테스트
- nestjs 튜토리얼
- vue기초
- ethers websocket
- ambiguous function description
- chainlink 설명
- 스마트 컨트렉트 함수이름 중복
- ethers type
- 머신러닝기초
Archives
- Today
- Total
체인의정석
리팩토링) nest.js 기본 구조 체계화 하기 본문
728x90
반응형
이번에는 controller 부분과 dto 부분을 수정하여 구조를 더 체계적으로 만들었다. 주위 선임개발자 분들의 코드를 보고 질문을 하여 받은 피드백을 바탕으로 코드를 체계화 시켜 보았다.
수정전 코드
다음과 같이 이더리움 주소값을 계산하는 조건식을 넣었다.
하지만 이러한 값은 @Param에 객체 클래스를 만들어서 class-validator에 적용시키는것이 더 일반적이다.
참고로 이더리움 주소값은
1. 0x 포함 길이 42
2. 들어오는값은 16진수
이 2가지 조건이고
web3에서의 주소값 검사는 체크썸 검사가 나온 결과갑이라고 볼 수 있다.
async findOne(
@Param('address') address: string,
): Promise<GetContractResponse> {
if (address.substr(0, 2) !== '0x' || address.length !== 42) {
const code = RESPONSE_CODE.INVALID_ADDRESS;
const message = RESPONSE_MESSAGE.INVALID_CONTRACT_ADDRESS;
return {
code: code,
message: message,
data: {
address: address,
},
};
}
const command = {
address,
};
const response = this.addressesService.getAddressType(command);
return response;
}
따라서 아래와 같이 수정하였다.
수정 후 코드
@Controller('address')
export class AddressesController {
constructor(private readonly addressesService: AddressesService) {}
@Get('contracts/:address')
async findOne(
@Param('address') request: GetContractRequest,
): Promise<GetContractResponse> {
const command = transformAndValidateSync(GetContractCommand, {
address: request,
});
const response = this.addressesService.getAddressType(command);
return response;
}
}
이렇게 만들 수 있다.
일단 2가지 포인트가 있다.
1. dto 에서 3가지를 설정해 준다.
- request : raw 데이터로 json 형태가 들어온다.
- command : request와 header 값등을 합한 요청이 들어온다. 이때 transfromAndValidateSync를 사용하여 json 형태로 들어온 response를 class로 다른 정보와 함께 넣어준다. 일단 헤더 값이 없더라도 추후 추가될 기능을 대비하여 넣어둔다.
- response : 결과값으로 줄 데이터를 넣어준다.
p.s) common 레벨로 공통된 클래스는 상위에 생성하고 하위 루트에서는 이를 상속 받아 설계하는 것이 더 좋은 구조이다. 다만 지금은 시간이 없어 이부분은 나중에 적용해 보기로 하였다.
2. 유효성 검사의 경우 request, command, response 에서 클래스를 따로 생성해 주면서 , class-validator로 체크를 한번씩 더 해준다.
728x90
반응형
'개발 > backend' 카테고리의 다른 글
TypeORM & NestJS) Query Selector 사용하여 다수의 데이터를 가져오고 Response 구조로 다수의 데이터 응답 보내기 (0) | 2021.11.03 |
---|---|
SQL) Paging 처리하기, 페이징 API 만들기 (0) | 2021.11.02 |
TypeORM - query builder/ find 함수로 쿼리기능 구현 (0) | 2021.10.25 |
nest.js) 예외처리 - 이더리움 주소값인지 확인하고 아닐 시 에러리턴 (0) | 2021.10.22 |
Nest.js) API 설계를 위한 피드백- 조회기능 (0) | 2021.10.20 |
Comments