ff-admin-server/src/views/memberView.ts

86 lines
2.5 KiB
TypeScript
Raw Normal View History

2024-12-18 12:55:03 +01:00
import { DataSource, ViewColumn, ViewEntity } from "typeorm";
2025-01-05 14:14:00 +01:00
import { member } from "../entity/club/member/member";
import { DB_TYPE } from "../env.defaults";
2024-12-18 12:55:03 +01:00
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'
`;
}
2024-12-18 12:55:03 +01:00
@ViewEntity({
expression: (datasource: DataSource) =>
datasource
.getRepository(member)
.createQueryBuilder("member")
2024-12-18 22:27:33 +01:00
.select("member.id", "id")
.select("member.internalId", "internalId")
2024-12-18 22:27:33 +01:00
.addSelect("member.firstname", "firstname")
.addSelect("member.lastname", "lastname")
.addSelect("member.nameaffix", "nameaffix")
.addSelect("member.birthdate", "birthdate")
2025-01-25 10:20:57 +01:00
.addSelect("salutation.salutation", "salutation")
.addSelect(todayAge, "todayAge")
.addSelect(ageThisYear, "ageThisYear")
.addSelect(exactAge, "exactAge")
2025-01-25 10:20:57 +01:00
.leftJoin("member.salutation", "salutation"),
2024-12-18 12:55:03 +01:00
})
export class memberView {
@ViewColumn()
2025-01-29 08:53:49 +01:00
id: string;
2024-12-18 12:55:03 +01:00
@ViewColumn()
2025-01-25 10:20:57 +01:00
salutation: string;
2024-12-18 12:55:03 +01:00
@ViewColumn()
internalId: string;
2024-12-18 12:55:03 +01:00
@ViewColumn()
firstname: string;
@ViewColumn()
lastname: string;
@ViewColumn()
nameaffix: string;
@ViewColumn()
birthdate: Date;
@ViewColumn()
todayAge: number;
@ViewColumn()
ageThisYear: number;
2025-01-05 16:09:39 +01:00
@ViewColumn()
2025-01-21 14:49:14 +01:00
exactAge: string;
2024-12-18 12:55:03 +01:00
}