import { DataSource, MigrationInterface, QueryRunner, View } from "typeorm"; import { member } from "../entity/club/member/member"; import { memberExecutivePositions } from "../entity/club/member/memberExecutivePositions"; import { memberQualifications } from "../entity/club/member/memberQualifications"; import { membership } from "../entity/club/member/membership"; export class ExtendViewValues1736084198860 implements MigrationInterface { name = "ExtendViewValues1736084198860"; public async up(queryRunner: QueryRunner): Promise { await queryRunner.dropView("membership_view"); await queryRunner.dropView("member_view"); 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") .addSelect("CONCAT('_', FROM_DAYS(TIMESTAMPDIFF(DAY, member.birthdate, CURDATE())))", "exactAge"), }), 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" ) .addSelect( "CONCAT('_', FROM_DAYS(SUM(TIMESTAMPDIFF(DAY, membership.start, COALESCE(membership.end, CURRENT_DATE)))))", "durationInYears" ) .leftJoin("membership.status", "status") .leftJoin("membership.member", "member") .groupBy("status.id") .addGroupBy("member.id"), }), true ); } public async down(queryRunner: QueryRunner): Promise { await queryRunner.dropView("membership_view"); await queryRunner.dropView("member_view"); 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: "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 ); } }