feat: migrate comprehensive courses to sessions

This commit is contained in:
gqt
2026-07-12 20:31:07 +08:00
parent d17b646ae0
commit f3f8aee9a0
10 changed files with 139 additions and 95 deletions
@@ -2,18 +2,26 @@ import { request } from './request'
import { toArray, toNumber, toPageQuery, toPagination } from './mappers'
import { toOrderBrief } from './order'
const toBookingCourse = (backendCourse = {}) => ({
id: backendCourse.id ?? null,
title: backendCourse.title || '',
cover_image: backendCourse.cover_image || '',
coach_name: backendCourse.coach_name || '',
start_at: backendCourse.start_at || '',
end_at: backendCourse.end_at || '',
capacity: toNumber(backendCourse.capacity),
booked_count: toNumber(backendCourse.booked_count),
remaining_count: toNumber(backendCourse.remaining_count),
price: backendCourse.price || '0.00',
courts: toArray(backendCourse.courts)
const toBookingCourt = (backendCourt = {}) => ({
id: backendCourt.id ?? null,
name: backendCourt.name || '',
court_type: backendCourt.court_type || '',
court_type_label: backendCourt.court_type_label || ''
})
const toBookingSession = (backendSession = {}) => ({
id: backendSession.id ?? null,
course_id: backendSession.course_id ?? null,
title: backendSession.title || '',
cover_image: backendSession.cover_image || '',
coach_name: backendSession.coach_name || '',
start_at: backendSession.start_at || '',
end_at: backendSession.end_at || '',
capacity: toNumber(backendSession.capacity),
booked_count: toNumber(backendSession.booked_count),
remaining_count: toNumber(backendSession.remaining_count),
price: backendSession.price || '0.00',
courts: toArray(backendSession.courts).map(toBookingCourt)
})
const toPrivateCourt = (backendCourt = {}) => ({
@@ -25,7 +33,7 @@ const toPrivateCourt = (backendCourt = {}) => ({
const toCourseBooking = (backendBooking = {}) => ({
id: backendBooking.id ?? null,
course_id: backendBooking.course_id ?? null,
session_id: backendBooking.session_id ?? null,
order_id: backendBooking.order_id ?? null,
status: backendBooking.status || '',
status_label: backendBooking.status_label || backendBooking.status || '',
@@ -37,7 +45,7 @@ const toCourseBooking = (backendBooking = {}) => ({
can_cancel: backendBooking.can_cancel === true,
cancel_deadline_at: backendBooking.cancel_deadline_at || null,
created_at: backendBooking.created_at || '',
course: toBookingCourse(backendBooking.course),
session: toBookingSession(backendBooking.session),
order: toOrderBrief(backendBooking.order)
})
@@ -1,6 +1,6 @@
import { request } from './request'
import { compactParams, toArray, toNumber, toPageQuery, toPagination } from './mappers'
import { toCourse } from './course'
import { toSession } from './course'
const toBanner = (backendBanner = {}) => ({
id: backendBanner.id ?? null,
@@ -22,7 +22,7 @@ const toArticle = (backendArticle = {}) => ({
const toHomeContent = (backendData = {}) => ({
banners: toArray(backendData.banners).map(toBanner),
articles: toArray(backendData.articles).map(toArticle),
upcoming_courses: toArray(backendData.upcoming_courses).map(toCourse),
upcoming_courses: toArray(backendData.upcoming_courses).map(toSession),
venue: {
name: backendData.venue?.name || ''
}
@@ -8,27 +8,28 @@ const toCourseCourt = (backendCourt = {}) => ({
court_type_label: backendCourt.court_type_label || ''
})
export const toCourse = (backendCourse = {}) => ({
id: backendCourse.id ?? null,
title: backendCourse.title || '',
cover_image: backendCourse.cover_image || '',
coach_id: backendCourse.coach_id ?? null,
coach_name: backendCourse.coach_name || '',
start_at: backendCourse.start_at || '',
end_at: backendCourse.end_at || '',
capacity: toNumber(backendCourse.capacity),
booked_count: toNumber(backendCourse.booked_count),
remaining_count: toNumber(backendCourse.remaining_count),
price: backendCourse.price || '0.00',
status: backendCourse.status || '',
status_label: backendCourse.status_label || backendCourse.status || '',
courts: toArray(backendCourse.courts).map(toCourseCourt),
detail_html: backendCourse.detail_html || '',
created_at: backendCourse.created_at || '',
updated_at: backendCourse.updated_at || ''
export const toSession = (backendSession = {}) => ({
id: backendSession.id ?? null,
course_id: backendSession.course_id ?? null,
title: backendSession.title || '',
cover_image: backendSession.cover_image || '',
coach_id: backendSession.coach_id ?? null,
coach_name: backendSession.coach_name || '',
start_at: backendSession.start_at || '',
end_at: backendSession.end_at || '',
capacity: toNumber(backendSession.capacity),
booked_count: toNumber(backendSession.booked_count),
remaining_count: toNumber(backendSession.remaining_count),
price: backendSession.price || '0.00',
status: backendSession.status || '',
status_label: backendSession.status_label || backendSession.status || '',
courts: toArray(backendSession.courts).map(toCourseCourt),
detail_html: backendSession.detail_html || '',
created_at: backendSession.created_at || '',
updated_at: backendSession.updated_at || ''
})
const toCourseQuery = (params = {}) => compactParams({
const toSessionQuery = (params = {}) => compactParams({
...toPageQuery(params),
date: params.date,
coach_id: params.coachId || params.coach_id,
@@ -36,22 +37,22 @@ const toCourseQuery = (params = {}) => compactParams({
})
export const courseApi = {
getCourses(params = {}) {
getSessions(params = {}) {
return request({
url: '/api/courses',
data: toCourseQuery(params)
}).then((data) => toPagination(data, toCourse))
url: '/api/sessions',
data: toSessionQuery(params)
}).then((data) => toPagination(data, toSession))
},
getCourseDetail(id) {
getSessionDetail(id) {
return request({
url: `/api/courses/${id}`
}).then(toCourse)
url: `/api/sessions/${id}`
}).then(toSession)
},
createCourseBooking(courseId) {
createCourseBooking(sessionId) {
return request({
url: '/api/bookings/course',
method: 'POST',
data: { course_id: courseId }
data: { session_id: sessionId }
})
}
}