method/purge.js

/* eslint-disable promise/always-return */
/**
 * @module method/purge
 */

const admin = require('firebase-admin');

const db = admin.firestore();

/**
 * Purge all invite codes that are past their expiration for a month
 */
const purge = () => {
  // Assign purgable time
  const allowanceInHours = 720; // 30 days with 24 hours a day
  const allowanceInMill = allowanceInHours * 3600 * 1000;
  const purgableTargetTimestamp = Date.now() - allowanceInMill;

  console.log(purgableTargetTimestamp);

  // Assign reference to invite code codes collection
  const inviteCodeRef = db.collection('appGlobalSettings')
      .doc('inviteCode')
      .collection('codes');

  // Assign query reference to purgable invite code
  const purgableInviteCodeRef = inviteCodeRef.where('expiration', '<', new Date(purgableTargetTimestamp));

  // Delete purgable invite code documents
  return purgableInviteCodeRef.get().then((purgableSnapshot) => {
    purgableSnapshot.forEach((inviteCodeDoc) => {
      // Delete document
      inviteCodeDoc.ref.delete();

      // Purge function
      console.info('[Success] Performed daily invite code purge');

      // Return
      return null;
    });
  });
};

module.exports = purge;