From 41cc78d3211d874dc36dd90a112564b220531da3 Mon Sep 17 00:00:00 2001 From: LD-Reborn Date: Thu, 9 Oct 2025 10:36:12 +0200 Subject: [PATCH 1/2] Added Users table --- src/Controllers/HomeController.cs | 19 +++++++++-- src/Controllers/UsersController.cs | 21 +++++------- src/Models/UserModels.cs | 31 +++++++++++++++-- src/Models/UsersRequestModels.cs | 7 ++++ src/Models/UsersViewModel.cs | 6 ++++ src/Views/Home/Users.cshtml | 54 ++++++++++++++++-------------- 6 files changed, 96 insertions(+), 42 deletions(-) create mode 100644 src/Models/UsersViewModel.cs diff --git a/src/Controllers/HomeController.cs b/src/Controllers/HomeController.cs index 3f42871..1f2d816 100644 --- a/src/Controllers/HomeController.cs +++ b/src/Controllers/HomeController.cs @@ -60,10 +60,23 @@ public class HomeController : Controller } [HttpGet("Users")] - public ActionResult Users() + public async Task UsersAsync() { - return View(); - } + IEnumerable users = await _ldap.ListUsersAsync(); + List UserTableViewModels = []; + foreach (UserModel user in users) + { + UserTableViewModels.Add(new() + { + JpegPhoto = user.JpegPhoto ?? "", + Name = user.Cn ?? "", + Surname = user.Sn ?? "", + Title = user.Title ?? "", + Uid = user.Uid, + Workplace = user.Description?.Workplace ?? "" + }); + } + return View(new UsersIndexViewModel() { UserTableViewModels = UserTableViewModels }); } [HttpPost("Login")] public async Task Login(string username, string password) diff --git a/src/Controllers/UsersController.cs b/src/Controllers/UsersController.cs index 8630b08..512f966 100644 --- a/src/Controllers/UsersController.cs +++ b/src/Controllers/UsersController.cs @@ -45,20 +45,17 @@ public class UsersController : Controller } [HttpGet("Delete")] - public async Task Delete(string uid) + public async Task Delete(string uid) { - return await Task.Run(async () => + try { - try - { - await _ldap.DeleteUserAsync(uid); - return true; - } - catch (Exception) - { - return false; - } - }); + await _ldap.DeleteUserAsync(uid); + return new UsersDeleteRequestModel(true); + } + catch (Exception ex) + { + return new UsersDeleteRequestModel(false, ex.Message); + } } [HttpGet("Create")] diff --git a/src/Models/UserModels.cs b/src/Models/UserModels.cs index c16b520..4895d4b 100644 --- a/src/Models/UserModels.cs +++ b/src/Models/UserModels.cs @@ -1,3 +1,5 @@ +using System.Text.Json; + namespace Berufsschule_HAM.Models; public class UserModel @@ -5,7 +7,7 @@ public class UserModel public required string Uid { get; set; } public string? Cn { get; set; } public string? Sn { get; set; } - public string? Description { get; set; } + public UserDescription? Description { get; set; } public string? JpegPhoto { get; set; } public string? Title { get; set; } public string? UserPassword { get; set; } @@ -14,13 +16,28 @@ public class UserModel Uid = ldapData.GetValueOrDefault("uid") ?? throw new ArgumentException("UID is required"); Cn = ldapData.GetValueOrDefault("cn"); Sn = ldapData.GetValueOrDefault("sn"); - Description = ldapData.GetValueOrDefault("description"); + string? description = ldapData.GetValueOrDefault("description"); + Description = description != null ? JsonSerializer.Deserialize(description) : null; JpegPhoto = ldapData.GetValueOrDefault("jpegPhoto"); Title = ldapData.GetValueOrDefault("title"); UserPassword = ldapData.GetValueOrDefault("userPassword"); } } +public class UserDescription +{ + public required string BirthDate { get; set; } + public required UserAddress Address { get; set; } + public required string Workplace { get; set; } +} + +public class UserAddress +{ + public string? City { get; set; } + public string? Street { get; set; } + public string? StreetNr { get; set; } +} + public class UserAuthenticationResult { public required bool Success; @@ -33,4 +50,14 @@ public enum UserNotAuthenticatedReason InvalidCredentials, UserNotAuthorized, UserLockedOut +} + +public class UserTableViewModel +{ + public required string JpegPhoto { get; set; } + public required string Uid { get; set; } + public required string Title { get; set; } + public required string Name { get; set; } + public required string Surname { get; set; } + public required string Workplace { get; set; } } \ No newline at end of file diff --git a/src/Models/UsersRequestModels.cs b/src/Models/UsersRequestModels.cs index 22f26cc..7c2436d 100644 --- a/src/Models/UsersRequestModels.cs +++ b/src/Models/UsersRequestModels.cs @@ -21,4 +21,11 @@ public class UsersModifyRequestModel public string? Description { get; set; } = null; public string? JpegPhoto { get; set; } = null; public string? UserPassword { get; set; } = null; +} + +public class UsersDeleteRequestModel(bool successful, string exception = "None") +{ + public bool Success { get; set; } = successful; + + public string? Exception { get; set; } = exception; } \ No newline at end of file diff --git a/src/Models/UsersViewModel.cs b/src/Models/UsersViewModel.cs new file mode 100644 index 0000000..1729968 --- /dev/null +++ b/src/Models/UsersViewModel.cs @@ -0,0 +1,6 @@ +namespace Berufsschule_HAM.Models; + +public class UsersIndexViewModel +{ + public required IEnumerable UserTableViewModels { get; set; } +} \ No newline at end of file diff --git a/src/Views/Home/Users.cshtml b/src/Views/Home/Users.cshtml index 9a3eb8d..88aac0e 100644 --- a/src/Views/Home/Users.cshtml +++ b/src/Views/Home/Users.cshtml @@ -1,6 +1,6 @@ @using Microsoft.AspNetCore.Mvc.Localization @using Berufsschule_HAM.Models -@model HomeIndexViewModel +@model UsersIndexViewModel @inject IViewLocalizer T @{ ViewData["Title"] = T["Users"]; @@ -20,27 +20,31 @@ - - - - + + + + + + - @* @{ - foreach (AssetsTableViewModel assetsTableViewModel in Model.AssetsTableViewModels) + @{ + foreach (UserTableViewModel userTableViewModel in Model.UserTableViewModels) { - - - - + + + + + + } - } *@ + }
UserAsset IDAsset NameLocationUser PhotoUser IDtitleNameSurnameWorkplace Action
@assetsTableViewModel.UserUID@assetsTableViewModel.AssetCn@assetsTableViewModel.AssetName@assetsTableViewModel.LocationName@@userTableViewModel.JpegPhoto@userTableViewModel.Uid@userTableViewModel.Title@userTableViewModel.Name@userTableViewModel.Surname@userTableViewModel.Workplace
- +