112 lines
4.8 KiB
TypeScript
112 lines
4.8 KiB
TypeScript
import { DataSource, MigrationInterface, QueryRunner, View } from "typeorm";
|
|
import { member } from "../entity/member";
|
|
import { memberExecutivePositions } from "../entity/memberExecutivePositions";
|
|
import { memberQualifications } from "../entity/memberQualifications";
|
|
import { membership } from "../entity/membership";
|
|
|
|
export class MemberDataViews1734520998539 implements MigrationInterface {
|
|
name = "MemberDataViews1734520998539";
|
|
|
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
await queryRunner.createView(
|
|
new View({
|
|
name: "member_view",
|
|
expression: (datasource: DataSource) =>
|
|
datasource
|
|
.getRepository(member)
|
|
.createQueryBuilder("member")
|
|
.select("member.id", "id")
|
|
.addSelect("member.salutation", "salutation")
|
|
.addSelect("member.firstname", "firstname")
|
|
.addSelect("member.lastname", "lastname")
|
|
.addSelect("member.nameaffix", "nameaffix")
|
|
.addSelect("member.birthdate", "birthdate")
|
|
.addSelect("TIMESTAMPDIFF(YEAR, member.birthdate, CURDATE())", "todayAge")
|
|
.addSelect("YEAR(CURDATE()) - YEAR(member.birthdate)", "ageThisYear"),
|
|
}),
|
|
true
|
|
);
|
|
await queryRunner.createView(
|
|
new View({
|
|
name: "member_executive_positions_view",
|
|
expression: (datasource: DataSource) =>
|
|
datasource
|
|
.getRepository(memberExecutivePositions)
|
|
.createQueryBuilder("memberExecutivePositions")
|
|
.select("executivePosition.id", "positionId")
|
|
.addSelect("executivePosition.position", "position")
|
|
.addSelect("member.id", "memberId")
|
|
.addSelect("member.salutation", "memberSalutation")
|
|
.addSelect("member.firstname", "memberFirstname")
|
|
.addSelect("member.lastname", "memberLastname")
|
|
.addSelect("member.nameaffix", "memberNameaffix")
|
|
.addSelect("member.birthdate", "memberBirthdate")
|
|
.addSelect(
|
|
"SUM(TIMESTAMPDIFF(DAY, memberExecutivePositions.start, COALESCE(memberExecutivePositions.end, CURRENT_DATE)))",
|
|
"durationInDays"
|
|
)
|
|
.leftJoin("memberExecutivePositions.executivePosition", "executivePosition")
|
|
.leftJoin("memberExecutivePositions.member", "member")
|
|
.groupBy("executivePosition.id"),
|
|
}),
|
|
true
|
|
);
|
|
await queryRunner.createView(
|
|
new View({
|
|
name: "member_qualifications_view",
|
|
expression: (datasource: DataSource) =>
|
|
datasource
|
|
.getRepository(memberQualifications)
|
|
.createQueryBuilder("memberQualifications")
|
|
.select("qualification.id", "qualificationId")
|
|
.addSelect("qualification.qualification", "qualification")
|
|
.addSelect("member.id", "memberId")
|
|
.addSelect("member.salutation", "memberSalutation")
|
|
.addSelect("member.firstname", "memberFirstname")
|
|
.addSelect("member.lastname", "memberLastname")
|
|
.addSelect("member.nameaffix", "memberNameaffix")
|
|
.addSelect("member.birthdate", "memberBirthdate")
|
|
.addSelect(
|
|
"SUM(TIMESTAMPDIFF(DAY, memberQualifications.start, COALESCE(memberQualifications.end, CURRENT_DATE)))",
|
|
"durationInDays"
|
|
)
|
|
.leftJoin("memberQualifications.qualification", "qualification")
|
|
.leftJoin("memberQualifications.member", "member")
|
|
.groupBy("qualification.id"),
|
|
}),
|
|
true
|
|
);
|
|
await queryRunner.createView(
|
|
new View({
|
|
name: "membership_view",
|
|
expression: (datasource: DataSource) =>
|
|
datasource
|
|
.getRepository(membership)
|
|
.createQueryBuilder("membership")
|
|
.select("status.id", "statusId")
|
|
.addSelect("status.status", "status")
|
|
.addSelect("member.id", "memberId")
|
|
.addSelect("member.salutation", "memberSalutation")
|
|
.addSelect("member.firstname", "memberFirstname")
|
|
.addSelect("member.lastname", "memberLastname")
|
|
.addSelect("member.nameaffix", "memberNameaffix")
|
|
.addSelect("member.birthdate", "memberBirthdate")
|
|
.addSelect(
|
|
"SUM(TIMESTAMPDIFF(DAY, membership.start, COALESCE(membership.end, CURRENT_DATE)))",
|
|
"durationInDays"
|
|
)
|
|
.leftJoin("membership.status", "status")
|
|
.leftJoin("membership.member", "member")
|
|
.groupBy("status.id"),
|
|
}),
|
|
true
|
|
);
|
|
}
|
|
|
|
public async down(queryRunner: QueryRunner): Promise<void> {
|
|
await queryRunner.dropView("membership_view");
|
|
await queryRunner.dropView("member_qualifications_view");
|
|
await queryRunner.dropView("member_executive_positions_view");
|
|
await queryRunner.dropView("member_view");
|
|
}
|
|
}
|