From aad0c294cd485f224d029eefc7174229abbc386a Mon Sep 17 00:00:00 2001 From: Joao Pedro da Silva Date: Tue, 14 Jun 2022 13:23:20 -0300 Subject: [PATCH] get presigned url --- .../src/controllers/v2/community/details.ts | 8 ++++++ .../api/src/routes/v2/community/details.ts | 28 +++++++++++++++++++ .../src/services/ubi/community/details.ts | 11 ++++++-- 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/packages/api/src/controllers/v2/community/details.ts b/packages/api/src/controllers/v2/community/details.ts index 9f428cb7f..e162dc903 100644 --- a/packages/api/src/controllers/v2/community/details.ts +++ b/packages/api/src/controllers/v2/community/details.ts @@ -162,6 +162,14 @@ class CommunityController { .then((r) => standardResponse(res, 200, true, r)) .catch((e) => standardResponse(res, 400, false, '', { error: e })); }; + + getPresignedUrlMedia = (req: Request, res: Response) => { + this.detailsService.getPresignedUrlMedia( + req.params.mime, + ) + .then((url) => standardResponse(res, 200, true, url)) + .catch((e) => standardResponse(res, 400, false, '', { error: e })); + }; } export { CommunityController }; diff --git a/packages/api/src/routes/v2/community/details.ts b/packages/api/src/routes/v2/community/details.ts index 64f8bbdc2..554141585 100644 --- a/packages/api/src/routes/v2/community/details.ts +++ b/packages/api/src/routes/v2/community/details.ts @@ -238,4 +238,32 @@ export default (route: Router): void => { * $ref: '#/components/schemas/UbiCommunity' */ route.get('/:idOrAddress', optionalAuthentication, controller.findBy); + + /** + * @swagger + * + * /communities/media/{mime}: + * get: + * tags: + * - "communities" + * summary: Make a request for a presigned URL + * parameters: + * - in: path + * name: mime + * schema: + * type: string + * required: true + * description: media mimetype + * responses: + * "200": + * description: OK + * security: + * - api_auth: + * - "write:modify": + */ + route.get( + '/media/:mime', + authenticateToken, + controller.getPresignedUrlMedia + ); }; diff --git a/packages/core/src/services/ubi/community/details.ts b/packages/core/src/services/ubi/community/details.ts index feb275558..ab70b0f84 100644 --- a/packages/core/src/services/ubi/community/details.ts +++ b/packages/core/src/services/ubi/community/details.ts @@ -2,10 +2,8 @@ import { BigNumber } from 'bignumber.js'; import { utils, ethers } from 'ethers'; import { Op, WhereOptions, fn, col, literal, Transaction } from 'sequelize'; -import config from '../../../config'; import { models } from '../../../database'; import { AppUser } from '../../../interfaces/app/appUser'; -import { BeneficiaryAttributes } from '../../../interfaces/ubi/beneficiary'; import { CommunityAttributes } from '../../../interfaces/ubi/community'; import { UbiCommunityContract } from '../../../interfaces/ubi/ubiCommunityContract'; import { BeneficiarySubgraph } from '../../../subgraph/interfaces/beneficiary'; @@ -28,8 +26,11 @@ import { BaseError } from '../../../utils/baseError'; import { Logger } from '../../../utils/logger'; import { isAddress } from '../../../utils/util'; import { IListBeneficiary, BeneficiaryFilterType } from '../../endpoints'; +import { CommunityContentStorage } from '../../storage'; export class CommunityDetailsService { + private communityContentStorage = new CommunityContentStorage(); + public async getState(communityId: number) { const community = await models.community.findOne({ attributes: ['contractAddress'], @@ -742,6 +743,12 @@ export class CommunityDetailsService { return result; } + public async getPresignedUrlMedia( + mime: string, + ) { + return this.communityContentStorage.getPresignedUrlPutObject(mime); + } + private getSearchInput(searchInput: string) { if (isAddress(searchInput)) { return {