1. UpdateAt, CreateAt 자동 생성
postgres-data 폴더를 지워, db를 초기화한다.
users.entity.ts
1// 생략23@Entity()4export class UsersModel {5// 생략67@UpdateDateColumn()8updateAt: Date910@CreateDateColumn()11createdAt: Date12}
users 엔티티에 위 어노테이션들을 적용하면 자동으로 생성, 수정일이 추가된다.
이떄 생성되는 utc(영국 세계기준) 기준으로 생성된다. 한국시간은 +9 해줘야 한다.
2. BaseModel 적용
다른 모델의 엔티티마다 updateAt, createAt가 추가되는 경우가 굉장히 많을 것이다.
posts.entity.ts
1// 생략23@Entity()4export class PostsModel {5// 생략67@UpdateDateColumn()8updateAt: Date910@CreateDateColumn()11createdAt: Date12}
그래서 공통된 리소스를 모아놓기 위해 common 이라는 리소스를 만든다.
1$ nest g resource2? common3? REST API4? No
src/common/entities/base.entity.ts 파일을 다음과 같이 만든다.
src/common/entities/base.entity.t
1import { CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'23@Entity()4export abstract class BaseModel {5@PrimaryGeneratedColumn()6id: number78@UpdateDateColumn()9updateAt: Date1011@CreateDateColumn()12createdAt: Date13}
그리고 id, updateAt, craeteAt를 쓰는 엔티티(user, posts)에
- 기존 id, updateAt, craeteAt를 지워주고,
- BaseModel을 상속시켜주면 된다.
users.entity.ts
1// users.entity.ts 생략2@Entity()3export class UsersModel extends BaseModel {4/*** 닉네임 특성5* 1) 길이가 20을 넘지 않을 것6* 2) 유일무이한 값이 될 것7*/8@Column({9length: 20,10unique: true,11})12nickname: string1314/*** 이메일 특성15* 1) 유일무이한 값이 될 것16*/17@Column({18unique: true,19})20email: string2122@Column()23password: string2425@Column({26// role 특성의 타입을 RolesEnum의 모든 값들로 지정27enum: Object.values(RolesEnum),28default: RolesEnum.USER,29})30role: RolesEnum3132@OneToMany(() => PostsModel, post => post.author)33posts: PostsModel[]34}
posts.entity.ts
1// posts.entity.ts 생략2@Entity()3export class PostsModel extends BaseModel {4/*** 작성자 1명이 여러 개의 포스트를 작성5* 1) UserModel과 연동한다 (Foreign Key를 사용해서)6* 2) null이 될 수 없다7*/8// one에 해당하는 클래스 타입을 넣어주면 된다9// 이 클래스 타입을 두 번쨰 함수의 파라미터로 받을 수 있다.10// 어떤 파라미터와 연동시킬지 선택11@ManyToOne(() => UsersModel, user => user.posts, {12nullable: false,13})14author: UsersModel1516@Column()17title: string1819@Column()20content: string2122@Column()23likeCount: number2425@Column()26commentCount: number27}
이런 식으로 공통된 프로퍼티를 모아서, 반복되는 코드를 사용하지 않고, 엔티티를 구성할 수 있다.