refactor: modularize API client by splitting resources into individual files and standardizing HTTP request handling.

This commit is contained in:
Jose Selesan
2026-04-20 16:05:37 -03:00
parent 28fd51f926
commit 34cb63364c
11 changed files with 327 additions and 267 deletions

View File

@@ -0,0 +1,60 @@
import type {
AdminBooking,
CreateAdminBookingInput,
CreatePublicBookingInput,
PublicAvailabilityResponse,
PublicBooking,
PublicBookingConfirmation,
UpdateAdminBookingStatusInput,
} from '@repo/api-contract';
import { http } from '../http';
export async function getAvailability(
complexSlug: string,
params: { date: string; sportId?: string }
) {
const response = await http.get<PublicAvailabilityResponse>(
`/api/public-bookings/complex/${complexSlug}/availability`,
{ params }
);
return response.data;
}
export async function createPublic(complexSlug: string, payload: CreatePublicBookingInput) {
const response = await http.post<PublicBooking>(
`/api/public-bookings/complex/${complexSlug}`,
payload
);
return response.data;
}
export async function getConfirmation(complexSlug: string, bookingCode: string) {
const response = await http.get<PublicBookingConfirmation>(
`/api/public-bookings/complex/${complexSlug}/confirmation/${bookingCode}`
);
return response.data;
}
export async function listByComplex(complexId: string, params: { fromDate: string }) {
const response = await http.get<{ bookings: AdminBooking[] }>(
`/api/admin-bookings/complex/${complexId}`,
{ params }
);
return response.data;
}
export async function createAdmin(complexId: string, payload: CreateAdminBookingInput) {
const response = await http.post<AdminBooking>(
`/api/admin-bookings/complex/${complexId}`,
payload
);
return response.data;
}
export async function updateStatus(bookingId: string, payload: UpdateAdminBookingStatusInput) {
const response = await http.patch<AdminBooking>(
`/api/admin-bookings/${bookingId}/status`,
payload
);
return response.data;
}