UNPKG

@devx-commerce/plugin-loyalty

Version:

A starter for Medusa plugins.

131 lines 11.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GET = GET; exports.POST = POST; const loyalty_1 = require("../../../modules/loyalty"); const error_handler_1 = require("../../../utils/error-handler"); const response_handler_1 = require("../../../utils/response-handler"); async function GET(req, res) { try { const loyaltyModuleService = req.scope.resolve(loyalty_1.LOYALTY_MODULE); // Extract and validate query parameters const { limit = "10", offset = "0", status, trigger_event, search, sort_by = "created_at", sort_order = "DESC", } = req.query; // Validate and parse numeric parameters const parsedLimit = Math.min(Math.max(parseInt(limit, 10) || 10, 1), 100); const parsedOffset = Math.max(parseInt(offset, 10) || 0, 0); // Validate status if (status && !["active", "draft"].includes(status)) { return res.status(400).json({ success: false, message: "Invalid status parameter. Must be 'active' or 'draft'", }); } // Validate trigger_event (supports comma-separated values) const validTriggerEvents = [ "order_placed", "order_delivered", "referral_order_placed", "referral_link_redeemed", ]; let parsedTriggerEvents = []; if (trigger_event) { parsedTriggerEvents = trigger_event .split(",") .map((event) => event.trim()) .filter((event) => event.length > 0); const invalidEvents = parsedTriggerEvents.filter((event) => !validTriggerEvents.includes(event)); if (invalidEvents.length > 0) { return res.status(400).json({ success: false, message: `Invalid trigger_event parameter(s): ${invalidEvents.join(", ")}. Must be one of: ${validTriggerEvents.join(", ")}`, }); } } // Validate sort_by const validSortFields = ["created_at", "updated_at", "name", "status"]; if (sort_by && !validSortFields.includes(sort_by)) { return res.status(400).json({ success: false, message: `Invalid sort_by parameter. Must be one of: ${validSortFields.join(", ")}`, }); } // Validate sort_order if (sort_order && !["ASC", "DESC"].includes(sort_order)) { return res.status(400).json({ success: false, message: "Invalid sort_order parameter. Must be 'ASC' or 'DESC'", }); } // Build filter object const filters = {}; if (status) { filters.status = status; } if (parsedTriggerEvents.length > 0) { filters.trigger_event = parsedTriggerEvents.length === 1 ? parsedTriggerEvents[0] : { $in: parsedTriggerEvents }; } // Build search conditions if (search && typeof search === "string" && search.trim().length > 0) { filters.$or = [ { name: { $ilike: `%${search.trim()}%` } }, { description: { $ilike: `%${search.trim()}%` } }, ]; } // Build options object for pagination and sorting const options = { take: parsedLimit, skip: parsedOffset, order: { [sort_by]: sort_order }, }; const events = await loyaltyModuleService.listEvents(filters, options); // Get total count for pagination metadata const [_, total] = await loyaltyModuleService.listAndCountEvents(filters, { take: 0, skip: 0, }); // Calculate pagination metadata const totalPages = Math.ceil(total / parsedLimit); const currentPage = Math.floor(parsedOffset / parsedLimit) + 1; const hasNextPage = currentPage < totalPages; const hasPrevPage = currentPage > 1; const response = { data: events, pagination: { total, total_pages: totalPages, current_page: currentPage, limit: parsedLimit, offset: parsedOffset, has_next_page: hasNextPage, has_prev_page: hasPrevPage, next_page: hasNextPage ? currentPage + 1 : null, prev_page: hasPrevPage ? currentPage - 1 : null, }, filters: { status: status || null, trigger_event: parsedTriggerEvents.length > 0 ? parsedTriggerEvents : null, search: search || null, sort_by: sort_by, sort_order: sort_order, }, }; (0, response_handler_1.sendSuccessResponse)(res, response); } catch (error) { (0, error_handler_1.handleError)(error, res); } } async function POST(req, res) { try { const loyaltyModuleService = req.scope.resolve(loyalty_1.LOYALTY_MODULE); const event = await loyaltyModuleService.createEvents(req.body); (0, response_handler_1.sendSuccessResponse)(res, event); } catch (error) { (0, error_handler_1.handleError)(error, res); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2xveWFsdHktZXZlbnQvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSxrQkFvSkM7QUFFRCxvQkFVQztBQXJLRCxzREFBMEQ7QUFFMUQsZ0VBQTJEO0FBQzNELHNFQUFzRTtBQUUvRCxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsSUFBSSxDQUFDO1FBQ0gsTUFBTSxvQkFBb0IsR0FDeEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsd0JBQWMsQ0FBQyxDQUFDO1FBRXBDLHdDQUF3QztRQUN4QyxNQUFNLEVBQ0osS0FBSyxHQUFHLElBQUksRUFDWixNQUFNLEdBQUcsR0FBRyxFQUNaLE1BQU0sRUFDTixhQUFhLEVBQ2IsTUFBTSxFQUNOLE9BQU8sR0FBRyxZQUFZLEVBQ3RCLFVBQVUsR0FBRyxNQUFNLEdBQ3BCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUVkLHdDQUF3QztRQUN4QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUNoRCxHQUFHLENBQ0osQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQWdCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXRFLGtCQUFrQjtRQUNsQixJQUFJLE1BQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFnQixDQUFDLEVBQUUsQ0FBQztZQUM5RCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUMxQixPQUFPLEVBQUUsS0FBSztnQkFDZCxPQUFPLEVBQUUsdURBQXVEO2FBQ2pFLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCwyREFBMkQ7UUFDM0QsTUFBTSxrQkFBa0IsR0FBRztZQUN6QixjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLHVCQUF1QjtZQUN2Qix3QkFBd0I7U0FDekIsQ0FBQztRQUNGLElBQUksbUJBQW1CLEdBQWEsRUFBRSxDQUFDO1FBQ3ZDLElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsbUJBQW1CLEdBQUksYUFBd0I7aUJBQzVDLEtBQUssQ0FBQyxHQUFHLENBQUM7aUJBQ1YsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQzVCLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUV2QyxNQUFNLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQzlDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDL0MsQ0FBQztZQUVGLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDMUIsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsT0FBTyxFQUFFLHVDQUF1QyxhQUFhLENBQUMsSUFBSSxDQUNoRSxJQUFJLENBQ0wscUJBQXFCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtpQkFDdEQsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFFRCxtQkFBbUI7UUFDbkIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RSxJQUFJLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBaUIsQ0FBQyxFQUFFLENBQUM7WUFDNUQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDMUIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsT0FBTyxFQUFFLDhDQUE4QyxlQUFlLENBQUMsSUFBSSxDQUN6RSxJQUFJLENBQ0wsRUFBRTthQUNKLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxzQkFBc0I7UUFDdEIsSUFBSSxVQUFVLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBb0IsQ0FBQyxFQUFFLENBQUM7WUFDbEUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDMUIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsT0FBTyxFQUFFLHVEQUF1RDthQUNqRSxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsc0JBQXNCO1FBQ3RCLE1BQU0sT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUV4QixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDMUIsQ0FBQztRQUVELElBQUksbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLE9BQU8sQ0FBQyxhQUFhO2dCQUNuQixtQkFBbUIsQ0FBQyxNQUFNLEtBQUssQ0FBQztvQkFDOUIsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztvQkFDeEIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixFQUFFLENBQUM7UUFDckMsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixJQUFJLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyRSxPQUFPLENBQUMsR0FBRyxHQUFHO2dCQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDMUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO2FBQ2xELENBQUM7UUFDSixDQUFDO1FBRUQsa0RBQWtEO1FBQ2xELE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLFlBQVk7WUFDbEIsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFpQixDQUFDLEVBQUUsVUFBNEIsRUFBRTtTQUM3RCxDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXZFLDBDQUEwQztRQUMxQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLE1BQU0sb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFO1lBQ3hFLElBQUksRUFBRSxDQUFDO1lBQ1AsSUFBSSxFQUFFLENBQUM7U0FDUixDQUFDLENBQUM7UUFFSCxnQ0FBZ0M7UUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sV0FBVyxHQUFHLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDN0MsTUFBTSxXQUFXLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUVwQyxNQUFNLFFBQVEsR0FBRztZQUNmLElBQUksRUFBRSxNQUFNO1lBQ1osVUFBVSxFQUFFO2dCQUNWLEtBQUs7Z0JBQ0wsV0FBVyxFQUFFLFVBQVU7Z0JBQ3ZCLFlBQVksRUFBRSxXQUFXO2dCQUN6QixLQUFLLEVBQUUsV0FBVztnQkFDbEIsTUFBTSxFQUFFLFlBQVk7Z0JBQ3BCLGFBQWEsRUFBRSxXQUFXO2dCQUMxQixhQUFhLEVBQUUsV0FBVztnQkFDMUIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDL0MsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTthQUNoRDtZQUNELE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUsTUFBTSxJQUFJLElBQUk7Z0JBQ3RCLGFBQWEsRUFDWCxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSTtnQkFDN0QsTUFBTSxFQUFFLE1BQU0sSUFBSSxJQUFJO2dCQUN0QixPQUFPLEVBQUUsT0FBaUI7Z0JBQzFCLFVBQVUsRUFBRSxVQUFvQjthQUNqQztTQUNGLENBQUM7UUFFRixJQUFBLHNDQUFtQixFQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUEsMkJBQVcsRUFBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztBQUNILENBQUM7QUFFTSxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDaEUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxvQkFBb0IsR0FDeEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsd0JBQWMsQ0FBQyxDQUFDO1FBRXBDLE1BQU0sS0FBSyxHQUFHLE1BQU0sb0JBQW9CLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFXLENBQUMsQ0FBQztRQUN2RSxJQUFBLHNDQUFtQixFQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUEsMkJBQVcsRUFBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztBQUNILENBQUMifQ==