diff --git a/server/src/storage/mino.ts b/server/src/storage/mino.ts index 936ccc0f..62290ccb 100644 --- a/server/src/storage/mino.ts +++ b/server/src/storage/mino.ts @@ -1,4 +1,5 @@ import { Client } from 'minio'; +import Run from '../models/Run'; const minioClient = new Client({ endPoint: process.env.MINIO_ENDPOINT || 'localhost', @@ -8,4 +9,43 @@ const minioClient = new Client({ secretKey: process.env.MINIO_SECRET_KEY || 'minio-secret-key', }); -export default minioClient; \ No newline at end of file +class BinaryOutputService { + private bucketName: string; + + constructor(bucketName: string) { + this.bucketName = bucketName; + } + + /** + * Uploads binary data to Minio and stores references in PostgreSQL. + * @param run - The run object representing the current process. + * @param binaryOutput - The binary output object containing data to upload. + * @returns A map of Minio URLs pointing to the uploaded binary data. + */ + async uploadAndStoreBinaryOutput(run: Run, binaryOutput: Record): Promise> { + const uploadedBinaryOutput: Record = {}; + + for (const key of Object.keys(binaryOutput)) { + const binaryData = binaryOutput[key]; + const bufferData = Buffer.from(binaryData, 'binary'); + const minioKey = `${run.runId}/${key}`; + + await run.uploadBinaryOutputToMinioBucket(minioKey, bufferData); + + // Save the Minio URL in the result object + uploadedBinaryOutput[key] = `minio://${this.bucketName}/${minioKey}`; + } + + // Update the run with the Minio URLs for binary output + await run.update({ + binaryOutput: uploadedBinaryOutput + }); + + return uploadedBinaryOutput; + } +} + + + + +export { minioClient, BinaryOutputService }; \ No newline at end of file