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 { 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 { await queryRunner.dropView("membership_view"); await queryRunner.dropView("member_qualifications_view"); await queryRunner.dropView("member_executive_positions_view"); await queryRunner.dropView("member_view"); } }