Advertisement
Guest User

Untitled

a guest
Sep 17th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.17 KB | None | 0 0
  1. import * as functions from 'firebase-functions';
  2. import * as admin from 'firebase-admin';
  3. import MailchimpApi = require('mailchimp-api-v3');
  4. import md5 = require('crypto-js/md5');
  5.  
  6. const CRON_SCHEDULE = '* * * * *';
  7.  
  8. export const cronMailchimp = functions.region('europe-west1').pubsub
  9. .schedule(CRON_SCHEDULE).onRun(async context => {
  10. const { audience, apikey } = functions.config().mailchimp;
  11. if (!audience || !apikey) {
  12. throw new Error(`Missing mailchimp config! Current config is ${JSON.stringify(functions.config(), null, 2)}`);
  13. }
  14.  
  15. const mailchimpApi = new MailchimpApi(apikey);
  16. const userRefs = await admin.firestore().collection('users').listDocuments();
  17. for (const userRef of userRefs) {
  18. const userDoc = await userRef.get();
  19. const user = userDoc.data();
  20. console.log(`mailchimp.ts - handling user ${userRef.id} with email ${user.email}`);
  21.  
  22. try {
  23. await patchContact(mailchimpApi, audience, user);
  24. console.log(`mailchimp.ts - user updated!`, );
  25. } catch (e) {
  26. console.log(`mailchimp.ts - catched updated error (probably contact does not exist)`, e);
  27. try {
  28. await createContact(mailchimpApi, AUDIENCE_ID, user);
  29.  
  30. console.log(`mailchimp.ts - user created!`, );
  31. } catch (e) {
  32. console.error(`mailchimp.ts - failed to create contact!`, e);
  33. }
  34. }
  35. }
  36. })
  37.  
  38. const createContact = async (mailchimpApi, audienceId, user) => {
  39. const body = {
  40. email_address: user.email,
  41. status: "subscribed",
  42. merge_fields: {
  43. FNAME: user.name,
  44. LNAME: user.surname
  45. }
  46. };
  47.  
  48. return mailchimpApi.post(`/lists/${audienceId}/members/`, body);
  49. }
  50.  
  51. const patchContact = async (mailchimpApi, audienceId, user) => {
  52. const body = {
  53. merge_fields: {
  54. FNAME: user.name,
  55. LNAME: user.surname
  56. }
  57. };
  58. const memberId = md5(user.email.toLowerCase());
  59.  
  60. return mailchimpApi.patch(`/lists/${audienceId}/members/${memberId}`, body);
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement