<commit_before>﻿using LojaNinja.Dominio;
using LojaNinja.MVC.Models;
using LojaNinja.Repositorio;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace LojaNinja.MVC.Controllers
{
    public class LoginController : Controller
    {

        private UsuarioServico _usuarioServico; 

        public LoginController()
        {
            // O serviço de usuário sabe que precisamos de alguém que persista usuário, alguém que implementa
            // as regras dessa persistência, afinal, o Método BuscarUsuarioPorAutenticacao do serviço utiliza
            // o repositório, concorda?
            // Bem, no domínio, só temos as regras de persistência, não a implementação.
            // Aqui na camada WEB, onde tudo se junta, podemos definir quem vai ter o papel do que.
            // Neste caso, definimos que a regra de persistência de usuário será realizada pela classe UsuarioRepositorio.
            _usuarioServico = new UsuarioServico(
                    new RepositorioUsuario()
                );
        }

        [HttpGet]
        public ActionResult Index()
        {
            return View();
        }

        [HttpGet]
        public ActionResult Cadastro()
        {
            return View();
        }
        [HttpPost]
        public ActionResult ValidaCadastro(LoginViewModel model)
        {
            if (model.Senha != model.ConfirmarSenha)
            {
                ModelState.AddModelError("", "As senhas devem ser iguais");                
            }
            else
            {
                string[] permissoes = new string[] { "COMUM" };

                _usuarioServico.CadastrarUsuario(model.Email, model.Nome, model.Senha, permissoes );
                
                ViewBag.Mensagem = "Parabéns, você foi cadastrado com sucesso!";
            }            
            return View("Cadastro");
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Entrar(LoginViewModel model)
        {
            return View("Index");
        }
    }
}<commit_msg>refactor(LoginController): alterar comportamento da ection Entrar.<commit_after>﻿using BaseAulaSeguranca.Models.Login;
using BaseAulaSeguranca.Services;
using LojaNinja.Dominio;
using LojaNinja.MVC.Models;
using LojaNinja.Repositorio;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace LojaNinja.MVC.Controllers
{
    public class LoginController : Controller
    {

        private UsuarioServico _usuarioServico; 

        public LoginController()
        {
            // O serviço de usuário sabe que precisamos de alguém que persista usuário, alguém que implementa
            // as regras dessa persistência, afinal, o Método BuscarUsuarioPorAutenticacao do serviço utiliza
            // o repositório, concorda?
            // Bem, no domínio, só temos as regras de persistência, não a implementação.
            // Aqui na camada WEB, onde tudo se junta, podemos definir quem vai ter o papel do que.
            // Neste caso, definimos que a regra de persistência de usuário será realizada pela classe UsuarioRepositorio.
            _usuarioServico = new UsuarioServico(
                    new RepositorioUsuario()
                );
        }

        [HttpGet]
        public ActionResult Index()
        {
            return View();
        }

        [HttpGet]
        public ActionResult Cadastro()
        {
            return View();
        }
        [HttpPost]
        public ActionResult ValidaCadastro(LoginViewModel model)
        {
            if (model.Senha != model.ConfirmarSenha)
            {
                ModelState.AddModelError("", "As senhas devem ser iguais");                
            }
            else
            {
                string[] permissoes = new string[] { "COMUM" };

                _usuarioServico.CadastrarUsuario(model.Email, model.Nome, model.Senha, permissoes );
                
                ViewBag.Mensagem = "Parabéns, você foi cadastrado com sucesso!";
            }            
            return View("Cadastro");
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Entrar(LoginModel loginViewModel)
        {
            if (ModelState.IsValid)
            {
                // Buscamos o usuário de nosso "Banco de Dados" por seu login e senha.
                Usuario usuarioEncontrado =
                    _usuarioServico.BuscarUsuarioPorAutenticacao(
                            loginViewModel.Email, loginViewModel.Senha
                        );

                if (usuarioEncontrado != null)
                {
                    // É sempre bom criar uma Model só para o usuário logado.
                    // Digamos que você queira utilizar somente a classe Usuário para isso,
                    // então se quisesse guardar coisas que são da sessão e não da classe usuário, como faria?
                    // mudaria a classe Usuario? Não, porque não é de sua responsabilidade os dados de sessão.
                    // mas uma view model pode ser mais flexivel.
                    var usuarioLogadoModel = new UsuarioLogadoModel(usuarioEncontrado);

                    // Encapsulamos aqui a regra para criar a sessão.
                    ServicoDeSessao.CriarSessao(usuarioLogadoModel);
                    return RedirectToAction("Listagem","Pedido");
                }
                else
                {
                    ModelState.AddModelError("INVALID_USER", "Usuário ou senha inválido.");
                }
            }

            return View("Index", loginViewModel);
        }
    }
}
{'fraction_non_alphanumeric': 0.06839251355606087, 'fraction_numerical': 0.0, 'mean_word_length': 1.689557855126999, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3525486', 'n_tokens_mistral': 1670, 'n_tokens_neox': 1595, 'n_words': 431}