ff-admin-server/src/factory/admin/club/member/member.ts

66 lines
2.5 KiB
TypeScript

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<member>} records
* @returns {Array<MemberViewModel>}
*/
public static mapToBase(records: Array<member>): Array<MemberViewModel> {
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),
};
}
}