diff --git a/admin-spa/src/lib/api/customers.ts b/admin-spa/src/lib/api/customers.ts new file mode 100644 index 0000000..353e920 --- /dev/null +++ b/admin-spa/src/lib/api/customers.ts @@ -0,0 +1,109 @@ +import { api } from '../api'; + +export interface CustomerAddress { + first_name: string; + last_name: string; + company?: string; + address_1: string; + address_2?: string; + city: string; + state?: string; + postcode: string; + country: string; + phone?: string; +} + +export interface CustomerStats { + total_orders: number; + total_spent: number; +} + +export interface Customer { + id: number; + username: string; + email: string; + first_name: string; + last_name: string; + display_name: string; + registered: string; + role: string; + billing?: CustomerAddress; + shipping?: CustomerAddress; + stats?: CustomerStats; +} + +export interface CustomerListResponse { + data: Customer[]; + pagination: { + total: number; + total_pages: number; + current: number; + per_page: number; + }; +} + +export interface CustomerFormData { + email: string; + first_name: string; + last_name: string; + username?: string; + password?: string; + billing?: Partial; + shipping?: Partial; + send_email?: boolean; +} + +export interface CustomerSearchResult { + id: number; + name: string; + email: string; +} + +export const CustomersApi = { + /** + * List customers with pagination and filtering + */ + list: async (params?: { + page?: number; + per_page?: number; + search?: string; + role?: string; + }): Promise => { + return api.get('/customers', { params }); + }, + + /** + * Get single customer + */ + get: async (id: number): Promise => { + return api.get(`/customers/${id}`); + }, + + /** + * Create new customer + */ + create: async (data: CustomerFormData): Promise => { + return api.post('/customers', data); + }, + + /** + * Update customer + */ + update: async (id: number, data: Partial): Promise => { + return api.put(`/customers/${id}`, data); + }, + + /** + * Delete customer + */ + delete: async (id: number): Promise => { + return api.del(`/customers/${id}`); + }, + + /** + * Search customers (for autocomplete) + */ + search: async (query: string, limit?: number): Promise => { + return api.get('/customers/search', { params: { q: query, limit } }); + }, +};