diff --git a/src/modules/assets/controllers/presignedAssets.controller.ts b/src/modules/assets/controllers/presignedAssets.controller.ts new file mode 100644 index 0000000..54addbd --- /dev/null +++ b/src/modules/assets/controllers/presignedAssets.controller.ts @@ -0,0 +1,11 @@ +import { Context } from "elysia"; +import { mainErrorHandler } from "../../../helpers/error/handler"; +import { getPresignedFileUrl } from "../../../utils/storages/MinIO/operations/getPresignedFileUrl"; + +export const presignedAssetsController = async (ctx: Context) => { + try { + return await getPresignedFileUrl(ctx.params["*"]); + } catch (error) { + return mainErrorHandler(ctx.set, error); + } +}; diff --git a/src/modules/assets/controllers/streamAssets.controller.ts b/src/modules/assets/controllers/streamAssets.controller.ts new file mode 100644 index 0000000..f6ccb09 --- /dev/null +++ b/src/modules/assets/controllers/streamAssets.controller.ts @@ -0,0 +1,11 @@ +import { Context } from "elysia"; +import { getStreamFile } from "../../../utils/storages/MinIO/operations/getStreamFile"; +import { mainErrorHandler } from "../../../helpers/error/handler"; + +export const streamAssetsController = async (ctx: Context) => { + try { + return await getStreamFile(ctx.params["*"]); + } catch (error) { + return mainErrorHandler(ctx.set, error); + } +}; diff --git a/src/modules/assets/index.ts b/src/modules/assets/index.ts new file mode 100644 index 0000000..933a844 --- /dev/null +++ b/src/modules/assets/index.ts @@ -0,0 +1,7 @@ +import Elysia from "elysia"; +import { streamAssetsController } from "./controllers/streamAssets.controller"; +import { presignedAssetsController } from "./controllers/presignedAssets.controller"; + +export const assetsModule = new Elysia({ prefix: "/assets" }) + .get("/stream/*", streamAssetsController) + .get("/presigned/*", presignedAssetsController); diff --git a/src/utils/storages/MinIO/operations/getPresignedFileUrl.ts b/src/utils/storages/MinIO/operations/getPresignedFileUrl.ts new file mode 100644 index 0000000..9eab331 --- /dev/null +++ b/src/utils/storages/MinIO/operations/getPresignedFileUrl.ts @@ -0,0 +1,15 @@ +import { minioClient } from "../client"; +import { ensureBucketExists } from "../validations/ensureBucketExists"; + +export const getPresignedFileUrl = async ( + filename: string, + expiresInSeconds: number = 3200 +) => { + await ensureBucketExists(); + + return await minioClient.presignedGetObject( + process.env.MINIO_BUCKET!, + filename, + expiresInSeconds + ); +}; diff --git a/src/utils/storages/MinIO/operations/getStreamFile.ts b/src/utils/storages/MinIO/operations/getStreamFile.ts new file mode 100644 index 0000000..fcd4592 --- /dev/null +++ b/src/utils/storages/MinIO/operations/getStreamFile.ts @@ -0,0 +1,8 @@ +import { minioBucketName, minioClient } from "../client"; +import { ensureBucketExists } from "../validations/ensureBucketExists"; + +export const getStreamFile = async (filename: string) => { + await ensureBucketExists(); + + return await minioClient.getObject(process.env.MINIO_BUCKET!, filename); +};