62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
import { api, PaginatedResult } from "@/lib/api";
|
|
|
|
export interface OrderItem {
|
|
product_id: string;
|
|
quantity: number;
|
|
}
|
|
|
|
export interface CreateOrderPayload {
|
|
items: OrderItem[];
|
|
notes?: string;
|
|
shipping_address?: string;
|
|
}
|
|
|
|
export interface OrderResult {
|
|
order_id: string;
|
|
amount: number;
|
|
}
|
|
|
|
export interface MyOrderApi {
|
|
id: string;
|
|
status: string;
|
|
total_amount: number;
|
|
shipping_address: string | null;
|
|
notes: string | null;
|
|
created_at: string;
|
|
updated_at: string;
|
|
}
|
|
|
|
export interface AdminOrderApi {
|
|
id: string;
|
|
user_id: string | null;
|
|
status: string;
|
|
total_amount: number;
|
|
shipping_address: string | null;
|
|
notes: string | null;
|
|
created_at: string;
|
|
updated_at: string;
|
|
client_name: string | null;
|
|
client_email: string | null;
|
|
client_phone: string | null;
|
|
}
|
|
|
|
export async function createOrder(payload: CreateOrderPayload): Promise<OrderResult> {
|
|
return api.post<OrderResult>("/orders", payload);
|
|
}
|
|
|
|
export async function listMyOrders(): Promise<PaginatedResult<MyOrderApi>> {
|
|
return api.get<PaginatedResult<MyOrderApi>>("/orders?per_page=50");
|
|
}
|
|
|
|
// ── Admin ─────────────────────────────────────────────────────────────────────
|
|
|
|
export async function adminListOrders(status?: string): Promise<PaginatedResult<AdminOrderApi>> {
|
|
const qs = status ? `?status=${status}&per_page=100` : "?per_page=100";
|
|
return api.get<PaginatedResult<AdminOrderApi>>(`/admin/orders${qs}`);
|
|
}
|
|
|
|
export async function adminUpdateOrderStatus(id: string, status: string): Promise<{ id: string; status: string }> {
|
|
return api.patch<{ id: string; status: string }>(`/admin/orders/${id}/status`, { status });
|
|
}
|
|
|