This commit is contained in:
Iliyan Angelov
2025-11-19 12:27:01 +02:00
parent 2043ac897c
commit 34b4c969d4
469 changed files with 26870 additions and 8329 deletions

View File

@@ -4,7 +4,7 @@ import apiClient from './apiClient';
export interface PaymentData {
booking_id: number;
amount: number;
payment_method: 'cash' | 'bank_transfer' | 'stripe';
payment_method: 'cash' | 'bank_transfer' | 'stripe' | 'paypal';
transaction_id?: string;
notes?: string;
}
@@ -13,7 +13,7 @@ export interface Payment {
id: number;
booking_id: number;
amount: number;
payment_method: 'cash' | 'bank_transfer' | 'credit_card' | 'debit_card' | 'e_wallet' | 'stripe';
payment_method: 'cash' | 'bank_transfer' | 'credit_card' | 'debit_card' | 'e_wallet' | 'stripe' | 'paypal';
payment_type: 'full' | 'deposit' | 'remaining';
deposit_percentage?: number;
payment_status: 'pending' | 'completed' | 'failed' | 'refunded';
@@ -22,6 +22,14 @@ export interface Payment {
notes?: string;
createdAt: string;
updatedAt: string;
booking?: {
id: number;
booking_number: string;
user?: {
name: string;
email?: string;
};
};
}
export interface BankInfo {
@@ -284,6 +292,79 @@ export const confirmStripePayment = async (
};
};
/**
* Create PayPal order
* POST /api/payments/paypal/create-order
*/
export const createPayPalOrder = async (
bookingId: number,
amount: number,
currency: string = 'USD',
returnUrl?: string,
cancelUrl?: string
): Promise<{
success: boolean;
data: {
order_id: string;
approval_url: string;
status: string;
};
message?: string;
}> => {
const response = await apiClient.post(
'/payments/paypal/create-order',
{
booking_id: bookingId,
amount,
currency,
return_url: returnUrl,
cancel_url: cancelUrl,
}
);
// Map backend response format (status: "success") to frontend format (success: true)
const data = response.data;
return {
success: data.status === "success" || data.success === true,
data: data.data || {},
message: data.message,
};
};
/**
* Capture PayPal payment
* POST /api/payments/paypal/capture
*/
export const capturePayPalPayment = async (
orderId: string,
bookingId: number
): Promise<{
success: boolean;
data: {
payment: Payment;
booking: {
id: number;
booking_number: string;
status: string;
};
};
message?: string;
}> => {
const response = await apiClient.post(
'/payments/paypal/capture',
{
order_id: orderId,
booking_id: bookingId,
}
);
// Map backend response format (status: "success") to frontend format (success: true)
const data = response.data;
return {
success: data.status === "success" || data.success === true,
data: data.data || {},
message: data.message,
};
};
export default {
createPayment,
getPayments,
@@ -295,4 +376,6 @@ export default {
getPaymentsByBookingId,
createStripePaymentIntent,
confirmStripePayment,
createPayPalOrder,
capturePayPalPayment,
};