Mmake an intermidiate table company_role_user between three table user, role and comapny

24 Views Asked by At

How can I do this in TypeORM ?

image of tables relationship

notice: many users can be added in many companies and for each company, each user has one role eg: In comp_A we can have user_1 who has admin_role, user_2 who has customer_role In comp_B we can have user_1 who has seller_role, user_2 who has admin_role

@Entity()
export class Role extends DateEntity {
  @PrimaryGeneratedColumn('uuid')
  public id: string;

  @Column({
    unique: true,
  })
  public name: string;

  @Column({
    nullable: true,
    length: 255,
  })
  public description: string;

  /** for the base systeme */
  @OneToMany(() => User, (user) => user.base_role)
  public users: User[];
}

@Entity()
@Check("'email' ~* '^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+$'")
export class User extends DateEntity {
  @PrimaryGeneratedColumn('uuid')
  public id: string;

  @Index()
  @Column({
    unique: true,
  })
  public email: string;

  @Column()
  public password: string;

  @Column()
  public isActive: string;

  /** for the base systeme */
  @ManyToOne(() => Role, (role) => role.users)
  base_role: Role;

  @ManyToMany(() => Company, (company) => company.users)
  @JoinTable({
    name: 'company_role_user',
    joinColumn: { name: 'user_id' },
    inverseJoinColumn: { name: 'company_id' },
  })
  companies: Company[];
}

export enum StatusEntity {
  ACTIVED = 'actived',
  BLOCKED = 'blocked',
}

@Entity()
export class Company extends DateEntity {
  @PrimaryGeneratedColumn('uuid')
  public id: string;

  @Index()
  @Column({
    unique: true,
  })
  public name: string;

  @Column({
    nullable: true,
    length: 255,
  })
  public description: string;

  @Column({
    type: 'enum',
    enum: StatusEntity,
    default: StatusEntity.ACTIVED,
  })
  public status: StatusEntity;

  @ManyToMany(() => User, (user) => user.companies)
  users: User[];
}
0

There are 0 best solutions below