import { DataSource, ViewColumn, ViewEntity } from "typeorm"; import { membership } from "../entity/club/member/membership"; @ViewEntity({ expression: (datasource: DataSource) => datasource .getRepository(membership) .createQueryBuilder("membership") .select("status.id", "statusId") .addSelect("status.status", "status") .addSelect("member.id", "memberId") .addSelect("member.firstname", "memberFirstname") .addSelect("member.lastname", "memberLastname") .addSelect("member.nameaffix", "memberNameaffix") .addSelect("member.birthdate", "memberBirthdate") .addSelect("salutation.salutation", "memberSalutation") .addSelect(`SUM(COALESCE("membership"."end", CURRENT_DATE) - "membership"."start") `, "durationInDays") .addSelect( `SUM(EXTRACT(YEAR FROM AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start")))`, "durationInYears" ) .addSelect(`SUM(AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start"))`, "exactDuration") .leftJoin("membership.status", "status") .leftJoin("membership.member", "member") .leftJoin("member.salutation", "salutation") .groupBy("status.id") .addGroupBy("member.id") .addGroupBy("salutation.id"), }) export class membershipView { @ViewColumn() durationInDays: number; @ViewColumn() durationInYears: number; @ViewColumn() exactDuration: string; @ViewColumn() status: string; @ViewColumn() statusId: number; @ViewColumn() memberId: string; @ViewColumn() memberSalutation: string; @ViewColumn() memberFirstname: string; @ViewColumn() memberLastname: string; @ViewColumn() memberNameaffix: string; @ViewColumn() memberBirthdate: Date; } @ViewEntity({ expression: (datasource: DataSource) => datasource .getRepository(membership) .createQueryBuilder("membership") .select("member.id", "memberId") .addSelect("member.firstname", "memberFirstname") .addSelect("member.lastname", "memberLastname") .addSelect("member.nameaffix", "memberNameaffix") .addSelect("member.birthdate", "memberBirthdate") .addSelect("salutation.salutation", "memberSalutation") .addSelect(`SUM(COALESCE("membership"."end", CURRENT_DATE) - "membership"."start") `, "durationInDays") .addSelect( `SUM(EXTRACT(YEAR FROM AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start")))`, "durationInYears" ) .addSelect(`SUM(AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start"))`, "exactDuration") .leftJoin("membership.status", "status") .leftJoin("membership.member", "member") .leftJoin("member.salutation", "salutation") .groupBy("member.id") .addGroupBy("salutation.id"), }) export class membershipTotalView { @ViewColumn() durationInDays: number; @ViewColumn() durationInYears: number; @ViewColumn() exactDuration: string; @ViewColumn() memberId: string; @ViewColumn() memberSalutation: string; @ViewColumn() memberFirstname: string; @ViewColumn() memberLastname: string; @ViewColumn() memberNameaffix: string; @ViewColumn() memberBirthdate: Date; }