using Microsoft.AspNetCore.Mvc; using PolyclinicContracts.BindingModels; using PolyclinicContracts.BusinessLogicsContracts; using PolyclinicContracts.SearchModels; using PolyclinicDataModels.Enums; using PolyclinicDataModels.Models; using PolyclinicWebAppImplementer.Models; namespace PolyclinicWebAppImplementer.Controllers { public class UserController : Controller { private readonly IUserLogic _userLogic; public UserController(IUserLogic userLogic) { _userLogic = userLogic; } [HttpGet] [HttpPost] public IActionResult Login(LoginModel model) { var errors = new List(); if (HttpContext.Request.Method == "POST") { var user = _userLogic.ReadElement(new UserSearchModel { Email = model.Email, Password = model.Password }); if (user == null) { errors.Add("Неверные логин или пароль"); } else if (user.Role != UserRole.Исполнитель) { errors.Add("Пользователь имеет неразрешенную роль"); } if (errors.Count > 0) { model = new LoginModel { Errors = errors }; return View(model); } LoginManager.LogginedUser = user; return RedirectToAction("", "Home"); } else { model = new(); return View(model); } } [HttpGet] [HttpPost] public IActionResult Register(RegisterModel model) { var errors = new List(); if (HttpContext.Request.Method == "POST") { if (_userLogic.ReadElement(new UserSearchModel { Email = model.Email }) != null) { errors.Add("Пользователь с таким Email уже есть"); } if (model.Password != model.ConfirmPassword) { errors.Add("Пароли не совпадают"); } if (errors.Count > 0) { model.Errors = errors; model.Password = string.Empty; model.ConfirmPassword = string.Empty; return View(model); } var user = new UserBindingModel { FIO = model.FIO, Email = model.Email, Password = model.Password, Role = UserRole.Исполнитель }; _userLogic.Create(user); return RedirectToAction("Login"); } else { return View(model); } } [HttpPost] public IActionResult Logout() { LoginManager.LogginedUser = null; return RedirectToAction("Login"); } [HttpGet] [HttpPost] public IActionResult Privacy() { if (LoginManager.LogginedUser == null) { return RedirectToAction("Login"); } return View(); } } }