import { member } from "../../../../entity/club/member/member"; import { MemberStatisticsViewModel, MemberViewModel } from "../../../../viewmodel/admin/club/member/member.models"; import { memberView } from "../../../../views/memberView"; import SalutationFactory from "../../configuration/salutation"; import CommunicationFactory from "./communication"; import DateMappingHelper from "./dateMappingHelper"; import MembershipFactory from "./membership"; export default abstract class MemberFactory { /** * @description map record to member * @param {member} record * @returns {MemberViewModel} */ public static mapToSingle(record: member): MemberViewModel { return { id: record?.id, salutation: SalutationFactory.mapToSingle(record?.salutation), firstname: record?.firstname, lastname: record?.lastname, nameaffix: record?.nameaffix, birthdate: record?.birthdate, internalId: record.internalId, firstMembershipEntry: record?.firstMembershipEntry ? MembershipFactory.mapToSingle(record.firstMembershipEntry) : null, lastMembershipEntry: record?.lastMembershipEntry ? MembershipFactory.mapToSingle(record.lastMembershipEntry) : null, sendNewsletter: record?.sendNewsletter ? CommunicationFactory.mapToSingle(record.sendNewsletter, true) : null, preferredCommunication: record?.preferredCommunication ? CommunicationFactory.mapToBase(record.preferredCommunication) : null, smsAlarming: record?.smsAlarming ? CommunicationFactory.mapToBase(record.smsAlarming) : null, }; } /** * @description map records to member * @param {Array} records * @returns {Array} */ public static mapToBase(records: Array): Array { return records.map((r) => this.mapToSingle(r)); } /** * @description map view record to MemberMembershipStatisticsViewModel * @param {memberView} record * @returns {MemberStatisticsViewModel} */ public static mapToMemberStatistic(record: memberView): MemberStatisticsViewModel { return { id: record.id, internalId: record.internalId, salutation: record.salutation, firstname: record.firstname, lastname: record.lastname, nameaffix: record.nameaffix, birthdate: record.birthdate, todayAge: record.todayAge, ageThisYear: record.ageThisYear, exactAge: DateMappingHelper.mapDate(record.exactAge), }; } }