浏览代码

♻️ refactor(files): 优化FileService实例创建位置

- 将FileService实例从全局作用域移至路由处理函数内部
- 确保每个请求都使用新的服务实例,提高代码安全性和可维护性

🔧 chore(test): 移除测试代码中的调试日志

- 删除files.integration.test.ts中的console.debug语句
- 清理测试输出,提高测试报告可读性
yourname 2 月之前
父节点
当前提交
2ae8746973

+ 3 - 3
src/server/api/files/[id]/delete.ts

@@ -42,13 +42,13 @@ const deleteFileRoute = createRoute({
   }
 });
 
-// 创建文件服务实例
-const fileService = new FileService(AppDataSource);
-
 // 创建路由实例
 const app = new OpenAPIHono<AuthContext>().openapi(deleteFileRoute, async (c) => {
   try {
     const { id } = c.req.valid('param');
+
+    // 创建文件服务实例
+    const fileService = new FileService(AppDataSource);
     await fileService.deleteFile(id);
     return c.json({ success: true, message: '文件删除成功' }, 200);
   } catch (error) {

+ 3 - 3
src/server/api/files/[id]/download.ts

@@ -48,13 +48,13 @@ const downloadFileRoute = createRoute({
   }
 });
 
-// 创建文件服务实例
-const fileService = new FileService(AppDataSource);
-
 // 创建路由实例
 const app = new OpenAPIHono<AuthContext>().openapi(downloadFileRoute, async (c) => {
   try {
     const { id } = c.req.valid('param');
+
+    // 创建文件服务实例
+    const fileService = new FileService(AppDataSource);
     const result = await fileService.getFileDownloadUrl(id);
     return c.json(result, 200);
   } catch (error) {

+ 2 - 2
src/server/api/files/[id]/get-url.ts

@@ -45,13 +45,13 @@ const getFileUrlRoute = createRoute({
   }
 });
 
-// 创建文件服务实例
-const fileService = new FileService(AppDataSource);
 
 // 创建路由实例
 const app = new OpenAPIHono<AuthContext>().openapi(getFileUrlRoute, async (c) => {
   try {
     const { id } = c.req.valid('param');
+    // 创建文件服务实例
+    const fileService = new FileService(AppDataSource);
     const url = await fileService.getFileUrl(id);
     return c.json({ url }, 200);
   } catch (error) {

+ 0 - 5
src/server/api/files/__tests__/files.integration.test.ts

@@ -180,7 +180,6 @@ describe('File API Integration Tests', () => {
 
       expect(response.status).toBe(200);
       const result = await response.json();
-      console.debug('Response result:', JSON.stringify(result));
       expect(result).toEqual({ url: mockUrl });
     });
 
@@ -198,10 +197,6 @@ describe('File API Integration Tests', () => {
           'Authorization': 'Bearer test-token'
         }
       });
-
-      console.debug('Response status:', response.status);
-      const result = await response.json();
-      console.debug('Response result:', JSON.stringify(result));
       expect(response.status).toBe(404);
     });
   });

+ 3 - 3
src/server/api/files/multipart-complete/post.ts

@@ -93,13 +93,13 @@ const completeMultipartUploadRoute = createRoute({
   }
 });
 
-// 初始化FileService
-const fileService = new FileService(AppDataSource);
-
 // 创建路由实例并实现处理逻辑
 const app = new OpenAPIHono<AuthContext>().openapi(completeMultipartUploadRoute, async (c) => {
   try {
     const data = await c.req.json();
+
+    // 初始化FileService
+    const fileService = new FileService(AppDataSource);
     const result = await fileService.completeMultipartUpload(data);
     
     // 构建完整的响应包含host和bucket信息

+ 2 - 2
src/server/api/files/multipart-policy/post.ts

@@ -86,8 +86,6 @@ const createMultipartUploadPolicyRoute = createRoute({
   }
 });
 
-// 创建文件服务实例
-const fileService = new FileService(AppDataSource);
 
 // 创建路由实例
 const app = new OpenAPIHono<AuthContext>().openapi(createMultipartUploadPolicyRoute, async (c) => {
@@ -96,6 +94,8 @@ try {
   const user = c.get('user');
   // 计算分片数量
   const partCount = Math.ceil(data.totalSize / data.partSize);
+  // 创建文件服务实例
+  const fileService = new FileService(AppDataSource);
   const result = await fileService.createMultipartUploadPolicy({
     ...data,
     uploadUserId: user.id