NestJS-extends BaseModel

jaegeunsong97·2024년 1월 26일
0

NestJS

목록 보기
14/37
post-custom-banner

🖊️UpdatedAt CreatedAt

이제 createdAt과 updatedAt을 추가해봅시다.

import { Column, CreateDateColumn, Entity, OneToMany, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
.
.
@Entity()
export class UsersModel {
	 .
     .

     @UpdateDateColumn() // 업데이트시 알아서 찍힘
     updatedAt: Date; // typeORM에서 지원하는 기능

     @CreateDateColumn()
     createdAt: Date;
}

포스트맨으로 테스트를 해봅시다. 새로운 회원가입을 실행하고 쿼리를 실행합시다. 그러면 다음과 같이 잘 들어있는 것을 알 수 있습니다.

SELECT * FROM users_model;

참고로 시간이 다릅니다. 왜냐하면 createdAt과 updatedAt은 UTC 시간을 기반으로 하기 때문입니다. 따라서 시간을 바꿔주면 됩니다.


🖊️BaseModel

post_model에도 동일하게 updatedAt과 createdAt을 넣어줍니다. 근데 반복되는 작업은 개발자에게 좋지 않은 습관이기 때문에 공통화를 시키도록 하겠습니다. 따라서 common이라는 module을 만들겠습니다.

nest g resource -> common

그리고 다음과 같이 코드를 작성하고, BaseModel을 UserModel과 PostModel은 상속을 하면됩니다. 상속할 때, id와 createdAt, updatedAt을 제거합니다.

  • common/entity/base.entity.ts
import { CreateDateColumn, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";

// abstract를 사용하는 이유는 이 클래스만 사용하지 않기 떄문에
export abstract class BaseModel {

    @PrimaryGeneratedColumn()
    id: number;

    @UpdateDateColumn()
    updatedAt: Date;

    @CreateDateColumn()
    createdAt: Date;
}
  • posts/entities/posts.entity.ts
@Entity()
export class PostsModel extends BaseModel {
  
    @ManyToOne(() => UsersModel, (user) => user.posts, {
      	nullable: false,
    })
    author: UsersModel;

    @Column()
    title: string;

    @Column()
    content: string;

    @Column()
    likeCount: number;

    @Column()
    commentCount: number;
}
  • users/entities/users.entity.ts
@Entity()
export class UsersModel extends BaseModel {

    @Column({
        length: 20,
        unique: true,
    })
    nickname: string;

    @Column({
      	unique: true,
    })
    email: string;

    @Column()
    password: string;

    @Column({
        enum: Object.values(RolesEnum),
        default: RolesEnum.USER,
    })
    role: RolesEnum;

    @OneToMany(() => PostsModel, (post) => post.author)
    posts: PostsModel[];
}

DB를 봐도 다음과 같이 나오게 됩니다.


🖊️pgAdmin

docker-compose.yaml에 적혀있는 것을 기반으로 새로운 서버 연결을 합니다. 기존의 5432포트가 이미 존재해서 5433이라는 포트로 변경을 했습니다.

127.0.0.1
5433
postgresql
postgresql
postgresql

연결이 되면 다음과 같이 나오게 됩니다.

SELECT * FROM users_model;

회원가입을 1번더 해보고 확인을 해봅시다.

profile
블로그 이전 : https://medium.com/@jaegeunsong97
post-custom-banner

0개의 댓글