From 2e69f87578e19b7ded890ea28d0e4170b46b8cda Mon Sep 17 00:00:00 2001 From: Julian Krauser Date: Sat, 8 Feb 2025 09:00:50 +0100 Subject: [PATCH] change: viewmodell reading --- src/factory/admin/club/member/dateMappingHelper.ts | 14 ++++++++++++++ src/factory/admin/club/member/member.ts | 3 ++- src/factory/admin/club/member/membership.ts | 3 ++- src/migrations/baseSchemaTables/member.ts | 8 +++++--- src/views/memberExecutivePositionView.ts | 2 +- src/views/memberQualificationsView.ts | 2 +- src/views/membershipsView.ts | 2 +- 7 files changed, 26 insertions(+), 8 deletions(-) create mode 100644 src/factory/admin/club/member/dateMappingHelper.ts diff --git a/src/factory/admin/club/member/dateMappingHelper.ts b/src/factory/admin/club/member/dateMappingHelper.ts new file mode 100644 index 0000000..ab20076 --- /dev/null +++ b/src/factory/admin/club/member/dateMappingHelper.ts @@ -0,0 +1,14 @@ +import { DB_TYPE } from "../../../../env.defaults"; + +export default abstract class DateMappingHelper { + static mapDate(entry: any) { + switch (DB_TYPE) { + case "postgres": + return `${entry.years} years ${entry.months} months ${entry.days} days`; + case "mysql": + return entry.toString(); + case "sqlite": + return entry; + } + } +} diff --git a/src/factory/admin/club/member/member.ts b/src/factory/admin/club/member/member.ts index 95a46cb..536b012 100644 --- a/src/factory/admin/club/member/member.ts +++ b/src/factory/admin/club/member/member.ts @@ -3,6 +3,7 @@ import { MemberStatisticsViewModel, MemberViewModel } from "../../../../viewmode import { memberView } from "../../../../views/memberView"; import SalutationFactory from "../../settings/salutation"; import CommunicationFactory from "./communication"; +import DateMappingHelper from "./dateMappingHelper"; import MembershipFactory from "./membership"; export default abstract class MemberFactory { @@ -59,7 +60,7 @@ export default abstract class MemberFactory { birthdate: record.birthdate, todayAge: record.todayAge, ageThisYear: record.ageThisYear, - exactAge: record.exactAge, + exactAge: DateMappingHelper.mapDate(record.exactAge), }; } } diff --git a/src/factory/admin/club/member/membership.ts b/src/factory/admin/club/member/membership.ts index 72089ae..b71d56c 100644 --- a/src/factory/admin/club/member/membership.ts +++ b/src/factory/admin/club/member/membership.ts @@ -4,6 +4,7 @@ import { MembershipViewModel, } from "../../../../viewmodel/admin/club/member/membership.models"; import { membershipView } from "../../../../views/membershipsView"; +import DateMappingHelper from "./dateMappingHelper"; export default abstract class MembershipFactory { /** @@ -40,7 +41,7 @@ export default abstract class MembershipFactory { return { durationInDays: record.durationInDays, durationInYears: record.durationInYears, - exactDuration: record.exactDuration.toString(), + exactDuration: DateMappingHelper.mapDate(record.exactDuration), status: record.status, statusId: record.statusId, memberId: record.memberId, diff --git a/src/migrations/baseSchemaTables/member.ts b/src/migrations/baseSchemaTables/member.ts index 422f3cd..c5f304b 100644 --- a/src/migrations/baseSchemaTables/member.ts +++ b/src/migrations/baseSchemaTables/member.ts @@ -336,7 +336,7 @@ export const member_executive_positions_view_postgres = new View({ "member"."birthdate" AS "memberBirthdate", "salutation"."salutation" AS "memberSalutation", SUM(COALESCE("memberExecutivePositions"."end", CURRENT_DATE) - "memberExecutivePositions"."start") AS "durationInDays", - SUM(EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM member.birthdate)) AS "durationInYears", + SUM(EXTRACT(YEAR FROM AGE(COALESCE("memberExecutivePositions"."end", CURRENT_DATE), "memberExecutivePositions"."start"))) AS "durationInYears", SUM(AGE(COALESCE("memberExecutivePositions"."end", CURRENT_DATE), "memberExecutivePositions"."start")) AS "exactDuration" FROM "member_executive_positions" "memberExecutivePositions" LEFT JOIN "executive_position" "executivePosition" ON "executivePosition"."id"="memberExecutivePositions"."executivePositionId" @@ -415,7 +415,8 @@ export const member_qualifications_view_postgres = new View({ "member"."birthdate" AS "memberBirthdate", "salutation"."salutation" AS "memberSalutation", SUM(COALESCE("memberQualifications"."end", CURRENT_DATE) - "memberQualifications"."start") AS "durationInDays", - SUM(AGE(COALESCE("memberQualifications"."end", CURRENT_DATE), "memberQualifications"."start")) AS "durationInYears" + SUM(EXTRACT(YEAR FROM AGE(COALESCE("memberQualifications"."end", CURRENT_DATE), "memberQualifications"."start"))) AS "durationInYears", + SUM(AGE(COALESCE("memberQualifications"."end", CURRENT_DATE), "memberQualifications"."start")) AS "exactDuration" FROM "member_qualifications" "memberQualifications" LEFT JOIN "qualification" "qualification" ON "qualification"."id"="memberQualifications"."qualificationId" LEFT JOIN "member" "member" ON "member"."id"="memberQualifications"."memberId" @@ -493,7 +494,8 @@ export const membership_view_postgres = new View({ "member"."birthdate" AS "memberBirthdate", "salutation"."salutation" AS "memberSalutation", SUM(COALESCE("membership"."end", CURRENT_DATE) - "membership"."start") AS "durationInDays", - SUM(AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start")) AS "durationInYears" + SUM(EXTRACT(YEAR FROM AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start"))) AS "durationInYears", + SUM(AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start")) AS "exactDuration" FROM "membership" "membership" LEFT JOIN "membership_status" "status" ON "status"."id"="membership"."statusId" LEFT JOIN "member" "member" ON "member"."id"="membership"."memberId" diff --git a/src/views/memberExecutivePositionView.ts b/src/views/memberExecutivePositionView.ts index f82e35c..8b8f328 100644 --- a/src/views/memberExecutivePositionView.ts +++ b/src/views/memberExecutivePositionView.ts @@ -7,7 +7,7 @@ let durationInYears: string; let exactDuration: string; if (DB_TYPE == "postgres") { durationInDays = `SUM(COALESCE("memberExecutivePositions"."end", CURRENT_DATE) - "memberExecutivePositions"."start")`; - durationInYears = `SUM(EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM member.birthdate))`; + durationInYears = `SUM(EXTRACT(YEAR FROM AGE(COALESCE("memberExecutivePositions"."end", CURRENT_DATE), "memberExecutivePositions"."start")))`; exactDuration = `SUM(AGE(COALESCE("memberExecutivePositions"."end", CURRENT_DATE), "memberExecutivePositions"."start"))`; } else if (DB_TYPE == "mysql") { durationInDays = `SUM(DATEDIFF(COALESCE(memberExecutivePositions.end, CURDATE()), memberExecutivePositions.start))`; diff --git a/src/views/memberQualificationsView.ts b/src/views/memberQualificationsView.ts index 45d6089..6f88f39 100644 --- a/src/views/memberQualificationsView.ts +++ b/src/views/memberQualificationsView.ts @@ -7,7 +7,7 @@ let durationInYears: string; let exactDuration: string; if (DB_TYPE == "postgres") { durationInDays = `SUM(COALESCE("memberQualifications"."end", CURRENT_DATE) - "memberQualifications"."start") `; - durationInYears = `SUM(EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM member.birthdate))`; + durationInYears = `SUM(EXTRACT(YEAR FROM AGE(COALESCE("memberQualifications"."end", CURRENT_DATE), "memberQualifications"."start")))`; exactDuration = `SUM(AGE(COALESCE("memberQualifications"."end", CURRENT_DATE), "memberQualifications"."start"))`; } else if (DB_TYPE == "mysql") { durationInDays = `SUM(DATEDIFF(COALESCE(memberQualifications.end, CURDATE()), memberQualifications.start))`; diff --git a/src/views/membershipsView.ts b/src/views/membershipsView.ts index 68d1927..fc38c23 100644 --- a/src/views/membershipsView.ts +++ b/src/views/membershipsView.ts @@ -7,7 +7,7 @@ let durationInYears: string; let exactDuration: string; if (DB_TYPE == "postgres") { durationInDays = `SUM(COALESCE("membership"."end", CURRENT_DATE) - "membership"."start") `; - durationInYears = `SUM(EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM member.birthdate))`; + durationInYears = `SUM(EXTRACT(YEAR FROM AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start")))`; exactDuration = `SUM(AGE(COALESCE("membership"."end", CURRENT_DATE), "membership"."start"))`; } else if (DB_TYPE == "mysql") { durationInDays = `SUM(DATEDIFF(COALESCE(membership.end, CURDATE()), membership.start))`;