This commit is contained in:
Iliyan Angelov
2025-11-17 18:26:30 +02:00
parent 48353cde9c
commit 0c59fe1173
2535 changed files with 278997 additions and 2480 deletions

View File

@@ -4,7 +4,7 @@ import apiClient from './apiClient';
export interface PaymentData {
booking_id: number;
amount: number;
payment_method: 'cash' | 'bank_transfer';
payment_method: 'cash' | 'bank_transfer' | 'stripe';
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';
payment_method: 'cash' | 'bank_transfer' | 'credit_card' | 'debit_card' | 'e_wallet' | 'stripe';
payment_type: 'full' | 'deposit' | 'remaining';
deposit_percentage?: number;
payment_status: 'pending' | 'completed' | 'failed' | 'refunded';
@@ -159,6 +159,38 @@ export const notifyPaymentCompletion = async (
return response.data;
};
/**
* Get all payments (with optional filters)
* GET /api/payments
*/
export const getPayments = async (params?: {
booking_id?: number;
status?: string;
page?: number;
limit?: number;
}): Promise<{
success: boolean;
data: {
payments: Payment[];
pagination?: {
total: number;
page: number;
limit: number;
totalPages: number;
};
};
message?: string;
}> => {
const response = await apiClient.get('/payments', { params });
// 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 || { payments: [] },
message: data.message,
};
};
/**
* Get payments for a booking
* GET /api/payments/booking/:bookingId
@@ -173,16 +205,94 @@ export const getPaymentsByBookingId = async (
const response = await apiClient.get(
`/payments/booking/${bookingId}`
);
return response.data;
// 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 || { payments: [] },
message: data.message,
};
};
/**
* Create Stripe payment intent
* POST /api/payments/stripe/create-intent
*/
export const createStripePaymentIntent = async (
bookingId: number,
amount: number,
currency: string = 'usd'
): Promise<{
success: boolean;
data: {
client_secret: string;
payment_intent_id: string;
publishable_key: string;
};
message?: string;
}> => {
const response = await apiClient.post(
'/payments/stripe/create-intent',
{
booking_id: bookingId,
amount,
currency,
}
);
// 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,
};
};
/**
* Confirm Stripe payment
* POST /api/payments/stripe/confirm
*/
export const confirmStripePayment = async (
paymentIntentId: 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/stripe/confirm',
{
payment_intent_id: paymentIntentId,
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,
getPaymentByBookingId,
confirmBankTransfer,
getBankTransferInfo,
confirmDepositPayment,
notifyPaymentCompletion,
getPaymentsByBookingId,
createStripePaymentIntent,
confirmStripePayment,
};