updates on the patch updats on the multiple order

This commit is contained in:
2026-08-28 15:34:06 +05:30
parent 904cbd1085
commit 7d72e3a068
2 changed files with 50 additions and 4 deletions

View File

@@ -434,9 +434,52 @@ export const createExpressBooking = async (data) => {
};
export const createExpressBookingBulk = async (bookings) => {
// Max 200 per call; response carries per-row results.
const response = await doormileAxios.post('/admin/expressbooking/bulk', { bookings });
return response.data;
const BATCH_SIZE = 200;
const list = Array.isArray(bookings) ? bookings : [];
if (list.length <= BATCH_SIZE) {
const response = await doormileAxios.post('/admin/expressbooking/bulk', { bookings: list });
return response.data;
}
// Automatic chunking for requests exceeding the backend's 200 per-call limit (e.g. 1,000 orders)
const chunks = [];
for (let i = 0; i < list.length; i += BATCH_SIZE) {
chunks.push(list.slice(i, i + BATCH_SIZE));
}
const results = [];
let totalCreated = 0;
let lastErrorMessage = '';
for (const chunk of chunks) {
try {
const response = await doormileAxios.post('/admin/expressbooking/bulk', { bookings: chunk });
const body = response.data || {};
results.push(body);
if (body.success !== false) {
totalCreated += chunk.length;
} else {
lastErrorMessage = body.message || 'One batch failed';
}
} catch (err) {
lastErrorMessage = err.response?.data?.message || err.message || 'Batch request failed';
results.push({ success: false, message: lastErrorMessage });
}
}
const anySuccess = totalCreated > 0;
const allSuccess = totalCreated === list.length;
return {
success: anySuccess,
message: allSuccess
? `${list.length} orders created successfully`
: `${totalCreated} of ${list.length} orders created${lastErrorMessage ? ` (${lastErrorMessage})` : ''}`,
data: results.flatMap((r) => r.data || []),
total: totalCreated,
batches: chunks.length
};
};
export const getBooking = async (id) => {

View File

@@ -477,11 +477,14 @@ export default function MultipleOrders() {
setIsSubmitting(true);
try {
if (bookings.length > 200) {
OpenToast(`Creating ${bookings.length} orders in ${Math.ceil(bookings.length / 200)} batches...`, 'info', 3000);
}
const res = await createExpressBookingBulk(bookings);
if (res?.success) {
queryClient.invalidateQueries({ queryKey: ['doormile', 'bookings'] });
queryClient.invalidateQueries({ queryKey: ['ordersBulk'] });
OpenToast(`${bookings.length} Orders created successfully`, 'success', 2500);
OpenToast(`${res.total || bookings.length} orders created successfully`, 'success', 2500);
navigate('/doormile/orders');
} else {
OpenToast(res?.message || 'Bulk order creation failed', 'error', 3500);