< Summary

Information
Class: Despesas.Application.Implementations.DespesaBusinessImpl<T>
Assembly: Despesas.Application
File(s): /src/Despesas.Application/Implementations/DespesaBusinessImpl.cs
Line coverage
95%
Covered lines: 62
Uncovered lines: 3
Coverable lines: 65
Total lines: 97
Line coverage: 95.3%
Branch coverage
77%
Covered branches: 17
Total branches: 22
Branch coverage: 77.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%
IsValidDespesa()50%4480%
IsValidCategoria()100%1010100%
Create()50%2290%
FindAll()100%11100%
FindById()100%22100%
Update()50%22100%
Delete()50%2290%

File(s)

/src/Despesas.Application/Implementations/DespesaBusinessImpl.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 Repository.Persistency.Generic;
 10
 11namespace Despesas.Application.Implementations;
 12public class DespesaBusinessImpl<Dto> : BusinessBase<Dto, Despesa>, IBusinessBase<Dto, Despesa> where Dto : DespesaDto, 
 13{
 14    private readonly IRepositorio<Despesa> _repositorio;
 15    private readonly IUnitOfWork<Categoria> _unitOfWorkCategoria;
 16    private readonly IMapper _mapper;
 17
 718    public DespesaBusinessImpl(IMapper mapper, IRepositorio<Despesa> repositorio, IUnitOfWork<Despesa> unitOfWork, IUnit
 719    {
 720        _repositorio = repositorio;
 721        _mapper = mapper;
 722        _unitOfWorkCategoria =  unitOfWorkCategoria;
 723    }
 24
 25    private async Task IsValidDespesa(Despesa dto)
 326    {
 327        var despesa = await UnitOfWork!.Repository.Get(dto.Id);
 328        if (despesa == null || despesa.UsuarioId != dto.UsuarioId)
 029            throw new DespesaUsuarioInvalidaException();
 330    }
 31
 32    private async Task IsValidCategoria(Despesa dto)
 333    {
 334        var categoria = await _unitOfWorkCategoria.Repository.Get(dto.CategoriaId);
 335        if (categoria == null
 336            || categoria.UsuarioId != dto.UsuarioId
 337            || categoria == null
 338            || categoria.TipoCategoria != TipoCategoria.CategoriaType.Despesa
 339            || categoria.Id != dto.CategoriaId)
 140            throw new CategoriaUsuarioInvalidaException();
 241    }
 42
 43    public override async Task<Dto> Create(Dto dto)
 244    {
 245        var despesa = _mapper.Map<Despesa>(dto);
 246        await IsValidCategoria(despesa);
 147        await UnitOfWork.Repository.Insert(despesa);
 148        await UnitOfWork.CommitAsync();
 149        despesa = await UnitOfWork.Repository.Get(despesa.Id);
 150        if (despesa is null)
 051            throw new CustomException("Não foi possível realizar o cadastro da despesa.");
 152        return _mapper.Map<Dto>(despesa);
 153    }
 54
 55    public override async Task<List<Dto>> FindAll(Guid idUsuario)
 156    {
 157        var result = await UnitOfWork.Repository.Find(repo => repo.UsuarioId == idUsuario && repo.Categoria.TipoCategori
 158        var despesas = result.ToList();
 159        var dtos = _mapper.Map<List<Dto>>(despesas);
 160        return dtos;
 161    }
 62
 63    public override async Task<Dto> FindById(Guid id, Guid idUsuario)
 264    {
 265        var result = await UnitOfWork.Repository.Find(d => d.Id == id && d.UsuarioId == idUsuario);
 366        if (result is null) return null;
 167        var despesa = result.FirstOrDefault();
 168        despesa.UsuarioId = idUsuario;
 169        await IsValidDespesa(despesa);
 170        var despesaDto = _mapper.Map<Dto>(despesa);
 171        return despesaDto;
 272    }
 73
 74    public override async Task<Dto> Update(Dto dto)
 175    {
 176        var despesa = _mapper.Map<Despesa>(dto);
 177        await IsValidDespesa(despesa);
 178        await IsValidCategoria(despesa);
 179        await UnitOfWork.Repository.Update(despesa);
 180        await UnitOfWork.CommitAsync();
 181        despesa = await UnitOfWork.Repository.Get(dto.Id.Value)
 182            ?? throw new CustomException("Não foi possível atualizar o cadastro da despesa.");
 183        return _mapper.Map<Dto>(despesa);
 184    }
 85
 86    public override async Task<bool> Delete(Dto dto)
 187    {
 188        var result = await UnitOfWork.Repository.Find(d => d.Id == dto.Id && d.UsuarioId == dto.UsuarioId);
 189        if (result is null)
 090            throw new UsuarioNaoAutorizadoException();
 191        var despesa = result.FirstOrDefault();
 192        await IsValidDespesa(despesa);
 193        await UnitOfWork.Repository.Delete(despesa.Id);
 194        await UnitOfWork.CommitAsync();
 195        return true;
 196    }
 97}