How can I do this in TypeORM ?
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[];
}