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) { console.log("error", error); (0, error_handler_1.handleError)(error, res); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2xveWFsdHktZXZlbnQvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFNQSxrQkFrSkM7QUFFRCxvQkFXQztBQXBLRCxzREFBMEQ7QUFFMUQsZ0VBQTJEO0FBQzNELHNFQUFzRTtBQUUvRCxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsSUFBSSxDQUFDO1FBQ0gsTUFBTSxvQkFBb0IsR0FDeEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsd0JBQWMsQ0FBQyxDQUFDO1FBRXBDLHdDQUF3QztRQUN4QyxNQUFNLEVBQ0osS0FBSyxHQUFHLElBQUksRUFDWixNQUFNLEdBQUcsR0FBRyxFQUNaLE1BQU0sRUFDTixhQUFhLEVBQ2IsTUFBTSxFQUNOLE9BQU8sR0FBRyxZQUFZLEVBQ3RCLFVBQVUsR0FBRyxNQUFNLEdBQ3BCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUVkLHdDQUF3QztRQUN4QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUNoRCxHQUFHLENBQ0osQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQWdCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXRFLGtCQUFrQjtRQUNsQixJQUFJLE1BQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFnQixDQUFDLEVBQUUsQ0FBQztZQUM5RCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxD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