feat: migrate comprehensive venue module

This commit is contained in:
gqt
2026-06-08 20:54:25 +08:00
parent c9650b0db1
commit 8e1443f7e5
43 changed files with 5017 additions and 0 deletions
@@ -0,0 +1,80 @@
import { request } from './request'
import { compactParams, toArray, toNumber } from './mappers'
import { toPrivateBooking } from './booking'
import { toOrderBrief } from './order'
const toQuoteCourt = (backendCourt = {}) => ({
id: backendCourt.id ?? null,
name: backendCourt.name || '',
court_type: backendCourt.court_type || '',
court_type_label: backendCourt.court_type_label || ''
})
const toPrivateQuote = (backendQuote = {}) => ({
amount: backendQuote.amount || '0.00',
unit_count: toNumber(backendQuote.unit_count),
start_at: backendQuote.start_at || '',
end_at: backendQuote.end_at || '',
courts: toArray(backendQuote.courts).map(toQuoteCourt)
})
const toPrivateCreateResult = (backendData = {}) => ({
booking: toPrivateBooking(backendData.booking),
order: toOrderBrief(backendData.order)
})
const toPrivateTimeOption = (backendOption = {}) => ({
start_at: backendOption.start_at || '',
end_at: backendOption.end_at || '',
available_court_count: toNumber(backendOption.available_court_count),
available_courts: toArray(backendOption.available_courts).map(toQuoteCourt)
})
const toPrivateBookingOptions = (backendData = {}) => ({
date: backendData.date || '',
court_type: backendData.court_type || '',
court_type_label: backendData.court_type_label || '',
open_time: backendData.open_time || '',
close_time: backendData.close_time || '',
unit_price: backendData.unit_price || '0.00',
duration_units: toNumber(backendData.duration_units, 2),
duration_minutes: toNumber(backendData.duration_minutes, 60),
amount_per_court: backendData.amount_per_court || '0.00',
total_court_count: toNumber(backendData.total_court_count),
time_options: toArray(backendData.time_options).map(toPrivateTimeOption)
})
export const privateBookingApi = {
getPrivateBookingOptions(params = {}) {
return request({
url: '/api/bookings/private/options',
data: compactParams({
date: params.date,
court_type: params.courtType || params.court_type,
duration_units: params.durationUnits || params.duration_units
})
}).then(toPrivateBookingOptions)
},
quotePrivateBooking(payload = {}) {
return request({
url: '/api/bookings/private/quote',
method: 'POST',
data: {
court_ids: toArray(payload.court_ids),
start_at: payload.start_at,
end_at: payload.end_at
}
}).then(toPrivateQuote)
},
createPrivateBooking(payload = {}) {
return request({
url: '/api/bookings/private',
method: 'POST',
data: {
court_ids: toArray(payload.court_ids),
start_at: payload.start_at,
end_at: payload.end_at
}
}).then(toPrivateCreateResult)
}
}