< Summary

Information
Class: Despesas.Application.Implementations.UsuarioBusinessImpl<T>
Assembly: Despesas.Application
File(s): /src/Despesas.Application/Implementations/UsuarioBusinessImpl.cs
Line coverage
61%
Covered lines: 54
Uncovered lines: 34
Coverable lines: 88
Total lines: 143
Line coverage: 61.3%
Branch coverage
19%
Covered branches: 5
Total branches: 26
Branch coverage: 19.2%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
IsValidPerfilAdministrador()100%22100%
IsValidPerfilAdministrador()50%2280%
ConvertToImage()0%156120%
Create()100%11100%
FindAll()100%11100%
Update()50%2275%
FindById()50%2266.66%
Delete()100%11100%
GetProfileImage()0%2040%
UpdateProfileImage()0%620%

File(s)

/src/Despesas.Application/Implementations/UsuarioBusinessImpl.cs

#LineLine coverage
 1using AutoMapper;
 2using Despesas.Application.Abstractions;
 3using Despesas.Application.Dtos;
 4using Despesas.GlobalException.CustomExceptions;
 5using Despesas.GlobalException.CustomExceptions.Core;
 6using Despesas.Repository.UnitOfWork.Abstractions;
 7using Domain.Core.ValueObject;
 8using Domain.Entities;
 9using Microsoft.AspNetCore.Http;
 10using Repository.Persistency.Generic;
 11
 12namespace Despesas.Application.Implementations;
 13
 14public class UsuarioBusinessImpl<Dto> : BusinessBase<Dto, Usuario>, IUsuarioBusiness<Dto> where Dto : UsuarioDto, new()
 15{
 16    private readonly IRepositorio<Usuario> _repositorio;
 17    private readonly IMapper _mapper;
 18
 19    public UsuarioBusinessImpl(IMapper mapper, IRepositorio<Usuario> repositorio, IUnitOfWork<Usuario>? unitOfWork)
 620        : base(mapper, repositorio, unitOfWork)
 621    {
 622        _mapper = mapper;
 623        _repositorio = repositorio;
 624    }
 25
 26    private async Task IsValidPerfilAdministrador(Dto dto)
 327    {
 328        var adm = await UnitOfWork!.Repository.Get(dto.UsuarioId);
 329        if (adm.PerfilUsuario != PerfilUsuario.Perfil.Admin)
 130            throw new UsuarioNaoAutorizadoException();
 231    }
 32
 33    private async Task IsValidPerfilAdministrador(Usuario usuario)
 134    {
 135        var adm = await UnitOfWork!.Repository.Get(usuario.Id);
 136        if (adm.PerfilUsuario != PerfilUsuario.Perfil.Admin)
 037            throw new UsuarioNaoAutorizadoException();
 138    }
 39
 40    private async Task<byte[]> ConvertToImage(IFormFile file)
 041    {
 042        if (file == null || file.Length == 0)
 043            throw new CustomException("Arquivo inválido.");
 44
 045        var extension = Path.GetExtension(file.FileName)?.ToLowerInvariant();
 046        if (extension != ".jpg" && extension != ".jpeg" && extension != ".png")
 047            throw new CustomException("Apenas arquivos jpg, jpeg ou png são aceitos.");
 48
 049        using var memoryStream = new MemoryStream();
 050        await file.CopyToAsync(memoryStream);
 051        return memoryStream.ToArray();
 052    }
 53
 54    public override async Task<Dto> Create(Dto dto)
 155    {
 156        await IsValidPerfilAdministrador(dto);
 157        var usuario = Mapper.Map<Usuario>(dto).CreateUsuario(Mapper.Map<Usuario>(dto));
 158        await UnitOfWork!.Repository.Insert(usuario);
 159        await UnitOfWork.CommitAsync();
 160        var created = await UnitOfWork.Repository.Get(dto.UsuarioId);
 161        return Mapper.Map<Dto>(created);
 162    }
 63
 64    public override async Task<List<Dto>> FindAll(Guid idUsuario)
 165    {
 166        var usuario = await UnitOfWork!.Repository.Find(u => u.Id == idUsuario);
 167        await IsValidPerfilAdministrador(usuario.FirstOrDefault());
 168        var all = await UnitOfWork.Repository.GetAll();
 169        return Mapper.Map<List<Dto>>(all);
 170    }
 71
 72    public override async Task<Dto> Update(Dto dto)
 173    {
 74        try
 175        {
 176            var usuario = Mapper.Map<Usuario>(dto);
 177            await UnitOfWork!.Repository.Update(usuario);
 178            await UnitOfWork.CommitAsync();
 179            var updated = await UnitOfWork.Repository.Get(usuario.Id)
 180                ?? throw new UsuarioNaoEncontradoException();
 181            return Mapper.Map<Dto>(updated);
 82        }
 083        catch
 084        {
 085            throw;
 86        }
 187    }
 88
 89    public override async Task<Dto> FindById(Guid id)
 190    {
 91        try
 192        {
 193            var usuario = await UnitOfWork!.Repository.Find(u => u.Id == id)
 194                ?? throw new UsuarioNaoEncontradoException();
 195            return Mapper.Map<Dto>(usuario.FirstOrDefault());
 96        }
 097        catch
 098        {
 099            throw;
 100        }
 1101    }
 102
 103    public override async Task<bool> Delete(Dto dto)
 2104    {
 105        try
 2106        {
 2107            await IsValidPerfilAdministrador(dto);
 1108            var usuario = Mapper.Map<Usuario>(dto);
 1109            await UnitOfWork!.Repository.Delete(usuario.Id);
 1110            await UnitOfWork.CommitAsync();
 1111            return true;
 112        }
 1113        catch
 1114        {
 1115            throw;
 116        }
 1117    }
 118
 119    public async Task<byte[]> GetProfileImage(Guid userIdentity)
 0120    {
 0121        var usuario = await UnitOfWork!.Repository.Get(userIdentity)
 0122            ?? throw new UsuarioNaoEncontradoException();
 0123        return usuario.Profile ?? Array.Empty<byte>();
 0124    }
 125
 126    public async Task<byte[]> UpdateProfileImage(Guid userIdentity, IFormFile file)
 0127    {
 128        try
 0129        {
 0130            var usuario = await UnitOfWork!.Repository.Get(userIdentity)
 0131                ?? throw new UsuarioNaoEncontradoException();
 132
 0133            usuario.Profile = await ConvertToImage(file);
 0134            await UnitOfWork!.Repository.Update(usuario);
 0135            await UnitOfWork.CommitAsync();
 0136            return usuario.Profile;
 137        }
 0138        catch
 0139        {
 0140            throw new CustomException("Erro ao atualizar a imagem de perfil. Tente novamente mais tarde.");
 141        }
 0142    }
 143}