@devx-commerce/plugin-loyalty
Version:
A starter for Medusa plugins.
131 lines • 11.5 kB
JavaScript
;
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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