From 196b91ae6a41dd7a397d3247d8167235a61b6b7b Mon Sep 17 00:00:00 2001 From: Oleg Proskurin Date: Sun, 1 Feb 2026 20:04:46 +0700 Subject: [PATCH] fix: uploading endpoint --- apps/api-service/src/routes/upload.ts | 10 ++++---- apps/api-service/src/routes/v1/images.ts | 15 +++++------ .../src/services/ImageGenService.ts | 12 ++++----- .../src/services/MinioStorageService.ts | 13 +++------- .../src/services/StorageService.ts | 25 ++++++++----------- tests/api/01-generation-basic.rest | 2 +- tests/api/02-basic.rest | 2 +- 7 files changed, 35 insertions(+), 44 deletions(-) diff --git a/apps/api-service/src/routes/upload.ts b/apps/api-service/src/routes/upload.ts index e8bc848..6db30ec 100644 --- a/apps/api-service/src/routes/upload.ts +++ b/apps/api-service/src/routes/upload.ts @@ -63,14 +63,14 @@ uploadRouter.post( `[${timestamp}] [${requestId}] Uploading file: ${file.originalname} as ${imageId} (${file.size} bytes)`, ); - const uploadResult = await storageService.uploadFile( + const uploadResult = await storageService.uploadFile({ orgSlug, projectSlug, imageId, - file.buffer, - file.mimetype, - file.originalname, - ); + buffer: file.buffer, + contentType: file.mimetype, + originalFilename: file.originalname, + }); if (!uploadResult.success) { const errorResponse: UploadFileResponse = { diff --git a/apps/api-service/src/routes/v1/images.ts b/apps/api-service/src/routes/v1/images.ts index 6d50472..f6cf827 100644 --- a/apps/api-service/src/routes/v1/images.ts +++ b/apps/api-service/src/routes/v1/images.ts @@ -197,15 +197,16 @@ imagesRouter.post( try { const storageService = await StorageFactory.getInstance(); + const imageId = randomUUID(); - const uploadResult = await storageService.uploadFile( - orgId, + const uploadResult = await storageService.uploadFile({ + orgSlug: orgId, projectSlug, - 'uploads', - file.originalname, - file.buffer, - file.mimetype, - ); + imageId, + buffer: file.buffer, + contentType: file.mimetype, + originalFilename: file.originalname, + }); if (!uploadResult.success) { res.status(500).json({ diff --git a/apps/api-service/src/services/ImageGenService.ts b/apps/api-service/src/services/ImageGenService.ts index 2576c63..0ab62b2 100644 --- a/apps/api-service/src/services/ImageGenService.ts +++ b/apps/api-service/src/services/ImageGenService.ts @@ -70,14 +70,14 @@ export class ImageGenService { // Original filename for metadata (e.g., "my-image.png") const originalFilename = `generated-image.${generatedData.fileExtension}`; - const uploadResult = await storageService.uploadFile( - finalOrgSlug, - finalProjectSlug, + const uploadResult = await storageService.uploadFile({ + orgSlug: finalOrgSlug, + projectSlug: finalProjectSlug, imageId, - generatedData.buffer, - generatedData.mimeType, + buffer: generatedData.buffer, + contentType: generatedData.mimeType, originalFilename, - ); + }); if (uploadResult.success) { return { diff --git a/apps/api-service/src/services/MinioStorageService.ts b/apps/api-service/src/services/MinioStorageService.ts index 7a72744..24db7f2 100644 --- a/apps/api-service/src/services/MinioStorageService.ts +++ b/apps/api-service/src/services/MinioStorageService.ts @@ -1,5 +1,5 @@ import { Client as MinioClient } from 'minio'; -import { StorageService, FileMetadata, UploadResult } from './StorageService'; +import { StorageService, FileMetadata, UploadResult, UploadFileParams } from './StorageService'; export class MinioStorageService implements StorageService { private client: MinioClient; @@ -102,14 +102,9 @@ export class MinioStorageService implements StorageService { return await this.client.bucketExists(this.bucketName); } - async uploadFile( - orgSlug: string, - projectSlug: string, - imageId: string, - buffer: Buffer, - contentType: string, - originalFilename?: string, - ): Promise { + async uploadFile(params: UploadFileParams): Promise { + const { orgSlug, projectSlug, imageId, buffer, contentType, originalFilename } = params; + // Validate inputs first this.validatePath(orgSlug, projectSlug, imageId); diff --git a/apps/api-service/src/services/StorageService.ts b/apps/api-service/src/services/StorageService.ts index 12e0ca5..3d8bcf2 100644 --- a/apps/api-service/src/services/StorageService.ts +++ b/apps/api-service/src/services/StorageService.ts @@ -21,6 +21,15 @@ export interface UploadResult { error?: string; } +export interface UploadFileParams { + orgSlug: string; + projectSlug: string; + imageId: string; + buffer: Buffer; + contentType: string; + originalFilename?: string; +} + export interface StorageService { /** * Create the main bucket if it doesn't exist @@ -35,22 +44,8 @@ export interface StorageService { /** * Upload a file to storage * Path format: {orgSlug}/{projectSlug}/img/{imageId} - * - * @param orgSlug Organization slug - * @param projectSlug Project slug - * @param imageId UUID for the file (same as image.id in DB) - * @param buffer File buffer - * @param contentType MIME type - * @param originalFilename Original filename from user (for metadata) */ - uploadFile( - orgSlug: string, - projectSlug: string, - imageId: string, - buffer: Buffer, - contentType: string, - originalFilename?: string, - ): Promise; + uploadFile(params: UploadFileParams): Promise; /** * Download a file from storage diff --git a/tests/api/01-generation-basic.rest b/tests/api/01-generation-basic.rest index 891232c..41dd89e 100644 --- a/tests/api/01-generation-basic.rest +++ b/tests/api/01-generation-basic.rest @@ -1,6 +1,6 @@ # @base = http://localhost:3000 @base = https://api.banatie.app -@apiKey = bnt_e6eb544c505922b9bfe5b088e067fc3940efff16b1b88585c5518946630d4a66 +@apiKey = bnt_415a15747796a9676cb47c663fcede36af3583cedaec19893b831ec7a2ae0311 ############################################################################### # BASIC GENERATION TESTS diff --git a/tests/api/02-basic.rest b/tests/api/02-basic.rest index e1b5da0..3d85e7a 100644 --- a/tests/api/02-basic.rest +++ b/tests/api/02-basic.rest @@ -2,7 +2,7 @@ # @base = https://api.banatie.app # @apiKey = bnt_e6eb544c505922b9bfe5b088e067fc3940efff16b1b88585c5518946630d4a66 -@apiKey = bnt_f4fcf12c7b62a48dd660dcebccc744d4e668f66ffdf54b873c4ee866c0008763 +@apiKey = bnt_415a15747796a9676cb47c663fcede36af3583cedaec19893b831ec7a2ae0311 ############################################################################### # IMAGE UPLOAD & CRUD TESTS