| 201 | */ |
| 202 | |
| 203 | const createEventCode = async (eventCodeData) => { |
| 204 | try { |
| 205 | const eventRef = eventModel.doc(eventCodeData.event_id); |
| 206 | const eventSnapshot = await eventRef.get(); |
| 207 | const eventSnapshotData = eventSnapshot.data(); |
| 208 | const createdAndUpdatedAt = admin.firestore.Timestamp.now(); |
| 209 | const docRef = eventCodeModel.doc(eventCodeData.id); |
| 210 | |
| 211 | await docRef.set({ ...eventCodeData, created_at: createdAndUpdatedAt, updated_at: createdAndUpdatedAt }); |
| 212 | |
| 213 | const docSnapshot = await docRef.get(); |
| 214 | const data = docSnapshot.data(); |
| 215 | |
| 216 | const previouslyPresentEventCodes = eventSnapshotData?.event_codes?.by_role?.mavens && [ |
| 217 | ...eventSnapshotData?.event_codes?.by_role?.mavens, |
| 218 | ]; |
| 219 | |
| 220 | if (!data) throw new Error(); |
| 221 | |
| 222 | if (previouslyPresentEventCodes?.length) { |
| 223 | await eventRef.update({ |
| 224 | event_codes: { |
| 225 | by_role: { |
| 226 | mavens: [...previouslyPresentEventCodes, data?.id], |
| 227 | }, |
| 228 | }, |
| 229 | }); |
| 230 | } else { |
| 231 | await eventRef.update({ |
| 232 | event_codes: { |
| 233 | by_role: { |
| 234 | mavens: [data?.id], |
| 235 | }, |
| 236 | }, |
| 237 | }); |
| 238 | } |
| 239 | |
| 240 | const updatedEventRef = eventModel.doc(eventCodeData.event_id); |
| 241 | const updatedEventSnapshot = await updatedEventRef.get(); |
| 242 | const updatedEventSnapshotData = updatedEventSnapshot.data(); |
| 243 | const allEventCodesIdsForMavens = updatedEventSnapshotData?.event_codes?.by_role?.mavens; |
| 244 | |
| 245 | const allEventCodesIdsForMavensPromises = allEventCodesIdsForMavens.map(async (eventCodeRefId) => { |
| 246 | const eventCodeRef = eventCodeModel.doc(eventCodeRefId); |
| 247 | const eventCodeSnapshot = await eventCodeRef.get(); |
| 248 | const eventCodeData = eventCodeSnapshot.data(); |
| 249 | return eventCodeData; |
| 250 | }); |
| 251 | |
| 252 | const allEventCodesForMavens = await Promise.all(allEventCodesIdsForMavensPromises); |
| 253 | |
| 254 | return allEventCodesForMavens; |
| 255 | } catch (error) { |
| 256 | logger.error("Error in creating event code", error); |
| 257 | throw error; |
| 258 | } |
| 259 | }; |
| 260 | |