Skip to content

2024-03-10 wishfunding

timestamp 칼럼을 어떻게 표현하더라?#

내장 Date 객체를 사용하기엔 불변타입이 아니라서 에러를 자주 일으킬 가능성이 높다고 한다. 그래서 js-joda를 제안하고 있는 블로그이다.

하지만 나는 임의의 Date를 저장해야 할 필요가 있는데요?

endAt 이라는 칼럼은 펀딩이 끝나는 시간을 저장한다. 그러므로 DateColumn 데코레이터만으로는 처리할 수 없게된다.

   /**
     * https://typeorm.io/entities#column-types
     *
     * TODO - timestamptz를 사용할지, 일반 date를 사용할지 결정해야함.
     * timestamptz는 시간 & 타임존을 포함하고 date는 말 그대로 날짜만 저장함
     */
    @Column("date")
    // @Column("timestamptz")
    endAt: Date;

✌️ Typeorm Column Validation#

save를 할 때 금액칸에 음수가 들어갈 경우 Typeorm에서 잘못된 값이 들어갔는지 여부를 판단하여 에러를 발생하게 만들어 줄 수 있다면 좋을 것 같다.

Validation {typeorm}

칼럼 이름을 내가 직접 정의할 수는 없을까?#

OneToMany, ManyToOne으로 프로퍼티들을 만들다보면 ER 다이어그램을 작성하며 열심히 정의했던 FK들이랑 이름이 달라지는 경우가 발생하게 되었다. 그래서 ORM이 자동으로 FK를 만들어 줄 때 그 이름을 내가 먹일 수는 없는걸까?

Uuid가 필요한 테이블#

  • Funding

혹시 더 있나? Funding 테이블에 fundUuid 프로퍼티 추가해야함.

DTO와 Typeorm#

Data Transfer Object로, 데이터를 전달하기 위해 있는 객체임. DTO 객체의 클래스를 정의하면 컨트롤러에서 타입을 자동으로 DTO로 변환해서 받아볼 수 있다. recre-backend에서의 예시를 다시 복습해보자:

  • user.controller.ts
export class UserController {
    ...
    @Post()
    create(@Body() createUserDto: CreateUserDto) {
        return this.userService.createUser(createUserDto);
    }
}
  • user.service.ts
export class UserService {
    ...
    createUser(createUserDto: CreateUserDto): Promise<User> {
        const user: User = new User();
        user.nickname = createUserDto.nickname;
        user.profileImage = createUserDto.profileImage;
        user.provider = createUserDto.provider;
        user.email = createUserDto.email;
        user.createdDt = new Date(Date.now());
        return this.userRepository.save(user);
    }
}

DTO에 요청시 프로퍼티들의 타입에 제한을 걸 수 있고, -1원과 같이 말이 안되는 경우도 Validation {typeorm}을 통해 걸러낼 수 있다고 한다.

DTO Validation using class-validator {NestJS}

회의 안건..#

  • [x] 현진이 github 계정 ChoiWheatley / wishlist_funding_dbdiagram 리포지토리에 collaborator 권한 부여
  • [ ] uuid 필요한 테이블 식별 -> 일단은 Funding만 해당된다. 아직 추가하지는 않음. https://wishfund.atlassian.net/browse/WISH-29

회의 진행중#

no pg_hba.conf entry 에러#

rds postgresql ssl 인증서 발급하여 접속하기