Esempio n. 1
0
        public List <Conquista> ComprarAcao()
        {
            using (var ctx = new SimuladorAcoesContext())
            {
                var usuario = ctx.Usuario.Find(_idUsuarioComprador);

                if (usuario == null)
                {
                    throw new Exception("Usuário inexistente");
                }

                var acao = ctx.Empresa.Single(x => x.IdEmpresa == _acaoCompradaId);

                var valorAGastar = acao.CotacaoRecente * _qtdComprada;

                if (valorAGastar > usuario.SaldoUsuario)
                {
                    throw new Exception("Compra ultrapassa saldo do usuário");
                }

                usuario.SaldoUsuario = usuario.SaldoUsuario - valorAGastar;

                AdicionarTransacao(acao, usuario, ctx);

                AdicionarEstoque(usuario, acao, ctx);

                var ret = VerificarConquistas(usuario, ctx);

                ctx.SaveChanges();

                return(ret);
            }
        }
Esempio n. 2
0
        public List <Conquista> VenderAcao()
        {
            using (var ctx = new SimuladorAcoesContext())
            {
                var acaoEmEstoque = ctx.EstoqueAcoes.SingleOrDefault(x => x.EmpresaId == _acaoVendidaId && x.UsuarioId == _idUsuarioVendedor);
                if (acaoEmEstoque == null)
                {
                    throw new Exception("Ação não localizada");
                }

                if (_qtdVendida > acaoEmEstoque.Quantidade)
                {
                    throw new Exception("Não é possível vender mais ações do que possui");
                }

                acaoEmEstoque.Quantidade -= _qtdVendida;

                IncluirTransacaoVenda(ctx, acaoEmEstoque);

                acaoEmEstoque.Usuario.SaldoUsuario += acaoEmEstoque.Acao.CotacaoRecente * _qtdVendida;

                var conquistas = VerificarConquistas(ctx, acaoEmEstoque.Usuario);

                ctx.SaveChanges();

                return(conquistas);
            }
        }