public List <Sugestao> CalculaSugestoes(Foodbiter utilizador, Pesquisa.Pesquisa pesquisa, Localizacao localizacaoAtual, double?precoMin, double?precoMax, double distancia, List <Especialidade> especialidades) { var dataAgora = DateTime.Now; var especialidadesTratadas = especialidades // filtro das horas de abertura .Where(e => e.Estabelecimento.Aberto(dataAgora)) // filtro da distancia .Where(e => e.Estabelecimento.Localizacao.DistanciaA(localizacaoAtual) < distancia) // filtro do preço .Where(e => e.Preco >= precoMin.GetValueOrDefault(0) && e.Preco <= precoMax.GetValueOrDefault(e.Preco)) // filtro das despreferencias .Where(e => pesquisa.Despreferencias.Select(c => c.ToLower()).Intersect(e.Caracteristicas.Select(c => c.ToLower())).Count() == 0) // filtro das avaliacoes < 3 .Where(e => utilizador.Avaliacoes.All(a => a.AvaliacaoFraca(e.IdEspecialidade) == false)); especialidadesTratadas = AplicaCorrespondencia(especialidadesTratadas, utilizador.Preferencias, pesquisa.Preferencias); var sugestoes = especialidadesTratadas // Limitar a 3 .Take(3) // Ordenar por distancia .OrderBy(e => e.Estabelecimento.Localizacao.DistanciaA(localizacaoAtual)) // Ordenar por preco .ThenByDescending(e => e.Preco) // converter em sugestoes .Select(e => new Sugestao(e)) .ToList(); return(sugestoes); }
public Foodbiter ToFoodbiter() { Foodbiter foodbiter = new Foodbiter() { Username = Username, Nome = Nome, Password = Password, Email = Email, DataNascimento = DataNascimento, Avaliacoes = Avaliacoes?.Select(a => a.ToReview()).ToList(), Preferencias = Preferencias?.Select(p => p.ToPreferencia()).ToList(), Despreferencias = Preferencias?.Select(p => p.ToDespreferencia()).ToList() }; if (foodbiter.Avaliacoes == null) { foodbiter.Avaliacoes = new List <Review>(); } if (foodbiter.Preferencias == null) { foodbiter.Preferencias = new List <Preferencia>(); } if (foodbiter.Despreferencias == null) { foodbiter.Despreferencias = new List <Preferencia>(); } return(foodbiter); }
public UtilizadorBD(Foodbiter foodbiter) { Username = foodbiter.Username; Nome = foodbiter.Nome; Password = foodbiter.GetPasswordHashed(); Email = foodbiter.Email; DataNascimento = foodbiter.DataNascimento; Avaliacoes = new List <ReviewBD>(); Preferencias = new List <PreferenciaBD>(); }
public IActionResult Registar([FromBody] Foodbiter foodbiter) { var utilizador = utilizadorFacade.GetUtilizador(foodbiter.Username); if (utilizador != null) { return(BadRequest()); } utilizadorFacade.Registar(foodbiter.Username, foodbiter); return(Ok()); }
public List <Sugestao.Sugestao> Pesquisa(Foodbiter utilizador, string textoPesquisa, Localizacao localizacaoAtual, double?precoMin, double?precoMax, double distancia) { List <string> nomesPetiscos = especialidadeDAO.GetAllNomesPetiscos(); Pesquisa pesquisa = parserPesquisa.ParsePesquisa(textoPesquisa, nomesPetiscos); List <Especialidade> especialidades = especialidadeDAO.GetAll(pesquisa.Petisco); var sugestoes = motorSugestoes.CalculaSugestoes(utilizador, pesquisa, localizacaoAtual, precoMin, precoMax, distancia, especialidades); if (sugestoes.Count > 0) { utilizadorDAO.AddUserPreferences(utilizador.Username, sugestoes[0].IdEspecialidade, pesquisa.Preferencias, pesquisa.Despreferencias); } return(sugestoes); }
public void AtualizarPerfil([FromBody] Foodbiter foodbiter) { utilizadorFacade.AtualizarPerfil(foodbiter.Username, foodbiter.Nome, foodbiter.Email, foodbiter.DataNascimento, foodbiter.Password); }
public void Add(Foodbiter foodBiter) { contextoBD.Utilizadores.Add(new UtilizadorBD(foodBiter)); contextoBD.SaveChanges(); }