// @flow import debug from "debug"; import mailer from "./mailer"; import { Collection, Team } from "./models"; import { archiveCollections } from "./utils/zip"; import { createQueue } from "./utils/queue"; const log = debug("logistics"); const logisticsQueue = createQueue("logistics"); const queueOptions = { attempts: 2, removeOnComplete: true, backoff: { type: "exponential", delay: 60 * 1000, }, }; async function exportAndEmailCollections(teamId: string, email: string) { log("Archiving team", teamId); const team = await Team.findByPk(teamId); const collections = await Collection.findAll({ where: { teamId }, order: [["name", "ASC"]], }); const filePath = await archiveCollections(collections); log("Archive path", filePath); mailer.export({ to: email, attachments: [ { filename: `${team.name} Export.zip`, path: filePath, }, ], }); } logisticsQueue.process(async job => { log("Process", job.data); switch (job.data.type) { case "export-collections": return await exportAndEmailCollections(job.data.teamId, job.data.email); default: } }); export const exportCollections = (teamId: string, email: string) => { logisticsQueue.add( { type: "export-collections", teamId, email, }, queueOptions ); };