@m-nasser-m/medusa-payment-vodafone-cash-manual
Version:
Vodafone Cash manual payment provider for Medusa
138 lines • 10 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.GET = GET;
exports.POST = POST;
exports.PATCH = PATCH;
const zod_1 = require("zod");
// Validation schema for payment verification
const verifyPaymentSchema = zod_1.z.object({
payment_id: zod_1.z.string().min(1, "Payment ID is required"),
transaction_reference: zod_1.z.string().optional(),
verified: zod_1.z.boolean(),
admin_notes: zod_1.z.string().optional()
});
// Validation schema for payment status update
const updatePaymentStatusSchema = zod_1.z.object({
payment_id: zod_1.z.string().min(1, "Payment ID is required"),
status: zod_1.z.enum(["pending", "verified", "failed", "refunded", "canceled"]),
admin_notes: zod_1.z.string().optional()
});
async function GET(req, res) {
try {
// This endpoint could be used to list pending Vodafone Cash payments
const { status, limit = 50, offset = 0 } = req.query;
// In a real implementation, you would query the database for payments
// For now, return mock data structure
const mockPayments = {
payments: [
{
id: "vodafone_123456789",
provider_id: "vodafone-cash",
amount: 1000,
currency_code: "EGP",
phone_number: "0100 123 4567",
customer_name: "John Doe",
status: "pending",
created_at: new Date().toISOString(),
payment_instructions: {
message: "Please send 1000 EGP via Vodafone Cash",
phone_number: "0100 123 4567"
}
}
],
count: 1,
offset: Number(offset),
limit: Number(limit)
};
res.json({
success: true,
data: mockPayments
});
}
catch (error) {
res.status(500).json({
success: false,
error: "Failed to fetch payments",
message: error.message
});
}
}
// Verify a Vodafone Cash payment
async function POST(req, res) {
try {
const validatedData = verifyPaymentSchema.parse(req.body);
const { payment_id, transaction_reference, verified, admin_notes } = validatedData;
// In a real implementation, you would:
// 1. Update the payment status in the database
// 2. Trigger order completion if verified
// 3. Send notifications to customer
const verificationResult = {
payment_id,
status: verified ? "verified" : "failed",
transaction_reference,
admin_notes,
verified_at: new Date().toISOString(),
verified_by: "admin" // In real app, get from authenticated user context
};
res.json({
success: true,
message: verified ? "Payment verified successfully" : "Payment marked as failed",
data: verificationResult
});
}
catch (error) {
if (error instanceof zod_1.z.ZodError) {
return res.status(400).json({
success: false,
error: "Validation failed",
details: error.errors.map(err => ({
field: err.path.join('.'),
message: err.message
}))
});
}
res.status(500).json({
success: false,
error: "Failed to verify payment",
message: error.message
});
}
}
// Update payment status
async function PATCH(req, res) {
try {
const validatedData = updatePaymentStatusSchema.parse(req.body);
const { payment_id, status, admin_notes } = validatedData;
// In a real implementation, you would update the payment in the database
const updatedPayment = {
payment_id,
status,
admin_notes,
updated_at: new Date().toISOString(),
updated_by: "admin" // In real app, get from authenticated user context
};
res.json({
success: true,
message: `Payment status updated to ${status}`,
data: updatedPayment
});
}
catch (error) {
if (error instanceof zod_1.z.ZodError) {
return res.status(400).json({
success: false,
error: "Validation failed",
details: error.errors.map(err => ({
field: err.path.join('.'),
message: err.message
}))
});
}
res.status(500).json({
success: false,
error: "Failed to update payment status",
message: error.message
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BsdWdpbi9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWtCQSxrQkEyQ0M7QUFHRCxvQkE2Q0M7QUFHRCxzQkF3Q0M7QUF2SkQsNkJBQXdCO0FBRXhCLDZDQUE2QztBQUM3QyxNQUFNLG1CQUFtQixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDbkMsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLHdCQUF3QixDQUFDO0lBQ3ZELHFCQUFxQixFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDNUMsUUFBUSxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUU7SUFDckIsV0FBVyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDbkMsQ0FBQyxDQUFDO0FBRUgsOENBQThDO0FBQzlDLE1BQU0seUJBQXlCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN6QyxVQUFVLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsd0JBQXdCLENBQUM7SUFDdkQsTUFBTSxFQUFFLE9BQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekUsV0FBVyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDbkMsQ0FBQyxDQUFDO0FBRUksS0FBSyxVQUFVLEdBQUcsQ0FDdkIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsSUFBSSxDQUFDO1FBQ0gscUVBQXFFO1FBQ3JFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxHQUFHLEVBQUUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEdB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