1. 문제

신고엔티티에서 신고당한사람(reportedId)는

유저,게시물,코멘트와 조인할 필요가 있다.

@Entity()
export class Reports {
  @PrimaryGeneratedColumn()
  id: number;

  @ManyToOne(() => User, (reporter) => reporter.reports)
  reporter: User;
  @Column()
  reporterId: number;

  // 다대다 테이블? 릴레이션 테이블? 아니면 3개 노가다?
  @Column()
  reportedId: number;

  @Column()
  description: string;

  @Column({
    type: 'enum',
    enum: ['checking', 'rejected', 'completed'],
    default: 'checking',
  })
  status: 'checking' | 'rejected' | 'completed';

  @Column({ type: 'enum', enum: ['user', 'post', 'comment'] })
  type: 'user' | 'post' | 'comment';

  @CreateDateColumn({ name: 'created_at' })
  createdAt: Date;

  @UpdateDateColumn({ name: 'updated_at' })
  updatedAt: Date;

  @DeleteDateColumn({ name: 'deleted_at' })
  deletedAt: Date;
}


2. 시도해본 것들

조인을 안하고 기능을 완성해보려고 했다.

그런데 기능을 만들면서 마지막 신고내역을 구현할때,

reportedId를 통해서 유저,코멘트,포스트 정보와 조인을 해서 정보를 가져와야 했다.

그럴때 우리는 어떻게 해야할지 고민이 되었다.

 

릴레이션 테이블

이 부분이 감이 오지않아서 튜터님에게 물어봐야 할 것 같다. (한번도 안해본 테이블)

 

다대다 테이블

@Entity()
export class CollectionItem {
  @PrimaryGeneratedColumn()
  id: number;

  @ManyToOne((type) => Collection, (collection) => collection.collectionItems)
  @JoinColumn({ name: 'collection_id' })
  collection: Collection;

  @ManyToOne((type) => Restaurant, (restaurant) => restaurant.collectionItems)
  @JoinColumn({ name: 'restaurant_id' })
  restaurant: Restaurant;

  @ManyToOne((type) => Post, (post) => post.collectionItems)
  @JoinColumn({ name: 'post_id' })
  post: Post;
}

 

기존에 진행했던 테이블

 

각각 테이블과 조인

@Entity()
export class Report {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  reportedId: number;

  @Column()
  type: string;

  @ManyToOne(() => User)
  @JoinColumn({ name: 'reportedId', referencedColumnName: 'id' })
  user: User;

  @ManyToOne(() => Post)
  @JoinColumn({ name: 'reportedId', referencedColumnName: 'id' })
  post: Post;

  @ManyToOne(() => Comment)
  @JoinColumn({ name: 'reportedId', referencedColumnName: 'id' })
  comment: Comment;
}

단순하면서 무식해보일 것 같은 방법

 

3. 해결과정

해결방법은 찾지 못했다.

내일 튜터님에게 상담받으면서 어떤 방향으로 나가야 할지 고민하고 정해야겠다.

 

4. 알게 된 점

엔티티간의 관계를 정의하는것이 이렇게 복잡할 줄 몰랐다....

팀원들과 엔티티 얘기하면서 배운 점도 많아서 좋았다.

728x90

+ Recent posts