import { DataSource, ViewColumn, ViewEntity } from "typeorm"; import { member } from "../entity/club/member/member"; import { DB_TYPE } from "../env.defaults"; let todayAge: string; let ageThisYear: string; let exactAge: string; if (DB_TYPE == "postgres") { todayAge = `DATE_PART('year', AGE(CURRENT_DATE, member.birthdate))`; ageThisYear = `EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM member.birthdate)`; exactAge = `AGE(CURRENT_DATE, member.birthdate)`; } else if (DB_TYPE == "mysql") { todayAge = `TIMESTAMPDIFF(YEAR, member.birthdate, CURDATE()) AS todayAge`; ageThisYear = `YEAR(CURDATE()) - YEAR(member.birthdate) AS ageThisYear`; exactAge = ` CONCAT( TIMESTAMPDIFF(YEAR, member.birthdate, CURDATE()), ' years ', TIMESTAMPDIFF(MONTH, member.birthdate, CURDATE()) % 12, ' months ', TIMESTAMPDIFF(DAY, DATE_ADD( member.birthdate, INTERVAL TIMESTAMPDIFF(MONTH, member.birthdate, CURDATE()) MONTH ), CURDATE() ), ' days' ) `; } else if (DB_TYPE == "sqlite") { todayAge = `(strftime('%Y', 'now') - strftime('%Y', member.birthdate) - (strftime('%m-%d', 'now') < strftime('%m-%d', member.birthdate)))`; ageThisYear = `strftime('%Y', 'now') - strftime('%Y', member.birthdate)`; exactAge = ` (strftime('%Y', 'now') - strftime('%Y', member.birthdate)) || ' years ' || (strftime('%m', 'now') - strftime('%m', member.birthdate)) || ' months ' || (strftime('%d', 'now') - strftime('%d', member.birthdate)) || ' days' `; } @ViewEntity({ expression: (datasource: DataSource) => datasource .getRepository(member) .createQueryBuilder("member") .select("member.id", "id") .select("member.internalId", "internalId") .addSelect("member.firstname", "firstname") .addSelect("member.lastname", "lastname") .addSelect("member.nameaffix", "nameaffix") .addSelect("member.birthdate", "birthdate") .addSelect("salutation.salutation", "salutation") .addSelect(todayAge, "todayAge") .addSelect(ageThisYear, "ageThisYear") .addSelect(exactAge, "exactAge") .leftJoin("member.salutation", "salutation"), }) export class memberView { @ViewColumn() id: string; @ViewColumn() salutation: string; @ViewColumn() internalId: string; @ViewColumn() firstname: string; @ViewColumn() lastname: string; @ViewColumn() nameaffix: string; @ViewColumn() birthdate: Date; @ViewColumn() todayAge: number; @ViewColumn() ageThisYear: number; @ViewColumn() exactAge: string; }