ff-admin-server/src/views/membershipsView.ts
2024-12-18 12:55:03 +01:00

50 lines
1.3 KiB
TypeScript

import { DataSource, ViewColumn, ViewEntity } from "typeorm";
import { membership } from "../entity/membership";
import { Salutation } from "../enums/salutation";
@ViewEntity({
expression: (datasource: DataSource) =>
datasource
.getRepository(membership)
.createQueryBuilder("membership")
.select("status.id", "statusId")
.addSelect("status.status", "status")
.addSelect("member.id", "memberId")
.addSelect("member.salutation", "memberSalutation")
.addSelect("member.firstname", "memberFirstname")
.addSelect("member.lastname", "memberLastname")
.addSelect("member.nameaffix", "memberNameaffix")
.addSelect("member.birthdate", "memberBirthdate")
.addSelect("SUM(TIMESTAMPDIFF(DAY, membership.start, COALESCE(membership.end, CURRENT_DATE)))", "durationInDays")
.leftJoin("membership.status", "status")
.leftJoin("membership.member", "member")
.groupBy("status.id"),
})
export class membershipView {
@ViewColumn()
durationInDays: number;
@ViewColumn()
status: string;
@ViewColumn()
statusId: number;
@ViewColumn()
memberId: number;
@ViewColumn()
memberSalutation: Salutation;
@ViewColumn()
memberFirstname: string;
@ViewColumn()
memberLastname: string;
@ViewColumn()
memberNameaffix: string;
@ViewColumn()
memberBirthdate: Date;
}