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