From 599e8952397543632e2e4c86535edcc0c145f5ff Mon Sep 17 00:00:00 2001 From: Nevo David Date: Tue, 7 Oct 2025 17:26:04 +0700 Subject: [PATCH] feat: upload from url --- .../v1/public.integrations.controller.ts | 34 +++++++++++++++++++ .../src/dtos/media/upload.dto.ts | 9 +++++ 2 files changed, 43 insertions(+) create mode 100644 libraries/nestjs-libraries/src/dtos/media/upload.dto.ts diff --git a/apps/backend/src/public-api/routes/v1/public.integrations.controller.ts b/apps/backend/src/public-api/routes/v1/public.integrations.controller.ts index c70b7e91..66415b75 100644 --- a/apps/backend/src/public-api/routes/v1/public.integrations.controller.ts +++ b/apps/backend/src/public-api/routes/v1/public.integrations.controller.ts @@ -26,6 +26,9 @@ import { } from '@gitroom/backend/services/auth/permissions/permission.exception.class'; import { VideoDto } from '@gitroom/nestjs-libraries/dtos/videos/video.dto'; import { VideoFunctionDto } from '@gitroom/nestjs-libraries/dtos/videos/video.function.dto'; +import { UploadDto } from '@gitroom/nestjs-libraries/dtos/media/upload.dto'; +import axios from 'axios'; +import { Readable } from 'stream'; @ApiTags('Public API') @Controller('/public/v1') @@ -56,6 +59,37 @@ export class PublicIntegrationsController { ); } + @Post('/upload-from-url') + async uploadFromUrl( + @GetOrgFromRequest() org: Organization, + @Body() body: UploadDto + ) { + const response = await axios.get(body.url, { + responseType: 'arraybuffer', + }); + + const buffer = Buffer.from(response.data); + + const getFile = await this.storage.uploadFile({ + buffer, + mimetype: 'image/jpeg', + size: buffer.length, + path: '', + fieldname: '', + destination: '', + stream: new Readable(), + filename: '', + originalname: '', + encoding: '', + }); + + return this._mediaService.saveFile( + org.id, + getFile.originalname, + getFile.path + ); + } + @Get('/find-slot/:id') async findSlotIntegration( @GetOrgFromRequest() org: Organization, diff --git a/libraries/nestjs-libraries/src/dtos/media/upload.dto.ts b/libraries/nestjs-libraries/src/dtos/media/upload.dto.ts new file mode 100644 index 00000000..4704c094 --- /dev/null +++ b/libraries/nestjs-libraries/src/dtos/media/upload.dto.ts @@ -0,0 +1,9 @@ +import { IsDefined, IsString, Validate } from 'class-validator'; +import { ValidUrlExtension } from '@gitroom/helpers/utils/valid.url.path'; + +export class UploadDto { + @IsString() + @IsDefined() + @Validate(ValidUrlExtension) + url: string; +}