refactor(frontend): migrate Customer domain to centralized API services
- Replaced all direct axios imports with service layer calls across 8 customer files - Migrated core pages: home.vue, create.vue, edit.vue - Migrated profile pages: profile.vue (1100+ lines), TankEstimation.vue - Migrated supporting pages: ServicePlanEdit.vue, tank/edit.vue, list.vue Services integrated: - customerService: CRUD, descriptions, tank info, automatic status - authService: authentication and Authorize.net account management - paymentService: credit cards, transactions, payment authorization - deliveryService: delivery records and automatic delivery data - serviceService: service calls, parts, and service plans - adminService: statistics, social comments, and reports - queryService: dropdown data (customer types, states) Type safety improvements: - Updated paymentService.ts with accurate AxiosResponse types - Fixed response unwrapping to match api.ts interceptor behavior - Resolved all TypeScript errors in customer domain (0 errors) Benefits: - Consistent authentication via centralized interceptors - Standardized error handling across all API calls - Improved type safety with proper TypeScript interfaces - Single source of truth for API endpoints - Better testability through mockable services Verified with vue-tsc --noEmit - all customer domain files pass type checking
This commit is contained in:
@@ -1,85 +1,88 @@
|
||||
import api, { autoApi } from './api';
|
||||
import {
|
||||
Delivery,
|
||||
DeliveryNote,
|
||||
AutoDelivery,
|
||||
DeliveryListResponse,
|
||||
CreateDeliveryRequest,
|
||||
UpdateDeliveryRequest,
|
||||
ApiResponse
|
||||
DeliveriesResponse,
|
||||
DeliveryResponse,
|
||||
AxiosResponse
|
||||
} from '../types/models';
|
||||
|
||||
// API Response wrappers for this service
|
||||
interface DeliveryTotalResponse { ok: boolean; total: number; priceprime?: number; pricesameday?: number; priceemergency?: number; total_amount?: number; discount?: number; total_amount_after_discount?: number; }
|
||||
interface CashResponse { ok: boolean; amount: number; }
|
||||
|
||||
export const deliveryService = {
|
||||
// CRUD operations
|
||||
create: (customerId: number, data: CreateDeliveryRequest): Promise<ApiResponse<Delivery>> =>
|
||||
create: (customerId: number, data: CreateDeliveryRequest): Promise<AxiosResponse<DeliveryResponse>> =>
|
||||
api.post(`/delivery/create/${customerId}`, data),
|
||||
|
||||
getById: (id: number): Promise<ApiResponse<Delivery>> =>
|
||||
getById: (id: number): Promise<AxiosResponse<DeliveryResponse>> =>
|
||||
api.get(`/delivery/${id}`),
|
||||
|
||||
getOrder: (id: number): Promise<ApiResponse<Delivery>> =>
|
||||
getOrder: (id: number): Promise<AxiosResponse<DeliveryResponse>> =>
|
||||
api.get(`/delivery/order/${id}`),
|
||||
|
||||
update: (id: number, data: UpdateDeliveryRequest): Promise<ApiResponse<Delivery>> =>
|
||||
update: (id: number, data: UpdateDeliveryRequest): Promise<AxiosResponse<DeliveryResponse>> =>
|
||||
api.put(`/delivery/edit/${id}`, data),
|
||||
|
||||
delete: (id: number): Promise<ApiResponse<void>> =>
|
||||
delete: (id: number): Promise<AxiosResponse<{ ok: boolean }>> =>
|
||||
api.delete(`/delivery/delete/${id}`),
|
||||
|
||||
cancel: (id: number): Promise<ApiResponse<void>> =>
|
||||
cancel: (id: number): Promise<AxiosResponse<{ ok: boolean }>> =>
|
||||
api.put(`/delivery/cancel/${id}`),
|
||||
|
||||
markCancelled: (id: number): Promise<ApiResponse<void>> =>
|
||||
markCancelled: (id: number): Promise<AxiosResponse<{ ok: boolean }>> =>
|
||||
api.put(`/delivery/cancelled/${id}`),
|
||||
|
||||
// List operations
|
||||
getAll: (page: number = 1): Promise<DeliveryListResponse> =>
|
||||
getAll: (page: number = 1): Promise<AxiosResponse<DeliveriesResponse>> =>
|
||||
api.get(`/delivery/all/${page}`),
|
||||
|
||||
getByCustomer: (customerId: number, page: number = 1): Promise<DeliveryListResponse> =>
|
||||
getByCustomer: (customerId: number, page: number = 1): Promise<AxiosResponse<DeliveriesResponse>> =>
|
||||
api.get(`/delivery/customer/${customerId}/${page}`),
|
||||
|
||||
getPast1: (customerId: number): Promise<ApiResponse<Delivery[]>> =>
|
||||
getPast1: (customerId: number): Promise<AxiosResponse<DeliveriesResponse>> =>
|
||||
api.get(`/delivery/past1/${customerId}`),
|
||||
|
||||
getPast2: (customerId: number): Promise<ApiResponse<Delivery[]>> =>
|
||||
getPast2: (customerId: number): Promise<AxiosResponse<DeliveriesResponse>> =>
|
||||
api.get(`/delivery/past2/${customerId}`),
|
||||
|
||||
// Status-based lists
|
||||
getWaiting: (page: number = 1): Promise<DeliveryListResponse> =>
|
||||
getWaiting: (page: number = 1): Promise<AxiosResponse<DeliveriesResponse>> =>
|
||||
api.get(`/delivery/waiting/${page}`),
|
||||
|
||||
getTomorrow: (page: number = 1): Promise<DeliveryListResponse> =>
|
||||
getTomorrow: (page: number = 1): Promise<AxiosResponse<DeliveriesResponse>> =>
|
||||
api.get(`/delivery/tommorrow/${page}`),
|
||||
|
||||
getOutForDelivery: (page: number = 1): Promise<DeliveryListResponse> =>
|
||||
getOutForDelivery: (page: number = 1): Promise<AxiosResponse<DeliveriesResponse>> =>
|
||||
api.get(`/delivery/outfordelivery/${page}`),
|
||||
|
||||
getDelivered: (page: number = 1): Promise<DeliveryListResponse> =>
|
||||
getDelivered: (page: number = 1): Promise<AxiosResponse<DeliveriesResponse>> =>
|
||||
api.get(`/delivery/delivered/${page}`),
|
||||
|
||||
getFinalized: (page: number = 1): Promise<DeliveryListResponse> =>
|
||||
getFinalized: (page: number = 1): Promise<AxiosResponse<DeliveriesResponse>> =>
|
||||
api.get(`/delivery/finalized/${page}`),
|
||||
|
||||
getPending: (page: number = 1): Promise<DeliveryListResponse> =>
|
||||
getPending: (page: number = 1): Promise<AxiosResponse<DeliveriesResponse>> =>
|
||||
api.get(`/delivery/pending/${page}`),
|
||||
|
||||
getIssues: (page: number = 1): Promise<DeliveryListResponse> =>
|
||||
getIssues: (page: number = 1): Promise<AxiosResponse<DeliveriesResponse>> =>
|
||||
api.get(`/delivery/issue/${page}`),
|
||||
|
||||
// Status & totals
|
||||
updateStatus: (data: { id: number; status: number }): Promise<ApiResponse<void>> =>
|
||||
updateStatus: (data: { id: number; status: number }): Promise<AxiosResponse<{ ok: boolean }>> =>
|
||||
api.put('/delivery/updatestatus', data),
|
||||
|
||||
getTotal: (id: number): Promise<ApiResponse<{ total: number }>> =>
|
||||
getTotal: (id: number): Promise<AxiosResponse<DeliveryTotalResponse>> =>
|
||||
api.get(`/delivery/total/${id}`),
|
||||
|
||||
// Cash handling
|
||||
handleCash: (id: number, type: string): Promise<ApiResponse<{ amount: number }>> =>
|
||||
handleCash: (id: number, type: string): Promise<AxiosResponse<CashResponse>> =>
|
||||
api.get(`/delivery/cash/${id}/${type}`),
|
||||
|
||||
// Finalize
|
||||
finalize: (id: number, data?: { final_price: number }): Promise<ApiResponse<void>> =>
|
||||
finalize: (id: number, data?: { final_price: number }): Promise<AxiosResponse<{ ok: boolean }>> =>
|
||||
api.put(`/deliverydata/finalize/${id}`, data),
|
||||
|
||||
// Auto system endpoints (VITE_AUTO_URL)
|
||||
|
||||
Reference in New Issue
Block a user