diff --git a/Polyclinic/PolyclinicWebAppSuretor/Controllers/HomeController.cs b/Polyclinic/PolyclinicWebAppSuretor/Controllers/HomeController.cs index 57fe5fb..7bef273 100644 --- a/Polyclinic/PolyclinicWebAppSuretor/Controllers/HomeController.cs +++ b/Polyclinic/PolyclinicWebAppSuretor/Controllers/HomeController.cs @@ -1,10 +1,12 @@ using Microsoft.AspNetCore.Mvc; +using Microsoft.IdentityModel.Tokens; using PolyclinicBusinessLogic.BusinessLogics; using PolyclinicBusinessLogic.OfficePackage; using PolyclinicContracts.BindingModels; using PolyclinicContracts.BusinessLogicsContracts; using PolyclinicContracts.SearchModels; using PolyclinicContracts.ViewModels; +using PolyclinicDataModels.Enums; using PolyclinicDataModels.Models; using PolyclinicWebAppSuretor.Models; using System.Diagnostics; @@ -51,6 +53,12 @@ namespace PolyclinicWebAppSuretor.Controllers return View(); } + /// + /// USER + /// + /// + /// + [HttpGet] [HttpPost] public IActionResult Register(RegisterModel model) @@ -70,14 +78,112 @@ namespace PolyclinicWebAppSuretor.Controllers model.FIO = model.FIO; return View(model); } - /*var user = new UserViewModel { - Email - };*/ + var user = new UserBindingModel + { + FIO = model.FIO, + Email = model.Email, + Password = model.Password, + Role = UserRole.Поручитель + }; + _userLogic.Create(user); return RedirectToAction("Login"); } else { - return View(); + return View(model); + } + } + + [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); + } + } + + [HttpPost] + public IActionResult Logout() + { + LoginManager.LogginedUser = null; + return RedirectToAction("Login"); + } + + [HttpGet] + [HttpPost] + public IActionResult Privacy(UserPrivacyModel model) + { + var currentUser = LoginManager.LogginedUser; + if (currentUser == null) + { + return RedirectToAction("Login"); + } + if (HttpContext.Request.Method == "POST") + { + var errors = new List(); + var checkedUser = _userLogic.ReadElement(new UserSearchModel { Email = model.Email }); + if (checkedUser != null && checkedUser.Id != LoginManager.LogginedUser.Id) + { + 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 + { + Id = currentUser.Id, + FIO = model.FIO, + Email = model.Email, + Password = model.Password.IsNullOrEmpty() ? LoginManager.LogginedUser.Password : model.Password, + }; + _userLogic.Update(user); + LoginManager.LogginedUser = _userLogic.ReadElement(new UserSearchModel { Id = model.Id }); + return RedirectToAction("Privacy"); + } + else + { + model = new() + { + Id = currentUser.Id, + FIO = currentUser.FIO, + Email = currentUser.Email, + Role = currentUser.Role + }; + return View(model); } } diff --git a/Polyclinic/PolyclinicWebAppSuretor/Models/UserPrivacyModel.cs b/Polyclinic/PolyclinicWebAppSuretor/Models/UserPrivacyModel.cs index d3990d2..dc444f1 100644 --- a/Polyclinic/PolyclinicWebAppSuretor/Models/UserPrivacyModel.cs +++ b/Polyclinic/PolyclinicWebAppSuretor/Models/UserPrivacyModel.cs @@ -3,7 +3,7 @@ using System.ComponentModel; namespace PolyclinicWebAppSuretor.Models { - public class UserPrivacyModel + public class UserPrivacyModel : RegisterModel { public int Id { get; set; }