Работает личный кабинет пользователя

This commit is contained in:
Никита Потапов 2024-05-29 14:53:23 +04:00
parent bcd851627e
commit f36d9c8d1d
5 changed files with 98 additions and 8 deletions

View File

@ -43,8 +43,6 @@ namespace PolyclinicDatabaseImplement.Models
FIO = model.FIO; FIO = model.FIO;
Email = model.Email; Email = model.Email;
Password = model.Password; Password = model.Password;
Role = model.Role;
FIO = model.FIO;
} }
public UserViewModel GetViewModel => new() public UserViewModel GetViewModel => new()

View File

@ -1,4 +1,5 @@
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens;
using PolyclinicContracts.BindingModels; using PolyclinicContracts.BindingModels;
using PolyclinicContracts.BusinessLogicsContracts; using PolyclinicContracts.BusinessLogicsContracts;
using PolyclinicContracts.SearchModels; using PolyclinicContracts.SearchModels;
@ -97,13 +98,54 @@ namespace PolyclinicWebAppImplementer.Controllers
[HttpGet] [HttpGet]
[HttpPost] [HttpPost]
public IActionResult Privacy() public IActionResult Privacy(UserPrivacyModel model)
{ {
if (LoginManager.LogginedUser == null) var currentUser = LoginManager.LogginedUser;
if (currentUser == null)
{ {
return RedirectToAction("Login"); return RedirectToAction("Login");
} }
return View(); if (HttpContext.Request.Method == "POST")
{
var errors = new List<string>();
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);
}
} }
} }
} }

View File

@ -1,10 +1,16 @@
namespace PolyclinicWebAppImplementer.Models using System.ComponentModel;
namespace PolyclinicWebAppImplementer.Models
{ {
public class RegisterModel public class RegisterModel
{ {
[DisplayName("ФИО")]
public string FIO { get; set; } = string.Empty; public string FIO { get; set; } = string.Empty;
[DisplayName("Email")]
public string Email { get; set; } = string.Empty; public string Email { get; set; } = string.Empty;
[DisplayName("Пароль")]
public string Password { get; set; } = string.Empty; public string Password { get; set; } = string.Empty;
[DisplayName("Повторите пароль")]
public string ConfirmPassword { get; set; } = string.Empty; public string ConfirmPassword { get; set; } = string.Empty;
public List<string> Errors { get; set; } = new(); public List<string> Errors { get; set; } = new();
} }

View File

@ -0,0 +1,12 @@
using PolyclinicDataModels.Enums;
using System.ComponentModel;
namespace PolyclinicWebAppImplementer.Models
{
public class UserPrivacyModel : RegisterModel
{
public int Id { get; set; }
[DisplayName("Роль")]
public UserRole Role { get; set; }
}
}

View File

@ -1,6 +1,38 @@
@{ @model UserPrivacyModel
@{
ViewBag.SelectedSiteMenuItem = SiteMenuItems.Privacy; ViewBag.SelectedSiteMenuItem = SiteMenuItems.Privacy;
} }
<h4>Личный кабинет</h4> <h4>Личный кабинет</h4>
@foreach (var item in Model.Errors)
{
<div class="alert alert-danger" role="alert">
@item
</div>
}
<form method="post">
<input hidden readonly asp-for="Id"/>
<div class="mb-3">
<label asp-for="FIO"></label>
<input required asp-for="FIO" />
</div>
<div class="mb-3">
<label asp-for="Email"></label>
<input required asp-for="Email" />
</div>
<div class="mb-3">
<label asp-for="Role"></label>
<input readonly asp-for="Role" />
</div>
<div class="mb-3">
<label asp-for="Password"></label>
<input type="password" asp-for="Password" />
</div>
<div class="mb-3">
<label asp-for="ConfirmPassword"></label>
<input type="password" asp-for="ConfirmPassword" />
</div>
<button class="btn btn-secondary" type="submit">
Применить
</button>
</form>
<p>Здесь будут данные пользователя</p>