From 7cf01dd7fd009da3ca251accb8d521f8ad6a1495 Mon Sep 17 00:00:00 2001 From: "Gabriel R. Antunes" Date: Fri, 29 Mar 2024 08:41:42 -0400 Subject: [PATCH] feat: arquivo: get file: acesso via usuario --- .../business/base/arquivo/arquivo.service.ts | 21 +++++++++++++++---- .../typeorm/entities/base/imagem.entity.ts | 7 +++++++ luna-backend/src/main.ts | 4 ++-- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/luna-backend/src/application/business/base/arquivo/arquivo.service.ts b/luna-backend/src/application/business/base/arquivo/arquivo.service.ts index 32c5facf..650205c2 100644 --- a/luna-backend/src/application/business/base/arquivo/arquivo.service.ts +++ b/luna-backend/src/application/business/base/arquivo/arquivo.service.ts @@ -6,6 +6,7 @@ import { v4 } from 'uuid'; import * as Dto from '../../(spec)'; import { IContextoDeAcesso } from '../../../../domain'; import { DatabaseContextService, EnvironmentConfigService, ValidationContractUuid } from '../../../../infrastructure'; +import { UsuarioEntity } from '../../../../infrastructure/integrate-database/typeorm/entities/autenticacao/usuario.entity'; import { ArquivoEntity } from '../../../../infrastructure/integrate-database/typeorm/entities/base/arquivo.entity'; type IGetFileAcesso = null | { @@ -51,7 +52,7 @@ export class ArquivoService { async getFile(contextoDeAcesso: IContextoDeAcesso | null, id: Dto.IArquivoModel['id'], acesso: IGetFileAcesso | null) { const qb = this.arquivoRepository.createQueryBuilder('arquivo'); - qb.whereInIds([id]); + qb.where('arquivo.id = :arquivoId', { arquivoId: id }); const exists = await qb.getExists(); @@ -67,18 +68,30 @@ export class ArquivoService { .innerJoin('imagemArquivo.imagem', 'imagem') .innerJoin('imagem.blocoCapa', 'blocoCapa'); - if (acesso.id) { - qb.andWhere('blocoCapa.id = :blocoCapa', { blocoCapa: acesso.id }); + if (contextoDeAcesso) { + await contextoDeAcesso.aplicarFiltro('bloco:find', qb, 'blocoCapa', null); } + qb.andWhere('blocoCapa.id = :blocoCapa', { blocoCapa: acesso.id }); + } else if (acesso.nome === 'usuario' && ValidationContractUuid().isValidSync(acesso.id)) { + qb + // + .innerJoin('arquivo.imagemArquivo', 'imagemArquivo') + .innerJoin('imagemArquivo.imagem', 'imagem') + .leftJoin(UsuarioEntity, 'usuario', '(usuario.id_imagem_capa_fk = imagem.id OR usuario.id_imagem_perfil_fk = imagem.id)'); + if (contextoDeAcesso) { - await contextoDeAcesso.aplicarFiltro('bloco:find', qb, 'blocoCapa', null); + await contextoDeAcesso.aplicarFiltro('usuario:find', qb, 'usuario', null); } + + qb.andWhere('usuario.id = :usuarioId', { usuarioId: acesso.id }); } else { qb.andWhere('FALSE'); } } + qb.andWhere('arquivo.id = :arquivoId', { arquivoId: id }); + const arquivo = await qb.getOne(); if (!arquivo) { diff --git a/luna-backend/src/infrastructure/integrate-database/typeorm/entities/base/imagem.entity.ts b/luna-backend/src/infrastructure/integrate-database/typeorm/entities/base/imagem.entity.ts index ec4af2c2..63f48b68 100644 --- a/luna-backend/src/infrastructure/integrate-database/typeorm/entities/base/imagem.entity.ts +++ b/luna-backend/src/infrastructure/integrate-database/typeorm/entities/base/imagem.entity.ts @@ -2,6 +2,7 @@ import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from 'typeorm'; import { IEntityDate } from '../../../../../application/business/(spec)'; import { IImagemModel } from '../../../../../application/business/(spec)/base/imagem'; import { BlocoEntity } from '../ambientes/bloco.entity'; +import { UsuarioEntity } from '../autenticacao/usuario.entity'; import { ImagemArquivoEntity } from './imagem_arquivo.entity'; @Entity('imagem') @@ -34,4 +35,10 @@ export class ImagemEntity implements IImagemModel { @OneToMany(() => BlocoEntity, (row) => row.imagemCapa) blocoCapa!: BlocoEntity[]; + + @OneToMany(() => UsuarioEntity, (entity) => entity.imagemCapa) + usuarioCapa!: UsuarioEntity[]; + + @OneToMany(() => UsuarioEntity, (entity) => entity.imagemPerfil) + usuarioPerfil!: UsuarioEntity[]; } diff --git a/luna-backend/src/main.ts b/luna-backend/src/main.ts index 3a4bd9f7..21bdb5a3 100644 --- a/luna-backend/src/main.ts +++ b/luna-backend/src/main.ts @@ -17,11 +17,11 @@ function setupSwaggerConfig(configService: IConfig | null = null) { config.addTag('API', 'SISGEA - API'); + config.addTag('Arquivos', 'Armazenamento / Arquivos'); + config.addTag('Autenticacao'); config.addTag('Usuarios', 'Autenticação / Usuários'); - config.addTag('Arquivos', 'Armazenamento / Arquivos'); - config.addTag('Estados', 'Ambientes / Estados'); config.addTag('Cidades', 'Ambientes / Cidades'); config.addTag('Campi', 'Ambientes / Campi');