만들었던 디비를 typeorm으로 테이블을 생성할 것이다.
erd를 만들것이다.
상품테이블과 상품거래위치 테이블을 연결해줘야 한다.
src/apis에 product와 productSalesLocation의 entities폴더를 만들어준다.
그리고 각각의 product.entity.ts, productSalesLocation.entity.ts파일을 만들어준다.
productSalesLocation.entity.ts
파일에 productSaleslocation클래스를 만들어준다
@Entity
export class ProductSaleslocation {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
address: string;
@Column()
addressDetail: string;
@Column()
lat: number;
@Column()
lng: number;
@Column({ type: 'timestamp' })
meetingTime: Date;
}
그리고 product.entity.ts
파일에 product클래스를 만들어 연결해준다
@Entity()
export class Product {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
name: string;
@Column()
desciption: string;
@Column()
price: number;
@Column()
isSoldout: boolean;
@JoinColumn()
@OneToOne(() => ProductSaleslocation)
productSaleslocation: ProductSaleslocation;
}
@JoinColumn()
@OneToOne(() => ProductSaleslocation)
productSaleslocation: ProductSaleslocation;
@JoinColumn()은 한쪽 테이블에만 적어야 하고
@OneToOne()은 한쪽/양쪽에 적어줄 수 있음
상품카테고리 테이블과 유저테이블을 상품테이블과 연결해줘야 한다.
productCategory.entity.ts
파일에 ProductCategory클래스를 ,
user.entity.ts
파일에 user클래스를 작성해준다.
@Entity()
export class ProductCategory {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
name: string;
}
@Entity()
export class User {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
email: string;
@Column()
password: string;
}
그리고 product
클래스에 연결해준다.
@ManyToOne(() => ProductCategory)
productCategory: ProductCategory; //카테고리 연결
@ManyToOne(() => User)
user: User;//user연결
상품태그 테이블을 연결해줘야 한다.
productTag.entity.ts
파일에 product 클래스를 만들어준다.
@Entity()
export class ProductTag {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column()
name: string;
@ManyToMany(() => Product, (products) => products.productTags)
products: ProductTag[];
}
상품과 상품태그 테이블 사이에는 중간테이블이 생성되는데 @ManyToMany 를 사용한다 서로 지정 product.entity랑 다대다관계이다.
같은 내용을 Product
클래스에도 작성해준다.
@JoinTable()
@ManyToMany(() => ProductTag, (productTags) => productTags.products)
productTags: ProductTag[];
상품테이블이 메인이라 조인테이블로 작성해주고, 서로 지정 productTag.entity랑 다대다관계가 된다.
entities:[Board]
라고 작성하면 늘어나는대로 계속 추가해줘야하기때문에
entities: [__dirname + '/apis/*/.entity.*']
라고 작성해서 디렉토리의 이름이 apis에 모든파일(**)에 모든 entity가 붙은 모든 형식의 파일이 적용되도록 바꿔줘야 한다.