orderClient.ts 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import { orderRoutes } from '@d8d/allin-order-module';
  2. import { rpcClient } from '@d8d/shared-ui-components/utils/hc'
  3. import type { InferRequestType, InferResponseType } from 'hono/client';
  4. export class OrderClientManager {
  5. private static instance: OrderClientManager;
  6. private client: ReturnType<typeof rpcClient<typeof orderRoutes>> | null = null;
  7. private constructor() {}
  8. public static getInstance(): OrderClientManager {
  9. if (!OrderClientManager.instance) {
  10. OrderClientManager.instance = new OrderClientManager();
  11. }
  12. return OrderClientManager.instance;
  13. }
  14. // 初始化客户端
  15. public init(baseUrl: string = '/'): ReturnType<typeof rpcClient<typeof orderRoutes>> {
  16. return this.client = rpcClient<typeof orderRoutes>(baseUrl);
  17. }
  18. // 获取客户端实例
  19. public get(): ReturnType<typeof rpcClient<typeof orderRoutes>> {
  20. if (!this.client) {
  21. return this.init()
  22. }
  23. return this.client;
  24. }
  25. // 重置客户端(用于测试或重新初始化)
  26. public reset(): void {
  27. this.client = null;
  28. }
  29. }
  30. // 导出单例实例
  31. const orderClientManager = OrderClientManager.getInstance();
  32. // 导出默认客户端实例(延迟初始化)
  33. export const orderClient = orderClientManager.get()
  34. // 导出类型定义
  35. export type CreateOrderRequest = InferRequestType<typeof orderClient.create.$post>['json'];
  36. export type CreateOrderResponse = InferResponseType<typeof orderClient.create.$post, 200>;
  37. export type UpdateOrderRequest = InferRequestType<typeof orderClient.update[':id']['$put']>['json'];
  38. export type UpdateOrderResponse = InferResponseType<typeof orderClient.update[':id']['$put'], 200>;
  39. export type DeleteOrderRequest = InferRequestType<typeof orderClient.delete[':id']['$delete']>['param'];
  40. export type DeleteOrderResponse = InferResponseType<typeof orderClient.delete[':id']['$delete'], 200>;
  41. export type GetAllOrdersRequest = InferRequestType<typeof orderClient.list.$get>['query'];
  42. export type GetAllOrdersResponse = InferResponseType<typeof orderClient.list.$get, 200>;
  43. export type GetOrderByIdRequest = InferRequestType<typeof orderClient.detail[':id']['$get']>['param'];
  44. export type GetOrderByIdResponse = InferResponseType<typeof orderClient.detail[':id']['$get'], 200>;
  45. export type ActivateOrderRequest = InferRequestType<typeof orderClient.activate[':orderId']['$post']>['param'];
  46. export type ActivateOrderResponse = InferResponseType<typeof orderClient.activate[':orderId']['$post'], 200>;
  47. export type CloseOrderRequest = InferRequestType<typeof orderClient.close[':orderId']['$post']>['param'];
  48. export type CloseOrderResponse = InferResponseType<typeof orderClient.close[':orderId']['$post'], 200>;
  49. export type BatchAddPersonsRequest = InferRequestType<typeof orderClient[':orderId']['persons']['batch']['$post']>['json'];
  50. export type BatchAddPersonsResponse = InferResponseType<typeof orderClient[':orderId']['persons']['batch']['$post'], 200>;
  51. export type CreateOrderPersonAssetRequest = InferRequestType<typeof orderClient.assets.create.$post>['json'];
  52. export type CreateOrderPersonAssetResponse = InferResponseType<typeof orderClient.assets.create.$post, 200>;
  53. export type QueryOrderPersonAssetRequest = InferRequestType<typeof orderClient.assets.query.$get>['query'];
  54. export type QueryOrderPersonAssetResponse = InferResponseType<typeof orderClient.assets.query.$get, 200>;
  55. export type DeleteOrderPersonAssetRequest = InferRequestType<typeof orderClient.assets.delete[':id']['$delete']>['param'];
  56. export type DeleteOrderPersonAssetResponse = InferResponseType<typeof orderClient.assets.delete[':id']['$delete'], 200>;
  57. export {
  58. orderClientManager
  59. }