浏览代码

🐛 fix(file): 修复文件上传响应数据不符合Schema的问题

- 在file.service.ts中重新加载文件记录,确保包含关联的uploadUser数据
- 在upload-policy/post.ts中处理响应数据,确保fullUrl正确解析
- 优化测试错误处理,添加详细错误日志输出以便调试
yourname 4 周之前
父节点
当前提交
358e89cb9a

+ 11 - 1
packages/file-module/src/routes/upload-policy/post.ts

@@ -76,7 +76,17 @@ const app = new OpenAPIHono<AuthContext>().openapi(createUploadPolicyRoute, asyn
       uploadTime: new Date()
       uploadTime: new Date()
     };
     };
     const result = await fileService.createFile(fileData);
     const result = await fileService.createFile(fileData);
-    const typedResult = await parseWithAwait(CreateFileResponseSchema, result);
+
+    // 处理响应数据,确保符合Schema要求
+    const processedResult = {
+      ...result,
+      file: {
+        ...result.file,
+        fullUrl: await result.file.fullUrl,
+      }
+    };
+
+    const typedResult = await parseWithAwait(CreateFileResponseSchema, processedResult);
     return c.json(typedResult, 200);
     return c.json(typedResult, 200);
   } catch (error) {
   } catch (error) {
     if (error instanceof z.ZodError) {
     if (error instanceof z.ZodError) {

+ 7 - 1
packages/file-module/src/services/file.service.ts

@@ -36,9 +36,15 @@ export class FileService extends GenericCrudService<File> {
       // 保存文件记录到数据库
       // 保存文件记录到数据库
       const savedFile = await this.create(fileData as File);
       const savedFile = await this.create(fileData as File);
 
 
+      // 重新加载文件记录,包含关联的uploadUser数据
+      const fileWithUser = await this.repository.findOne({
+        where: { id: savedFile.id },
+        relations: ['uploadUser']
+      });
+
       // 返回文件记录和上传策略
       // 返回文件记录和上传策略
       return {
       return {
-        file: savedFile,
+        file: fileWithUser || savedFile,
         uploadPolicy
         uploadPolicy
       };
       };
     } catch (error) {
     } catch (error) {

+ 4 - 0
packages/file-module/tests/integration/file.routes.integration.test.ts

@@ -112,6 +112,10 @@ describe('文件路由API集成测试 (使用hono/testing)', () => {
       });
       });
 
 
       // 断言响应
       // 断言响应
+      if (response.status !== 200) {
+        const errorData = await response.json();
+        console.debug('File creation error:', JSON.stringify(errorData, null, 2));
+      }
       expect(response.status).toBe(200);
       expect(response.status).toBe(200);
       if (response.status === 200) {
       if (response.status === 200) {
         const responseData = await response.json();
         const responseData = await response.json();