Определите, какой View Entity будет возвращен в TypeORM и PostgreSQL - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть таблица User, определенная в Typeorm, как показано ниже

@Entity({ name: 'users' })
export class UserEntity {
@PrimaryGeneratedColumn()
    user_id: number;

    @Column({ name: 'name', type: 'varchar', length: 128 })
    name: string;

    @Column({ name: 'dob', type: 'timestamp with time zone', nullable: true })
    dob: string;

    @Column({ name: 'email', type: 'varchar', length: 128, nullable: true })
    email: string;

    @Column({ name: 'phone_number', type: 'varchar', length: 56, nullable: true })
    phone_number: string;
}

И две сущности представления: Родитель и Учитель, которые содержат свойства от Пользователя

@ViewEntity({
expression: `
    SELECT u.user_id AS user_id,
    u.name AS name,
    u.dob AS dob, 
    u.email AS email,
    FROM users u
    LEFT JOIN authentications auth ON u.user_id=auth.user_id
    WHERE auth.role_name='${RoleEum.TEACHER}'
`
})
export class TeacherViewEntity {
    @ViewColumn()
    @PrimaryColumn()
    user_id: number;

    @ViewColumn()
    name: string;

    @ViewColumn()
    dob: string;

    @ViewColumn()
    email: string;
}


@ViewEntity({
expression: `
    SELECT u.user_id AS user_id,
    u.name AS name,
    u.dob AS dob, 
    u.phone_number AS phone_number,
    FROM users u
    LEFT JOIN authentications auth ON u.user_id=auth.user_id
    WHERE auth.role_name='${RoleEum.TEACHER}'
`
})
export class ParentViewEntity {
    @ViewColumn()
    @PrimaryColumn()
    user_id: number;

    @ViewColumn()
    name: string;

    @ViewColumn()
    dob: string;

    @ViewColumn()
    phone_number: string;
}

Учитель или Родитель могут быть в каком-то классе (это отношение «многие ко многим»):

@Entity({ name: 'users_in_classes' })
export class UsersInClassesEntity {
    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    user_id: number;

    @ManyToOne(type => UserEntity)
    @JoinColumn({ name: 'user_id' })
    user: UserEntity;

    @ManyToOne(type => ClassroomEntity)
    @JoinColumn({ name: 'classroom_id' })
    classroom: ClassroomEntity;

    @Column()
    classroom_id: number;

    @Column({ name: 'user_role', type: 'varchar' })
    user_role: string; // 'teacher' or 'parent'
}

Вопрос в том, как вернуть учителя в классе или родителя в классе в виде представления учителя (TeacherViewEntity) или представления родителей (ParentViewEntity). основываться на user_role ('teacher' или 'parent') из UsersInClassesEntity?

...