abmp-npm 1.7.2 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,210 +0,0 @@
1
- import { generateGeoHash } from './utils.js';
2
- import {
3
- ADDRESS_STATUS_TYPES,
4
- DEFAULT_MEMBER_DISPLAY_SETTINGS,
5
- MEMBER_ACTIONS,
6
- } from './consts.js';
7
- import {
8
- determineAddressDisplayStatus,
9
- isValidArray,
10
- processInterests,
11
- createFullName,
12
- } from './utils.js';
13
- import { findMemberById } from './utils.js';
14
-
15
- /**
16
- * Validates core member data requirements
17
- * @param {Object} inputMemberData - Raw member data from API to validate
18
- * @returns {boolean} - True if all required fields are valid, false otherwise
19
- */
20
- const validateCoreMemberData = (inputMemberData) => {
21
- // Check memberid
22
- if (!inputMemberData?.memberid) {
23
- console.warn('validateCoreMemberData: Missing required field - memberid is mandatory');
24
- return false;
25
- }
26
-
27
- // Check email
28
- if (!inputMemberData?.email ||
29
- typeof inputMemberData.email !== 'string' ||
30
- !inputMemberData.email.trim()) {
31
- console.warn('validateCoreMemberData: Missing required field - email (valid string) is mandatory');
32
- return false;
33
- }
34
-
35
- // Check memberships
36
- if (!inputMemberData?.memberships || !Array.isArray(inputMemberData.memberships) || inputMemberData.memberships.length === 0) {
37
- console.warn('validateCoreMemberData: Missing required field - memberships (non-empty array) is mandatory');
38
- return false;
39
- }
40
-
41
- return true;
42
- };
43
-
44
- /**
45
- * Creates base member data structure with core properties
46
- * @param {Object} inputMemberData - Raw member data from API
47
- * @param {Object} existingDbMember - Existing member data from database
48
- * @param {number} currentPageNumber - Current page number being processed
49
- * @returns {Object|null} - Structured base member data or null if required fields are missing
50
- */
51
- const createCoreMemberData = (
52
- inputMemberData,
53
- existingDbMember,
54
- currentPageNumber
55
- ) => {
56
- // Validate required fields
57
- if (!validateCoreMemberData(inputMemberData)) {
58
- return null;
59
- }
60
-
61
- const sanitizedFirstName = inputMemberData.firstname?.trim() || '';
62
- const sanitizedLastName = inputMemberData.lastname?.trim() || '';
63
- const bookingUrl = inputMemberData.migrationData?.schedule_code?.startsWith('http') ? inputMemberData.migrationData?.schedule_code : '';
64
- return {
65
- ...existingDbMember,
66
- memberId: inputMemberData.memberid,
67
- firstName: sanitizedFirstName,
68
- lastName: sanitizedLastName,
69
- fullName: createFullName(sanitizedFirstName, sanitizedLastName),
70
- email: inputMemberData.email.trim(),
71
- phones: inputMemberData.phones || [],
72
- toShowPhone: inputMemberData.migrationData?.show_phone || '',
73
- action: inputMemberData.action,
74
- licenses: inputMemberData.licenses || [],
75
- memberships: inputMemberData.memberships,
76
- pageNumber: currentPageNumber,
77
- optOut: inputMemberData.migrationData?.opted_out || false,
78
- showABMP: inputMemberData.migrationData?.show_member_since || false,
79
- locHash: generateGeoHash(inputMemberData.addresses || []),
80
- ...DEFAULT_MEMBER_DISPLAY_SETTINGS,
81
- isVisible: inputMemberData.action !== MEMBER_ACTIONS.DROP,
82
- url: inputMemberData.url,
83
- bookingUrl,
84
- APIBookingUrl: inputMemberData.migrationData?.schedule_code,//keeping it as a ref if in future they want original
85
- };
86
- };
87
-
88
- /**
89
- * Enriches member data with optional migration properties
90
- * @param {Object} memberDataToUpdate - Member data object to enhance
91
- * @param {Object} migrationData - Migration data containing optional properties
92
- */
93
- const enrichWithMigrationData = (memberDataToUpdate, migrationData) => {
94
- if (!migrationData) return;
95
-
96
- memberDataToUpdate.logoImage = migrationData.logo_url;
97
- memberDataToUpdate.aboutYouHtml = migrationData.detailtext;
98
- memberDataToUpdate.addressInfo = migrationData.addressinfo;
99
-
100
-
101
- if (migrationData.website) {
102
- memberDataToUpdate.website = migrationData.website;
103
- memberDataToUpdate.showWebsite = true;
104
- }
105
-
106
- if (migrationData.interests) {
107
- memberDataToUpdate.areasOfPractices = processInterests(
108
- migrationData.interests
109
- );
110
- }
111
- };
112
-
113
- /**
114
- * Processes multiple addresses with their display statuses
115
- * @param {Array} addressesList - Array of address objects
116
- * @param {Object} displayConfiguration - Address display configuration
117
- * @returns {Array} - Processed addresses with status information
118
- */
119
- const processAddressesWithStatus = (
120
- addressesList,
121
- displayConfiguration = {}
122
- ) => {
123
- if (!isValidArray(addressesList)) {
124
- return [];
125
- }
126
-
127
- return addressesList.map((address) => {
128
- const displayStatus = displayConfiguration[address.key]
129
- ? determineAddressDisplayStatus(displayConfiguration[address.key])
130
- : ADDRESS_STATUS_TYPES.STATE_CITY_ZIP;
131
-
132
- return {
133
- ...address,
134
- addressStatus: displayStatus,
135
- };
136
- });
137
- };
138
-
139
- /**
140
- * Processes and adds address data with proper status
141
- * @param {Object} memberDataToUpdate - Member data object to enhance
142
- * @param {Array} addressesList - Array of address objects
143
- * @param {Object} addressDisplayInfo - Address visibility configuration
144
- */
145
- const enrichWithAddressData = (
146
- memberDataToUpdate,
147
- addressesList,
148
- addressDisplayInfo
149
- ) => {
150
- if (isValidArray(addressesList)) {
151
- memberDataToUpdate.addresses = processAddressesWithStatus(
152
- addressesList,
153
- addressDisplayInfo
154
- );
155
- }
156
- };
157
-
158
- /**
159
- * Generates complete updated member data by combining existing and migration data
160
- * @param {Object} inputMemberData - Raw member data from API
161
- * @param {number} currentPageNumber - Current page number being processed
162
- * @returns {Promise<Object|null>} - Complete updated member data or null if validation fails
163
- */
164
- const generateUpdatedMemberData = async (
165
- inputMemberData,
166
- currentPageNumber,
167
- isVelo = false
168
- ) => {
169
- if (!validateCoreMemberData(inputMemberData)) {
170
- throw new Error('Invalid member data: memberid, email (valid string), and memberships (array) are required');
171
- }
172
-
173
- try {
174
-
175
- const existingDbMember = isVelo? await findMemberById(inputMemberData.memberid) : {};
176
- const updatedMemberData = createCoreMemberData(
177
- inputMemberData,
178
- existingDbMember,
179
- currentPageNumber
180
- );
181
-
182
- // If createCoreMemberData returns null due to validation failure, return null
183
- if (!updatedMemberData) {
184
- return null;
185
- }
186
-
187
- enrichWithMigrationData(updatedMemberData, inputMemberData.migrationData);
188
-
189
- enrichWithAddressData(
190
- updatedMemberData,
191
- inputMemberData.addresses,
192
- inputMemberData.migrationData?.addressinfo
193
- );
194
-
195
- return updatedMemberData;
196
- } catch (error) {
197
- throw error;
198
- }
199
- }
200
-
201
- module.exports = {
202
- validateCoreMemberData,
203
- createCoreMemberData,
204
- enrichWithMigrationData,
205
- processAddressesWithStatus,
206
- enrichWithAddressData,
207
- generateUpdatedMemberData,
208
- };
209
-
210
-