Sfoglia il codice sorgente

♻️ refactor(api): 重构API客户端结构以符合RPC规范

- 移除统一的baseClient,拆分为独立的资源客户端
- 重命名客户端变量,严格按照RPC规范命名为authClient、userClient等
- 为银龄岗模块创建专用的silverJobsClient并导出其子资源客户端
- 为银龄用户模块创建专用的silverUsersClient
- 修复axios导入方式,从动态导入改为静态导入
- 统一代码格式,为所有语句添加分号结尾
- 优化代码注释,明确标识客户端实例的用途和规范

✨ feat(api): 新增独立资源客户端

- 添加authClient、userClient、roleClient等独立客户端实例
- 实现companyClient、jobClient等银龄岗子资源客户端
- 新增elderlyUniversityClient、policyNewsClient等专用客户端
- 实现userPreferenceClient独立客户端实例

🔧 chore(api): 优化API客户端导入和配置

- 调整axios导入方式,提高加载性能
- 优化fetch适配器函数结构,增强错误处理
- 统一客户端初始化配置,确保一致性
- 移除向后兼容的apiClient导出,简化接口
yourname 8 mesi fa
parent
commit
7b6589bb11
1 ha cambiato i file con 53 aggiunte e 46 eliminazioni
  1. 53 46
      src/client/api.ts

+ 53 - 46
src/client/api.ts

@@ -9,16 +9,16 @@ import type {
   ElderlyUniversityRoutes,
   PolicyNewsRoutes,
   UserPreferenceRoutes
-} from '@/server/api'
+} from '@/server/api';
+import axios from 'axios';
 
 // 创建axios fetch适配器
 const axiosFetch = async (input: RequestInfo | URL, init?: RequestInit) => {
-  const axios = (await import('axios')).default
   
-  const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url
-  const method = init?.method || 'GET'
-  const headers = init?.headers ? Object.fromEntries(new Map(init.headers as any)) : {}
-  const data = init?.body
+  const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url;
+  const method = init?.method || 'GET';
+  const headers = init?.headers ? Object.fromEntries(new Map(init.headers as any)) : {};
+  const data = init?.body;
 
   try {
     const response = await axios({
@@ -28,55 +28,62 @@ const axiosFetch = async (input: RequestInfo | URL, init?: RequestInit) => {
       data,
       responseType: 'json',
       validateStatus: () => true,
-    })
+    });
 
     return new Response(JSON.stringify(response.data), {
       status: response.status,
       statusText: response.statusText,
       headers: response.headers as any,
-    })
+    });
   } catch (error) {
-    throw error
+    throw error;
   }
-}
+};
 
-// 基础客户端配置
-const baseClient = hc<{
-  api: {
-    v1: {
-      auth: AuthRoutes
-      users: UserRoutes
-      roles: RoleRoutes
-      files: FileRoutes
-      'silver-jobs': SilverJobsRoutes
-      'silver-users': SilverUsersRoutes
-      'elderly-universities': ElderlyUniversityRoutes
-      'policy-news': PolicyNewsRoutes
-      'user-preferences': UserPreferenceRoutes
-    }
-  }
-}>('/api', {
+// 客户端实例 - 严格按照RPC规范命名
+export const authClient = hc<AuthRoutes>('/', {
+  fetch: axiosFetch,
+}).api.v1.auth;
+
+export const userClient = hc<UserRoutes>('/', {
+  fetch: axiosFetch,
+}).api.v1.users;
+
+export const roleClient = hc<RoleRoutes>('/', {
+  fetch: axiosFetch,
+}).api.v1.roles;
+
+export const fileClient = hc<FileRoutes>('/', {
   fetch: axiosFetch,
-})
+}).api.v1.files;
 
-// 统一API客户端导出
-export const apiClient = baseClient.api.v1
+// 银龄岗API客户端(银龄岗资源集合)
+const silverJobsClient = hc<SilverJobsRoutes>('/', {
+  fetch: axiosFetch,
+}).api.v1['silver-jobs'];
 
-// 向后兼容的命名导出
-export const authClient = apiClient.auth
-export const userClient = apiClient.users
-export const roleClient = apiClient.roles
-export const fileClient = apiClient.files
-export const silverJobsClient = apiClient['silver-jobs']
-export const silverUsersClient = apiClient['silver-users']
-export const elderlyUniversityClient = apiClient['elderly-universities']
-export const policyNewsClient = apiClient['policy-news']
-export const userPreferenceClient = apiClient['user-preferences']
+// 银龄岗具体资源客户端
+export const companyClient = silverJobsClient.companies;
+export const jobClient = silverJobsClient.jobs;
+export const applicationClient = silverJobsClient.applications;
+export const favoriteClient = silverJobsClient.favorites;
+export const viewClient = silverJobsClient.views;
+export const companyImageClient = silverJobsClient['company-images'];
 
-// 银龄岗子模块客户端
-export const companyClient = silverJobsClient.companies
-export const jobClient = silverJobsClient.jobs
-export const applicationClient = silverJobsClient.applications
-export const favoriteClient = silverJobsClient.favorites
-export const viewClient = silverJobsClient.views
-export const companyImageClient = silverJobsClient['company-images']
+// 银龄用户资源客户端
+const silverUsersClient = hc<SilverUsersRoutes>('/', {
+  fetch: axiosFetch,
+}).api.v1['silver-users'];
+
+// 其他资源客户端
+export const elderlyUniversityClient = hc<ElderlyUniversityRoutes>('/', {
+  fetch: axiosFetch,
+}).api.v1['elderly-universities'];
+
+export const policyNewsClient = hc<PolicyNewsRoutes>('/', {
+  fetch: axiosFetch,
+}).api.v1['policy-news'];
+
+export const userPreferenceClient = hc<UserPreferenceRoutes>('/', {
+  fetch: axiosFetch,
+}).api.v1['user-preferences'];