Skip to content

Commit

Permalink
feat: arquivo: get file: acesso via usuario
Browse files Browse the repository at this point in the history
  • Loading branch information
guesant committed Mar 29, 2024
1 parent b8d6449 commit 7cf01dd
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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 | {
Expand Down Expand Up @@ -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();

Expand All @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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')
Expand Down Expand Up @@ -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[];
}
4 changes: 2 additions & 2 deletions luna-backend/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down

0 comments on commit 7cf01dd

Please sign in to comment.