ff-admin-server/src/views/memberView.ts
2025-04-19 11:26:35 +02:00

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;
}