import { DataSource, ViewColumn, ViewEntity } from "typeorm"; import { member } from "../entity/club/member/member"; import { DB_TYPE } from "../env.defaults"; @ViewEntity({ expression: (datasource: DataSource) => datasource .getRepository(member) .createQueryBuilder("member") .select("member.id", "id") .addSelect("member.firstname", "firstname") .addSelect("member.lastname", "lastname") .addSelect("member.nameaffix", "nameaffix") .addSelect("member.birthdate", "birthdate") .addSelect("salutation.salutation", "salutation") .addSelect( DB_TYPE == "postgres" ? `DATE_PART('year', AGE(CURRENT_DATE, member.birthdate))` : "TIMESTAMPDIFF(YEAR, member.birthdate, CURDATE())", "todayAge" ) .addSelect( DB_TYPE == "postgres" ? `EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM member.birthdate)` : "YEAR(CURDATE()) - YEAR(member.birthdate)", "ageThisYear" ) .addSelect( DB_TYPE == "postgres" ? `AGE(CURRENT_DATE, member.birthdate)` : "CONCAT('_', FROM_DAYS(TIMESTAMPDIFF(DAY, member.birthdate, CURDATE())))", "exactAge" ) .leftJoin("member.salutation", "salutation"), }) export class memberView { @ViewColumn() id: string; @ViewColumn() salutation: string; @ViewColumn() firstname: string; @ViewColumn() lastname: string; @ViewColumn() nameaffix: string; @ViewColumn() birthdate: Date; @ViewColumn() todayAge: number; @ViewColumn() ageThisYear: number; @ViewColumn() exactAge: string; }