Files

102 lines
3.1 KiB
TypeScript

import { api } from '@/lib/api'
import type {
PaginatedResponse,
SaleResponse,
OrderResponse,
OrderStatus,
PaymentResponse,
SaleStatus,
PaymentStatus,
PaymentMethod,
} from '@/types/api'
import type { PageParams } from './master'
// ─── Sales ────────────────────────────────────────────────────────────────────
export interface SaleItemBody {
itemId: string
quantity: number
unitPrice: number
}
export interface SaleBody {
storeId: string
saleDate: string
rideId?: string | null
fulfillImmediately?: boolean
items: SaleItemBody[]
// TEMPORARY: required while auth doesn't resolve a logged-in user server-side — see testbug.md #28.
createdByUserId: string
}
export interface SaleListParams extends PageParams {
storeId?: string
status?: SaleStatus
paymentStatus?: PaymentStatus
rideId?: string
from?: string
to?: string
}
export const sales = {
list: (params?: SaleListParams) =>
api.get<PaginatedResponse<SaleResponse>>('/sales', { params }).then(r => r.data),
get: (id: string) =>
api.get<SaleResponse>(`/sales/${id}`).then(r => r.data),
create: (body: SaleBody) =>
api.post<SaleResponse>('/sales', body).then(r => r.data),
cancel: (id: string) =>
api.patch<SaleResponse>(`/sales/${id}/cancel`).then(r => r.data),
}
// ─── Orders ───────────────────────────────────────────────────────────────────
// GET /orders takes no query params and returns a plain array — no server-side
// filtering/pagination exists on the backend, unlike Sales/Payments.
export const orders = {
list: () =>
api.get<OrderResponse[]>('/orders').then(r => r.data),
get: (id: string) =>
api.get<OrderResponse>(`/orders/${id}`).then(r => r.data),
update: (id: string, status: OrderStatus) =>
api.put<OrderResponse>(`/orders/${id}`, { status }).then(r => r.data),
delete: (id: string) =>
api.delete(`/orders/${id}`),
}
// ─── Payments ─────────────────────────────────────────────────────────────────
export interface PaymentBody {
saleId: string
amount: number
method: PaymentMethod
// TEMPORARY: required while auth doesn't resolve a logged-in user server-side — see testbug.md #28.
collectedByUserId: string
}
export interface PaymentListParams extends PageParams {
storeId?: string
saleId?: string
method?: PaymentMethod
from?: string
to?: string
}
export const payments = {
list: (params?: PaymentListParams) =>
api.get<PaginatedResponse<PaymentResponse>>('/payments', { params }).then(r => r.data),
get: (id: string) =>
api.get<PaymentResponse>(`/payments/${id}`).then(r => r.data),
create: (body: PaymentBody) =>
api.post<PaymentResponse>('/payments', body).then(r => r.data),
}