import { IsEmail, Length } from "class-validator"
import { Entity, Column, Index, OneToMany, BeforeInsert } from "typeorm"
import BaseEntity from './Entity';
import bcrypt from 'bcryptjs';
import Vote from "./Vote";
import Post from "./Post";
@Entity("users")
export class User extends BaseEntity {
@Index()
@IsEmail(undefined, { message: "이메일 주소가 잘못되었습니다." })
@Length(1, 255, { message: "이메일 주소는 비워둘 수 없습니다." })
@Column({ unique: true })
email: string;
@Index()
@Length(3, 32, { message: "사용자 이름은 3자 이상이어야 합니다." })
@Column({ unique: true })
username: string;
@Column()
@Length(6, 255, { message: "비밀번호는 6자리 이상이어야 합니다." })
password: string;
@OneToMany(() => Post, (post) => post.user)
posts: Post[]
@OneToMany(() => Vote, (vote) => vote.user)
votes: Vote[]
@BeforeInsert()
async hashPassword() {
this.password = await bcrypt.hash(this.password, 6)
}
}
엔티티간 관계를 형성하기 위해서는 엔티티에 서로의 필드를 넣어줘야 합니다.
┏━━━━━━━━━━ Post 1
User ━━━━━━━━━━━━━━━━╋━━━━━━━━━━ Post 2
┗━━━━━━━━━━ Post 3
@OneToMany(() = Post, (post) => post.user)
posts: Post[]
() = Post
User 에서 Post로 접근하려면 post.user로 접근해야 한다