86 lines
2.6 KiB
TypeScript
86 lines
2.6 KiB
TypeScript
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
|
|
import { member } from "../entity/club/member/member";
|
|
import { SettingHelper } from "../helpers/settingsHelper";
|
|
|
|
let todayAge: string;
|
|
let ageThisYear: string;
|
|
let exactAge: string;
|
|
const DB_TYPE = SettingHelper.getEnvSetting("database.type");
|
|
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;
|
|
}
|