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); } }
public VerificadorGeralConquistas(int IdUsuario, SimuladorAcoesContext ctx) { idUsuario = IdUsuario; _ctx = ctx; _conquistasNaoAlcancadas = _ctx.DefinicaoConquista.Where(x => !_ctx.Conquista.Any(y => y.IdUsuario == IdUsuario && x.IdDefinicaoConquista == y.IdDefinicaoConquista)) .ToList(); }
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); } }
public RequestResponse <List <ListaEstoqueUsuarioViewModel> > ListarAcoesUsuario(int idUsuario) { var ret = new RequestResponse <List <ListaEstoqueUsuarioViewModel> >(); try { using (var ctx = new SimuladorAcoesContext()) { var listaViewModel = new List <ListaEstoqueUsuarioViewModel>(); var listaEstoque = ctx.EstoqueAcoes.Where(x => x.UsuarioId == idUsuario && x.Quantidade > 0).Include(x => x.Acao); foreach (var item in listaEstoque) { listaViewModel.Add(item.ConvertToViewModel()); } ret.Code = 0; ret.Message = "Sucesso"; ret.ReturnObject = listaViewModel; return(ret); } } catch (Exception ex) { ret.Code = -1; ret.Message = ex.Message; return(ret); } }
public RequestResponse <List <NoticiaPorEmpresaViewModel> > Listar(int idEmpresa) { var objRetorno = new RequestResponse <List <NoticiaPorEmpresaViewModel> >(); try { using (var ctx = new SimuladorAcoesContext()) { var ret = new List <NoticiaPorEmpresaViewModel>(); var listaNoticias = ctx.Noticia.Where(x => x.EmpresaId == idEmpresa); foreach (var noticia in listaNoticias) { ret.Add(noticia.ConvertToViewModel()); } objRetorno.Code = 0; objRetorno.Message = "Sucesso"; objRetorno.ReturnObject = ret; return(objRetorno); } } catch (Exception ex) { objRetorno.Code = -1; objRetorno.Message = ex.Message; return(objRetorno); } }
public RequestResponse <List <LogCompraVendaViewModel> > ListarTransacoes(int idUsuario, int idEmpresa) { var response = new RequestResponse <List <LogCompraVendaViewModel> >(); try { using (var ctx = new SimuladorAcoesContext()) { var listaRetorno = new List <LogCompraVendaViewModel>(); var listaTransacoes = ctx.Transacoes.Where(x => x.UsuarioId == idUsuario && x.EmpresaId == idEmpresa); foreach (var transacao in listaTransacoes) { listaRetorno.Add(transacao.ConvertToViewModel()); } response.Code = 0; response.Message = "Sucesso"; response.ReturnObject = listaRetorno; return(response); } } catch (Exception ex) { response.Code = -1; response.Message = ex.Message; return(response); } }
public RequestResponse <List <ExibicaoConquistasViewModel> > ListarConquistas(int usuarioId) { var ret = new RequestResponse <List <ExibicaoConquistasViewModel> >(); try { using (var ctx = new SimuladorAcoesContext()) { var listaDados = new List <ExibicaoConquistasViewModel>(); var listaConquistas = ctx.DefinicaoConquista.ToList(); foreach (var c in listaConquistas) { listaDados.Add(c.ConvertToViewModel(usuarioId, ctx)); } ret.Code = 0; ret.Message = "Sucesso"; ret.ReturnObject = listaDados; return(ret); } } catch (Exception ex) { ret.Message = ex.Message; ret.Code = -1; return(ret); } }
private List <Conquista> VerificarConquistas(Usuario usuario, SimuladorAcoesContext ctx) { var conquistasObtidas = new VerificadorGeralConquistas(usuario.IdUsuario, ctx).VerificarConquistasCompraAindaNaoAlcancadas(); foreach (var c in conquistasObtidas) { ctx.Conquista.Add(c); usuario.DescontoAcumuladoUsuario += c.DefinicaoConquista.ValorDesconto; } return(conquistasObtidas); }
private void AdicionarTransacao(AcaoEmpresa acao, Usuario usuario, SimuladorAcoesContext ctx) { var transacao = new Transacao() { CompraOuVenda = TipoTransacao.Compra, ValorTransacao = acao.CotacaoRecente, AcaoComprada = acao, DataTransacao = DateTime.Now, Usuario = usuario, QtdTransacao = _qtdComprada, }; ctx.Transacoes.Add(transacao); }
public List <EmpresasMenuPrincipalViewModel> ListarEmpresas() { using (var db = new SimuladorAcoesContext()) { var ret = new List <EmpresasMenuPrincipalViewModel>(); foreach (var acao in db.Empresa) { ret.Add(acao.ConvertToViewModel()); } return(ret); } }
private void IncluirTransacaoVenda(SimuladorAcoesContext ctx, EstoqueAcoes acaoEmEstoque) { var transacao = new Transacao() { CompraOuVenda = TipoTransacao.Venda, DataTransacao = DateTime.Now, AcaoComprada = acaoEmEstoque.Acao, QtdTransacao = _qtdVendida, Usuario = acaoEmEstoque.Usuario, ValorTransacao = acaoEmEstoque.Acao.CotacaoRecente }; ctx.Transacoes.Add(transacao); }
private void AdicionarEstoque(Usuario usuario, AcaoEmpresa acao, SimuladorAcoesContext ctx) { var existeEstoque = ctx.EstoqueAcoes.SingleOrDefault(x => x.UsuarioId == usuario.IdUsuario && x.EmpresaId == acao.IdEmpresa); if (existeEstoque == null) { var novoItemEstoque = new EstoqueAcoes() { Acao = acao, Usuario = usuario, Quantidade = _qtdComprada }; ctx.EstoqueAcoes.Add(novoItemEstoque); } else { existeEstoque.Quantidade += _qtdComprada; } }
public RequestResponse <UserViewModel> Me(int idUsuario) { try { using (var ctx = new SimuladorAcoesContext()) { var ret = new RequestResponse <UserViewModel>(); var user = ctx.Usuario.Single(x => x.IdUsuario == idUsuario); ret.Message = "Sucesso"; ret.ReturnObject = user.ConvertToViewModel(); ret.Code = 0; return(ret); } } catch (Exception ex) { return(new RequestResponse <UserViewModel>(-1, ex.Message)); } }
public Conquista VerificarSeConquistaFoiAlcancada(int idUsuario, DefinicaoConquista conquistaAVerificar, SimuladorAcoesContext ctx) { if (!ctx.Transacoes.Local.Any(x => x.CompraOuVenda == TipoTransacao.Venda)) { return(null); } return(new Conquista() { DataConquista = DateTime.Now, DefinicaoConquista = conquistaAVerificar, IdUsuario = idUsuario }); }
public Conquista VerificarSeConquistaFoiAlcancada(int idUsuario, DefinicaoConquista conquistaAVerificar, SimuladorAcoesContext ctx) { var transacoesUsuario = ctx.Transacoes.Local.Where(x => x.CompraOuVenda == TipoTransacao.Venda && x.UsuarioId == idUsuario); if (!transacoesUsuario.Any()) { return(null); } if (transacoesUsuario.Sum(y => y.ValorTransacao * y.QtdTransacao) > 300) { return(new Conquista() { DataConquista = DateTime.Now, DefinicaoConquista = conquistaAVerificar, IdUsuario = idUsuario }); } else { return(null); } }
public Conquista VerificarSeConquistaFoiAlcancada(int idUsuario, DefinicaoConquista conquistaAVerificar, SimuladorAcoesContext ctx) { if (ctx.Transacoes.Local.Any(x => x.AcaoComprada.ValorDeMercado >= ValorMercadoConquista)) { return(new Conquista() { DataConquista = DateTime.Now, DefinicaoConquista = conquistaAVerificar, IdUsuario = idUsuario }); } else { return(null); } }
public static ExibicaoConquistasViewModel ConvertToViewModel(this DefinicaoConquista o, int userId, SimuladorAcoesContext ctx) { return(new ExibicaoConquistasViewModel() { Completada = ctx.Conquista.Any(x => x.IdUsuario == userId && x.IdDefinicaoConquista == o.IdDefinicaoConquista), DescricaoConquista = o.DescricaoConquista, IdConquista = o.IdDefinicaoConquista, TituloConquista = o.TituloConquista, ValorDesconto = o.ValorDesconto }); }