이제 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 시간을 기반으로 하기 때문입니다. 따라서 시간을 바꿔주면 됩니다.
post_model에도 동일하게 updatedAt과 createdAt을 넣어줍니다. 근데 반복되는 작업은 개발자에게 좋지 않은 습관이기 때문에 공통화를 시키도록 하겠습니다. 따라서 common이라는 module을 만들겠습니다.
nest g resource -> common
그리고 다음과 같이 코드를 작성하고, BaseModel을 UserModel과 PostModel은 상속을 하면됩니다. 상속할 때, id와 createdAt, updatedAt을 제거합니다.
import { CreateDateColumn, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm";
// abstract를 사용하는 이유는 이 클래스만 사용하지 않기 떄문에
export abstract class BaseModel {
@PrimaryGeneratedColumn()
id: number;
@UpdateDateColumn()
updatedAt: Date;
@CreateDateColumn()
createdAt: Date;
}
@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;
}
@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를 봐도 다음과 같이 나오게 됩니다.
docker-compose.yaml에 적혀있는 것을 기반으로 새로운 서버 연결을 합니다. 기존의 5432포트가 이미 존재해서 5433이라는 포트로 변경을 했습니다.
127.0.0.1
5433
postgresql
postgresql
postgresql
연결이 되면 다음과 같이 나오게 됩니다.
SELECT * FROM users_model;
회원가입을 1번더 해보고 확인을 해봅시다.