UNPKG

@devx-commerce/plugin-loyalty

Version:

A starter for Medusa plugins.

82 lines 7.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.config = void 0; exports.default = loyaltyMonthlyReportJob; const utils_1 = require("@medusajs/framework/utils"); const core_flows_1 = require("@medusajs/medusa/core-flows"); const generate_monthly_report_1 = require("../workflows/points/generate-monthly-report"); async function loyaltyMonthlyReportJob(container) { const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER); try { // Check if today is the 1st of the month in IST // Schedule runs daily to avoid Node.js setTimeout 32-bit overflow for monthly crons const now = new Date(); const istDay = new Intl.DateTimeFormat("en-CA", { timeZone: "Asia/Kolkata", day: "2-digit" }).format(now); if (istDay !== "01") { return; } const formatter = new Intl.DateTimeFormat("en-CA", { timeZone: "Asia/Kolkata", year: "numeric", month: "2-digit", day: "2-digit", }); const [year, month] = formatter.format(new Date()).split("-").map(Number); const lastDayPrevMonth = new Date(year, month - 1, 0); const end_date = formatter.format(lastDayPrevMonth); const fileMonth = end_date.slice(0, 7); const start_date = `${year}-01-01`; const { result } = await (0, generate_monthly_report_1.generateMonthlyReportWorkflow)(container).run({ input: { start_date, end_date }, }); const fileName = `loyalty-reports/loyalty-points-report-${fileMonth}.csv`; // Upload CSV to S3 const { result: uploadResult } = await (0, core_flows_1.uploadFilesWorkflow)(container).run({ input: { files: [ { filename: fileName, mimeType: "text/csv", content: result.csv, access: "private", }, ], }, }); const fileKey = uploadResult[0].id; // Generate presigned download URL const fileService = container.resolve(utils_1.Modules.FILE); const s3ProviderService = fileService.getProvider(); const downloadUrl = await s3ProviderService.getPresignedDownloadUrl({ fileKey, }); // Send email notification const recipientEmails = process.env.LOYALTY_REPORT_EMAIL?.split(",").map(e => e.trim()).filter(Boolean); if (!recipientEmails?.length) { logger.error("[loyalty-monthly-report]: LOYALTY_REPORT_EMAIL env not set, skipping email"); } else { const notificationService = container.resolve(utils_1.Modules.NOTIFICATION); await notificationService.createNotifications(recipientEmails.map((email) => ({ to: email, channel: "email", template: "Loyalty Monthly Report", idempotency_key: `loyalty_monthly_report_${fileMonth}_${email}`, data: { from: "admin" }, content: { subject: `Loyalty Points Report`, html: `Hi,<br><br>The loyalty points report for the period <strong>${start_date.split("-").reverse().join("/")} </strong> to <strong>${end_date.split("-").reverse().join("/")}</strong> has been generated and is ready for download.<br><br>Please note that the download link is valid for a limited time, so we recommend downloading the file at your earliest convenience.<br><br>You can download the report using the link below:<br><a href="${downloadUrl}">Report</a><br><br>Regards,<br>The Whole Truth`, }, }))); } } catch (error) { logger.error("[loyalty-monthly-report]: Failed to generate report", error); throw error; } } exports.config = { name: "loyalty-monthly-report", schedule: "0 3 * * *", // Daily at 3:00 AM UTC, job self-checks for 1st of month }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG95YWx0eS1tb250aGx5LXJlcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9qb2JzL2xveWFsdHktbW9udGhseS1yZXBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EsMENBaUZDO0FBckZELHFEQUErRTtBQUMvRSw0REFBa0U7QUFDbEUseUZBQTRGO0FBRTdFLEtBQUssVUFBVSx1QkFBdUIsQ0FDbkQsU0FBMEI7SUFFMUIsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVuRSxJQUFJLENBQUM7UUFDSCxnREFBZ0Q7UUFDaEQsb0ZBQW9GO1FBQ3BGLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFHLElBQUksTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3BCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRTtZQUNqRCxRQUFRLEVBQUUsY0FBYztZQUN4QixJQUFJLEVBQUUsU0FBUztZQUNmLEtBQUssRUFBRSxTQUFTO1lBQ2hCLEdBQUcsRUFBRSxTQUFTO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxJQUFJ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