public async Task <ISaida> ObterContaPorId(int idConta, int idUsuario) { this.NotificarSeMenorOuIgualA(idConta, 0, ContaMensagem.Id_Conta_Invalido); this.NotificarSeMenorOuIgualA(idUsuario, 0, Mensagem.Id_Usuario_Invalido); if (this.Invalido) { return(new Saida(false, this.Mensagens, null)); } var conta = await _contaRepositorio.ObterPorId(idConta); // Verifica se a conta existe this.NotificarSeNulo(conta, ContaMensagem.Id_Conta_Nao_Existe); if (this.Invalido) { return(new Saida(false, this.Mensagens, null)); } // Verifica se a conta pertece ao usuário informado. this.NotificarSeDiferentes(conta.IdUsuario, idUsuario, ContaMensagem.Conta_Nao_Pertence_Usuario); return(this.Invalido ? new Saida(false, this.Mensagens, null) : new Saida(true, new[] { ContaMensagem.Conta_Encontrada_Com_Sucesso }, new ContaSaida(conta))); }
public void Creditar(CreditoCommand creditoCommand) { var conta = _contaRepositorio.ObterPorId(creditoCommand.ContaId); conta.Creditar(creditoCommand.Valor); _contaRepositorio.Editar(conta); }
public async Task <ISaida> CadastrarLancamento(LancamentoEntrada entrada) { // Verifica se as informações para cadastro foram informadas corretamente if (entrada.Invalido) { return(new Saida(false, entrada.Mensagens, null)); } // Verifica se a categoria existe a partir do ID informado. this.NotificarSeFalso(await _categoriaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdCategoria), CategoriaMensagem.Id_Categoria_Nao_Existe); // Verifica se a conta existe a partir do ID informado. this.NotificarSeFalso(await _contaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdConta), ContaMensagem.Id_Conta_Nao_Existe); // Verifica se a pessoa existe a partir do ID informado. if (entrada.IdPessoa.HasValue) { this.NotificarSeFalso(await _pessoaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdPessoa.Value), PessoaMensagem.Id_Pessoa_Nao_Existe); } // Verifica se a parcela existe a partir do ID informado. if (entrada.IdParcela.HasValue) { this.NotificarSeFalso(await _parcelaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdParcela.Value), ParcelaMensagem.Id_Parcela_Nao_Existe); } if (this.Invalido) { return(new Saida(false, this.Mensagens, null)); } var conta = await _contaRepositorio.ObterPorId(entrada.IdConta); // Verifica se a quantidade de ações vendidas é maior que o total de ações disponíveis na carteira. if (conta.Tipo == TipoConta.Acoes && entrada.IdCategoria == (int)TipoCategoriaEspecial.VendaAcoes) { var operacoes = await _lancamentoRepositorio.ObterPorPeriodo(conta.Id, new DateTime(2019, 1, 1), DateTime.Today.AddHours(23).AddMinutes(59).AddSeconds(59)); var qtdAcoesCompradas = operacoes.Where(x => x.IdCategoria == (int)TipoCategoriaEspecial.CompraAcoes).Sum(x => x.QtdRendaVariavel.HasValue ? x.QtdRendaVariavel.Value : 0); var qtdAcoesVendidas = operacoes.Where(x => x.IdCategoria == (int)TipoCategoriaEspecial.VendaAcoes).Sum(x => x.QtdRendaVariavel.HasValue ? x.QtdRendaVariavel.Value : 0); var qtdAcoesDisponivel = qtdAcoesCompradas - qtdAcoesVendidas; this.NotificarSeVerdadeiro(entrada.QuantidadeAcoes > qtdAcoesDisponivel, LancamentoMensagem.Qtd_Acoes_Venda_Maior_Disponivel_Carteira); if (this.Invalido) { return(new Saida(false, this.Mensagens, null)); } } var lancamento = new Lancamento(entrada); await _lancamentoRepositorio.Inserir(lancamento); await _uow.Commit(); return(new Saida(true, new[] { LancamentoMensagem.Lancamento_Cadastrado_Com_Sucesso }, new LancamentoSaida(await _lancamentoRepositorio.ObterPorId(lancamento.Id)))); }
public void Nao_Deve_Obter_Conta_Por_Id_De_Outro_Usuario() { var idConta = 1; var idUsuario = 1; _contaRepositorio.ObterPorId(idConta) .Returns(new Conta(new CadastrarContaEntrada(idUsuario, "Conta 1", TipoConta.ContaCorrente))); _contaServico = Substitute.For <ContaServico>(_contaRepositorio, _uow); var saida = _contaServico.ObterContaPorId(idConta, 2).Result; Assert.IsTrue(!saida.Sucesso && saida.Mensagens.Any(x => x == ContaMensagem.Conta_Nao_Pertence_Usuario), string.Join(", ", saida.Mensagens)); }
public async Task <Model.Conta> Handle(AlterarContaCommand request, CancellationToken cancellationToken) { using (var uow = unitOfWork) { var conta = await contaRepositorio.ObterPorId(request.Id) ?? new Model.Conta(); var resultado = await contaRepositorio.Alterar(mapper.Map(request, conta)); uow.PersistirTransacao(); return(resultado); } }
public async Task <ISaida> CadastrarAgendamento(AgendamentoEntrada entrada) { // Verifica se as informações para cadastro foram informadas corretamente if (entrada.Invalido) { return(new Saida(false, entrada.Mensagens, null)); } // Verifica se a categoria existe a partir do ID informado. this.NotificarSeFalso(await _categoriaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdCategoria), CategoriaMensagem.Id_Categoria_Nao_Existe); // Verifica se a conta ou cartão de crédito existem a partir do ID informado. if (entrada.IdConta.HasValue) { var conta = await _contaRepositorio.ObterPorId(entrada.IdConta.Value); this .NotificarSeNulo(conta, ContaMensagem.Id_Conta_Nao_Existe) .NotificarSeVerdadeiro(conta?.Tipo == TipoConta.Acoes, AgendamentoMensagem.Tipo_Conta_Invalida); } else { var cartao = (CartaoCreditoSaida)(await _cartaoCreditoServico.ObterCartaoCreditoPorId(entrada.IdCartaoCredito.Value, entrada.IdUsuario)).Retorno; this .NotificarSeNulo(cartao, CartaoCreditoMensagem.Id_Cartao_Nao_Existe) .NotificarSeVerdadeiro(cartao != null && (cartao.ValorLimiteDisponivel ?? 0) < entrada.QuantidadeParcelas * entrada.ValorParcela, $"O valor total do agendamento ({(entrada.QuantidadeParcelas * entrada.ValorParcela).ToString("C2")}) é superior ao valor do limite disponível para o cartão ({cartao.ValorLimiteDisponivel?.ToString("C2")})."); } // Verifica se a pessoa existe a partir do ID informado. if (entrada.IdPessoa.HasValue) { this.NotificarSeFalso(await _pessoaRepositorio.VerificarExistenciaPorId(entrada.IdUsuario, entrada.IdPessoa.Value), PessoaMensagem.Id_Pessoa_Nao_Existe); } if (this.Invalido) { return(new Saida(false, this.Mensagens, null)); } var agendamento = new Agendamento(entrada); await _agendamentoRepositorio.Inserir(agendamento); await _uow.Commit(); return(new Saida(true, new[] { AgendamentoMensagem.Agendamento_Cadastrado_Com_Sucesso }, new AgendamentoSaida(await _agendamentoRepositorio.ObterPorId(agendamento.Id)))); }
public async Task <IActionResult> Get(int id = 0) { try { if (id != 0) { return(Ok(_contaRepositorio.ObterPorId(id))); } return(Ok(_contaRepositorio.ObterTodos())); } catch (Exception ex) { return(BadRequest(ex.ToString())); } }