Day19(4.7)
HttpExceptionHandling
Main.ts
http-exception-filter.ts
Soft-Delete
물리적으로 DB에서 지우게된다면 아래와같이 작동하게된다.
@Mutation(() => Boolean) deleteProduct( @Args('productId') productId: string, // ) { // 제품을 삭제한다. return this.productService.delete({ productId }); // 제품이 삭제됐다면 True or False }
async delete({ productId }) { // 제품을 삭제하는 비즈니스로직 // 1. 실제 삭제(db의 데이터를 물리적으로 삭제한다.) const result = await this.productRepository.delete({ id: productId }); return result.affected ? true : false; // 삭제가됐다면 1이기때문에 true // 아니라면 false가 반환된다. }
하지만 Soft-Delete를 하게된다면 컬럼으로 삭제상태를 나타내, 물리적으로 삭제가아닌 삭제상태를 알려주는식으로 삭제한다
@Column({ default: null }) @Field(() => Date) deletedAt: Date;
제품을 가져오는 fetchProducts를 했을때 deleteAt이 비어있냐 비어있지 않냐를 체크해 가져온다면 삭제상태 구분이 가능하다.
Nest.js와 TypeORM에는 내장된기능
@DeleteDateColumn() deletedAt: Date; this.productRepository.softRemove({ id: productId }); // id로만 삭제가능 this.productRepository.softDelete({ id: productId }); // 다양한 조건으로 삭제가능.
Join(Table)
아래와같이 사용하면 join테이블도 FE에서 받아 사용이 가능하다.
// 2. 상품과 상품거래위치를 같이 등록하는경우 (Join)
const { productSaleslocation, ...product } = createProductInput;
const result = await this.productSaleslocationRepository.save({
...productSaleslocation,
});
return this.productRepository.save({
...product,
productSaleslocation: result, //{ id: result.id }, 동일하게 인식한다.
});
TIL Git
Author And Source
이 문제에 관하여(Day19(4.7)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sjy0917/Day19저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)