From a82bf9a28764316533947c2473aac444ccf9d815 Mon Sep 17 00:00:00 2001 From: Loretta Date: Wed, 21 Aug 2024 18:28:22 +0200 Subject: [PATCH] implement SiteViewModel; improvements, fixes, etc... --- TIAM.Database/DataLayers/Admins/AdminDal.cs | 21 ++++++-- TIAM.Database/DataLayers/Users/UserDal.cs | 7 +++ .../DriverManageTransfersPageModel.cs | 27 +++++++--- TIAM.Models/SiteViewModel.cs | 51 +++++++++++++++++++ TIAM.Services/SignalRTags.cs | 6 ++- .../Services/UserDataServiceMobile.cs | 49 ++++++++++-------- TIAMSharedUI/Pages/AppLaunchComponent.razor | 23 +++++++++ TIAMSharedUI/Pages/Login.razor.cs | 20 ++++++-- .../User/Drivers/DriverManageTransfers.razor | 19 ++++--- .../MessageDetailGridComponent.razor | 2 +- .../Shared/Components/Navbar.razor.cs | 4 ++ TIAMWebApp/Client/Program.cs | 3 +- .../Client/Services/UserDataServiceWeb.cs | 49 ++++++++++-------- .../Controllers/TransferDataAPIController.cs | 11 ++++ .../Server/Controllers/UserAPIController.cs | 1 + 15 files changed, 221 insertions(+), 72 deletions(-) create mode 100644 TIAM.Models/SiteViewModel.cs diff --git a/TIAM.Database/DataLayers/Admins/AdminDal.cs b/TIAM.Database/DataLayers/Admins/AdminDal.cs index 12bedea4..b0fce43f 100644 --- a/TIAM.Database/DataLayers/Admins/AdminDal.cs +++ b/TIAM.Database/DataLayers/Admins/AdminDal.cs @@ -31,6 +31,7 @@ using DevExpress.Data.Linq.Helpers; using TIAM.Database.DbSets.Drivers; using AyCode.Entities.Server.LogItems; using AyCode.Interfaces.Entities; +using TIAM.Models; using TIAM.Models.Dtos.Users; using TIAM.Models.PageViewModels; @@ -42,6 +43,13 @@ namespace TIAM.Database.DataLayers.Admins { } + //TODO: ezt meg a Messages-eket átbuherálni a UserDal-ra... - J. + public async Task GetSiteViewModelByUserId(Guid userId) + { + var messages = await GetEmailMessagesByUserId(userId, true); + return new SiteViewModel(messages); + } + #region Car public Task> GetAllCarsAsync() => SessionAsync(ctx => ctx.Cars.OrderBy(x => x.Manufacture).ThenBy(x => x.CarModel).ToList()); public Task> GetAllCarsbyProductIdAsync(Guid productId) => SessionAsync(ctx => ctx.Cars.Where(x => x.UserProductMapping.ProductId == productId).OrderBy(x => x.Manufacture).ThenBy(x => x.CarModel).ToList()); @@ -69,9 +77,9 @@ namespace TIAM.Database.DataLayers.Admins public Task GetDriverManageTransfersPageModelByDriverId(Guid driverId) => SessionAsync(ctx => { var transfers = ctx.GetTransfersByUserProductMappingId(driverId).OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId); - var unreadedMessagesCount = GetTransfersMessagesByDriverIdInnerAsync(ctx, driverId)?.Count(x => !x.IsReaded) ?? 0; + var unreadMessagesCount = GetTransfersMessagesByDriverIdInnerAsync(ctx, driverId)?.Count(x => !x.IsReaded) ?? 0; - return new DriverManageTransfersPageModel(transfers, unreadedMessagesCount); + return new DriverManageTransfersPageModel(transfers, unreadMessagesCount); }); public Task> GetTransfersAsync() => SessionAsync(ctx => ctx.GetTransfers().OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToList()); @@ -336,8 +344,11 @@ namespace TIAM.Database.DataLayers.Admins public Task> GetEmailMessagesAsync(Guid contextId, Guid userId, Guid userProductMappingId) => SessionAsync(ctx => ctx.GetEmailMessages(contextId, userId, userProductMappingId).OrderByDescending(x => x.Created).ToList()); public Task> GetAllEmailMessagesAsync() => SessionAsync(ctx => ctx.GetAllEmailMessages().OrderByDescending(x => x.Created).ToList()); - public Task> GetEmailMessagesByUserId(Guid userId) - => SessionAsync(ctx => ctx.GetEmailMessagesByIds(ctx.GetUserProductMappingsByUserId(userId).Select(x => x.Id).Concat([userId])).ToList()); + public Task> GetEmailMessagesByUserId(Guid userId, bool onlyUnread = false) + => SessionAsync(ctx => ctx + .GetEmailMessagesByIds(ctx.GetUserProductMappingsByUserId(userId).Select(x => x.Id).Concat([userId])) + .Where(x => !onlyUnread || !x.IsReaded) + .ToList()); /// /// @@ -352,7 +363,7 @@ namespace TIAM.Database.DataLayers.Admins /// /// UserProductMappingId /// - public Task GetTransfersMessagesUnreadedCountByDriverIdAsync(Guid driverId) + public Task GetTransfersMessagesUnreadCountByDriverIdAsync(Guid driverId) => SessionAsync(ctx => GetTransfersMessagesByDriverIdInnerAsync(ctx, driverId)?.Count(x => !x.IsReaded) ?? 0); /// diff --git a/TIAM.Database/DataLayers/Users/UserDal.cs b/TIAM.Database/DataLayers/Users/UserDal.cs index e36a4cc4..63c3373a 100644 --- a/TIAM.Database/DataLayers/Users/UserDal.cs +++ b/TIAM.Database/DataLayers/Users/UserDal.cs @@ -1,4 +1,5 @@ using AyCode.Database.DataLayers.Users; +using AyCode.Database.DbSets.Messages; using AyCode.Database.DbSets.Users; using Microsoft.EntityFrameworkCore; using TIAM.Database.DbContexts.Users; @@ -7,6 +8,7 @@ using TIAM.Entities.Emails; using TIAM.Entities.Profiles; using TIAM.Entities.ServiceProviders; using TIAM.Entities.Users; +using TIAM.Models; using TIAM.Models.Dtos.Users; namespace TIAM.Database.DataLayers.Users @@ -22,6 +24,11 @@ namespace TIAM.Database.DataLayers.Users { } + //public Task GetSiteViewModelByUserId(Guid userId) => SessionAsync(ctx => + //{ + // ctx.GetEmailMessagesByUserIdOrUpmId(userId, + //})); + public Task> GetUserModelDtoEmailsAsync() => SessionAsync(ctx => ctx.Users.Select(x => new UserModelDtoEmail(x)).ToList()); public override Task UpdateUserAsync(User user) => base.UpdateSafeAsync(user); diff --git a/TIAM.Models/PageViewModels/DriverManageTransfersPageModel.cs b/TIAM.Models/PageViewModels/DriverManageTransfersPageModel.cs index b7b64a5d..d091c2f8 100644 --- a/TIAM.Models/PageViewModels/DriverManageTransfersPageModel.cs +++ b/TIAM.Models/PageViewModels/DriverManageTransfersPageModel.cs @@ -1,5 +1,6 @@ using AyCode.Blazor.Models.ViewModels; using Newtonsoft.Json; +using System.Security.Cryptography.Xml; using TIAM.Core.Enums; using TIAM.Entities.Transfers; @@ -10,7 +11,7 @@ public class DriverManageTransfersPageModel : AcPageViewModelBase private readonly object _forLock = new(); private const int AppointmentWaitingHours = 3; - public int UnreadedMessagesCount { get; set; } + public int UnreadMessagesCount { get; set; } public List Transfers { get; set; } = []; private readonly List _upcomings = []; @@ -65,29 +66,39 @@ public class DriverManageTransfersPageModel : AcPageViewModelBase { } - public DriverManageTransfersPageModel(IEnumerable transfers, int unreadedMessagesCount) + public DriverManageTransfersPageModel(IEnumerable transfers, int unreadMessagesCount) { - Initialize(transfers, unreadedMessagesCount); + Initialize(transfers, unreadMessagesCount); } public void Initialize(DriverManageTransfersPageModel? driverManageTransfersPageModel) { if (driverManageTransfersPageModel == null) return; - Initialize(driverManageTransfersPageModel.Transfers, driverManageTransfersPageModel.UnreadedMessagesCount); + Initialize(driverManageTransfersPageModel.Transfers, driverManageTransfersPageModel.UnreadMessagesCount); } - public void Initialize(IEnumerable transfers, int unreadedMessagesCount) + public void Initialize(IEnumerable transfers, int unreadMessagesCount) + { + lock (_forLock) + { + ClearAll(); + + Transfers.AddRange(transfers.Where(t => t.TransferStatusType != TransferStatusType.UserCanceled && t.TransferStatusType != TransferStatusType.AdminDenied)); + } + + UnreadMessagesCount = unreadMessagesCount; + } + + public void ClearAll() { lock (_forLock) { Transfers.Clear(); - Transfers.AddRange(transfers.Where(t => t.TransferStatusType != TransferStatusType.UserCanceled && t.TransferStatusType != TransferStatusType.AdminDenied)); - Upcomings.Clear(); Problems.Clear(); } - UnreadedMessagesCount = unreadedMessagesCount; + UnreadMessagesCount = 0; } } diff --git a/TIAM.Models/SiteViewModel.cs b/TIAM.Models/SiteViewModel.cs new file mode 100644 index 00000000..2efe41e0 --- /dev/null +++ b/TIAM.Models/SiteViewModel.cs @@ -0,0 +1,51 @@ +using AyCode.Blazor.Models.ViewModels; +using TIAM.Entities.Emails; +using TIAM.Models.PageViewModels; + +namespace TIAM.Models; + +public class SiteViewModel : AcSiteViewModel +{ + private readonly object _forLock = new object(); + + public List UnreadMessages { get; } = []; + + public DriverManageTransfersPageModel DriverManageTransfersPageModel { get; } = new(); + + public SiteViewModel() + {} + + public SiteViewModel(IEnumerable unreadMessages) + { + Initialize(unreadMessages); + } + + public void Initialize(SiteViewModel siteViewModel) + { + lock (_forLock) + { + //A PageViewModel-eket itt nem Initialize-oljuk, azok majd lefutnak miokor használjuk őket! - J. + + Initialize(siteViewModel.UnreadMessages); + } + } + + public void Initialize(IEnumerable unreadMessages) + { + lock (_forLock) + { + UnreadMessages.Clear(); + UnreadMessages.AddRange(unreadMessages); + } + } + + public void ClearAll() + { + lock (_forLock) + { + UnreadMessages.Clear(); + + DriverManageTransfersPageModel.ClearAll(); + } + } +} \ No newline at end of file diff --git a/TIAM.Services/SignalRTags.cs b/TIAM.Services/SignalRTags.cs index 6bac8829..1e540bd6 100644 --- a/TIAM.Services/SignalRTags.cs +++ b/TIAM.Services/SignalRTags.cs @@ -5,6 +5,8 @@ namespace TIAM.Services; public class SignalRTags : AcSignalRTags { + public const int GetSiteViewModelByUserId = 999; + public const int GetTransfer = 1; public const int GetTransfers = 2; public const int GetTransfersByUserId = 3; @@ -13,8 +15,7 @@ public class SignalRTags : AcSignalRTags public const int GetTransfersByCompanyId = 6; public const int GetTransfersByUserProductMappingId = 701; public const int GetTransfersByOrderingProductId = 702; - public const int GetDriverManageTransfersPageModelByDriverId = 703; - + public const int GetTransfersByFilterText = 301; public const int UpdateTransfer = 7; @@ -38,6 +39,7 @@ public class SignalRTags : AcSignalRTags public const int AddTransferToDriver = 26; public const int UpdateTransferToDriver = 27; public const int RemoveTransferToDriver = 28; + public const int GetDriverManageTransfersPageModelByDriverId = 803; public const int GetAddress = 29; diff --git a/TIAMMobileApp/Services/UserDataServiceMobile.cs b/TIAMMobileApp/Services/UserDataServiceMobile.cs index b4bc058e..60875624 100644 --- a/TIAMMobileApp/Services/UserDataServiceMobile.cs +++ b/TIAMMobileApp/Services/UserDataServiceMobile.cs @@ -6,6 +6,7 @@ using AyCode.Services.Loggers; using Newtonsoft.Json; using TIAM.Core.Loggers; using TIAM.Entities.Users; +using TIAM.Models; using TIAM.Models.Dtos.Users; using TIAMWebApp.Shared.Application.Interfaces; using TIAMWebApp.Shared.Application.Models; @@ -18,19 +19,21 @@ namespace TIAMMobileApp.Services { public class UserDataServiceMobile : IUserDataService { - private readonly HttpClient http; - private readonly ISecureStorageHandler secureStorageHandler; - private readonly IServiceProviderDataService serviceProviderDataService; + private readonly HttpClient _http; + private readonly SiteViewModel _siteViewModel; + private readonly ISecureStorageHandler _secureStorageHandler; + private readonly IServiceProviderDataService _serviceProviderDataService; private readonly LoggerClient _logger; - public UserDataServiceMobile(HttpClient http, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) + public UserDataServiceMobile(HttpClient http, SiteViewModel siteViewModel, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) { - this.http = http; - this.secureStorageHandler = secureStorageHandler; + _http = http; + _secureStorageHandler = secureStorageHandler; + _siteViewModel = siteViewModel; //this._browserConsoleLogWriter = new BrowserConsoleLogWriter(jsRuntime); - this.serviceProviderDataService = serviceProviderDataService; + _serviceProviderDataService = serviceProviderDataService; _logger = new LoggerClient(logWriters.ToArray()); //_logger = new TIAM.Core.Loggers.Logger(AppType.Web, LogLevel.Info, logWriters.ToArray()); //_logger = new TIAM.Core.Loggers.Logger(AppType.Web, LogLevel.Info, logWriter); @@ -75,7 +78,7 @@ namespace TIAMMobileApp.Services var url = $"{Setting.ApiBaseUrl}/{APIUrls.UserTest}"; - var response = await http.PostAsJsonAsync(url, Param); + var response = await _http.PostAsJsonAsync(url, Param); var result = await response.Content.ReadAsStringAsync(); return result; } @@ -85,7 +88,7 @@ namespace TIAMMobileApp.Services string result = string.Empty; var url = $"{Setting.ApiBaseUrl}/{APIUrls.AuthenticateUser}"; - var response = await http.PostAsJsonAsync(url, loginModel); + var response = await _http.PostAsJsonAsync(url, loginModel); //try //{ @@ -117,7 +120,7 @@ namespace TIAMMobileApp.Services string result = string.Empty; var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateUser}"; _logger.Info("CreateUser url: " + url); - var response = await http.PostAsJsonAsync(url, regModel); + var response = await _http.PostAsJsonAsync(url, regModel); result = await response.Content.ReadAsStringAsync(); /*if (response.IsSuccessStatusCode) { @@ -142,7 +145,7 @@ namespace TIAMMobileApp.Services UserModelDto? user = new UserModelDto(); var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateGuestUser}"; _logger.Info("CreateGuestUser url: " + url); - var response = await http.PostAsJsonAsync(url, regModel); + var response = await _http.PostAsJsonAsync(url, regModel); if (response.IsSuccessStatusCode) @@ -165,7 +168,7 @@ namespace TIAMMobileApp.Services public async Task?> GetUsersAsync() { - return await http.GetFromJsonAsync>(APIUrls.GetUsers); + return await _http.GetFromJsonAsync>(APIUrls.GetUsers); } public async Task?> GetUsersWithDetailsAsync() @@ -174,7 +177,7 @@ namespace TIAMMobileApp.Services var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUsersWithDetails}"; _logger.Info("GetUserByEmailAsync url: " + url + "!"); - var response = await http.GetFromJsonAsync>(APIUrls.GetUsersWithDetails); + var response = await _http.GetFromJsonAsync>(APIUrls.GetUsersWithDetails); //var result = await response.Content.ReadAsStringAsync(); //var user = JsonConvert.DeserializeObject(result); return response; @@ -189,7 +192,7 @@ namespace TIAMMobileApp.Services { var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserByEmail}/{email}"; _logger.Info("GetUserByEmailAsync url: " + url + ", " + email); - var response = await http.GetAsync(url); + var response = await _http.GetAsync(url); response.EnsureSuccessStatusCode(); if (response.Content != null) @@ -230,7 +233,7 @@ namespace TIAMMobileApp.Services var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserById}"; _logger.Info("GetUserByIdAsync url: " + url + ", " + id.ToString()); - var response = await http.PostAsJsonAsync(url, id); + var response = await _http.PostAsJsonAsync(url, id); var result = await response.Content.ReadAsStringAsync(); var user = JsonConvert.DeserializeObject(result); @@ -244,7 +247,7 @@ namespace TIAMMobileApp.Services var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserDetailById}"; _logger.Info("GetUserDetailByIdAsync url: " + url + ", " + id.ToString()); - var response = await http.PostAsJsonAsync(url, id); + var response = await _http.PostAsJsonAsync(url, id); var result = await response.Content.ReadAsStringAsync(); var user = JsonConvert.DeserializeObject(result); @@ -268,7 +271,7 @@ namespace TIAMMobileApp.Services try { _logger.Info("Refreshtoken url: " + url); - var response = await http.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json")); + var response = await _http.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json")); if (response.IsSuccessStatusCode) { string contentStr = await response.Content.ReadAsStringAsync(); @@ -280,7 +283,7 @@ namespace TIAMMobileApp.Services Setting.UserBasicDetails.RefreshToken = tokenDetails.RefreshToken; string userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails); - await secureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr); + await _secureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr); isTokenRefreshed = true; } } @@ -299,9 +302,11 @@ namespace TIAMMobileApp.Services { _logger.Info("Logout() called"); + _siteViewModel.ClearAll(); + var url = $"{Setting.ApiBaseUrl}/{APIUrls.LogoutUser}"; bool result = false; - var response = await http.PostAsJsonAsync(url, RefreshToken); + var response = await _http.PostAsJsonAsync(url, RefreshToken); if (response.IsSuccessStatusCode) { string resultMessage = await response.Content.ReadAsStringAsync(); @@ -329,7 +334,7 @@ namespace TIAMMobileApp.Services _logger.Info("SendForgottenPasswordMail() called"); var url = $"{Setting.ApiBaseUrl}/{APIUrls.SendForgottenPasswordMail}"; - var response = await http.PostAsJsonAsync(url, emailAddress); + var response = await _http.PostAsJsonAsync(url, emailAddress); var success = await response.Content.ReadFromJsonAsync(); _logger.Detail($"SendForgottenPasswordMail(): {success.ToString()}"); @@ -344,7 +349,7 @@ namespace TIAMMobileApp.Services var url = $"{Setting.ApiBaseUrl}/{APIUrls.ValidateForgottenPasswordToken}"; var parameters = new[] { userId.ToString(), token }; - var response = await http.PostAsJsonAsync(url, parameters); + var response = await _http.PostAsJsonAsync(url, parameters); result = await response.Content.ReadAsStringAsync(); _logger.Detail($"ValidateForgotPasswordToken(): {result}"); @@ -359,7 +364,7 @@ namespace TIAMMobileApp.Services var url = $"{Setting.ApiBaseUrl}/{APIUrls.SetEmailConfirmed}"; - var response = await http.PostAsJsonAsync(url, userId); + var response = await _http.PostAsJsonAsync(url, userId); result = await response.Content.ReadFromJsonAsync(); _logger.Detail($"ValidateForgotPasswordToken(): {result.ToString()}"); diff --git a/TIAMSharedUI/Pages/AppLaunchComponent.razor b/TIAMSharedUI/Pages/AppLaunchComponent.razor index d42c0aac..a599a681 100644 --- a/TIAMSharedUI/Pages/AppLaunchComponent.razor +++ b/TIAMSharedUI/Pages/AppLaunchComponent.razor @@ -11,9 +11,13 @@ @using AyCode.Interfaces.StorageHandlers; @using System.Globalization; @using AyCode.Core.Enums +@using AyCode.Core.Helpers @using AyCode.Core.Loggers @using AyCode.Services.Loggers @using TIAM.Core.Loggers +@using TIAM.Models +@using TIAM.Services +@using TIAMWebApp.Shared.Application.Services @inject NavigationManager NavManager @inject IJSRuntime JSRuntime @inject IEnumerable LogWriters @@ -24,6 +28,8 @@ @inject HttpClient http; @inject IComponentUpdateService ComponentUpdateService @inject AuthenticationStateProvider AuthStateProvider +@inject AdminSignalRClient _adminSignalRClient; +@inject SiteViewModel _siteViewModel; @{ if (string.IsNullOrWhiteSpace(TrackingId)) @@ -81,6 +87,7 @@ if(userBasicDetail!= null) Setting.UserBasicDetails = userBasicDetail; + var isSuccess = false; if (jsontoken?.ValidTo < DateTime.UtcNow) { _logger.Info("Token needs to be refreshed"); @@ -91,6 +98,8 @@ await AuthStateProvider.GetAuthenticationStateAsync(); _logger.Info("Token refreshed"); + isSuccess = true; + } else { @@ -105,11 +114,25 @@ { _logger.Info("Valid token found"); await AuthStateProvider.GetAuthenticationStateAsync(); + + isSuccess = true; } string _userId = jsontoken.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.NameId).Value; string _email = jsontoken.Claims.First(claim => claim.Type == JwtRegisteredClaimNames.Email).Value; var user = await UserDataService.IsLoggedInAsync(Guid.Parse(_userId)); + + if (isSuccess) + { + _adminSignalRClient.GetByIdAsync(SignalRTags.GetSiteViewModelByUserId, signalResponseMessage => + { + _siteViewModel.Initialize(signalResponseMessage.ResponseData!); + _logger.Debug($"UnreadMessages: {_siteViewModel.UnreadMessages.Count}"); + + return Task.CompletedTask; + }, user.UserId).Forget(); + } + await SaveToSessionInfo(user); _logger.Info($"Saved user in db is: {user.DisplayName}, setting autenthicated state"); diff --git a/TIAMSharedUI/Pages/Login.razor.cs b/TIAMSharedUI/Pages/Login.razor.cs index 54d56f85..6515959e 100644 --- a/TIAMSharedUI/Pages/Login.razor.cs +++ b/TIAMSharedUI/Pages/Login.razor.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Components; using System.IdentityModel.Tokens.Jwt; using System.Text.Json; +using AyCode.Core.Helpers; using TIAMWebApp.Shared.Application.Models.ClientSide; using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Interfaces; @@ -12,6 +13,8 @@ using AyCode.Services.Loggers; using Microsoft.AspNetCore.Components.Authorization; using TIAM.Core.Consts; using TIAM.Entities.Users; +using TIAM.Models; +using TIAM.Services; using TIAMWebApp.Shared.Application.Services; using TIAMSharedUI.Shared.Components.BaseComponents; @@ -19,7 +22,9 @@ namespace TIAMSharedUI.Pages { public partial class Login : BasePageComponent { - + [Inject] private AdminSignalRClient _adminSignalRClient { get; set; } + [Inject] private SiteViewModel _siteViewModel { get; set; } + [Inject] public NavigationManager navManager { get; set; } [Inject] @@ -115,8 +120,17 @@ namespace TIAMSharedUI.Pages //display success message via jsinterop BrowserConsoleLogWriter.Info("Successful login"); var user = await userDataService.IsLoggedInAsync(myId); - SaveToSessionInfo(user); - user.UserType = UserType.Admin; + + _adminSignalRClient.GetByIdAsync(SignalRTags.GetSiteViewModelByUserId, signalResponseMessage => + { + _siteViewModel.Initialize(signalResponseMessage.ResponseData!); + BrowserConsoleLogWriter.Debug($"UnreadMessages: {_siteViewModel.UnreadMessages.Count}"); + + return Task.CompletedTask; + }, user.UserId).Forget(); + + SaveToSessionInfo(user).Forget(); + navManager.NavigateTo("/"); } diff --git a/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor b/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor index fe2eae62..4253cc19 100644 --- a/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor +++ b/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor @@ -25,6 +25,7 @@ @using AyCode.Services.SignalRs @using DevExpress.Data.Filtering @using TIAM.Entities.Emails +@using TIAM.Models @using TIAM.Models.PageViewModels @using TIAMSharedUI.Shared.Components.BaseComponents @inherits UserBasePageComponent @@ -34,7 +35,7 @@ @inject IWizardProcessor wizardProcessor @inject ITransferDataService transferDataService @inject ISessionService sessionService -@inject DriverManageTransfersPageModel PageModel; +@inject SiteViewModel SiteViewModel; @inject AdminSignalRClient AdminSignalRClient; Transfers @@ -75,12 +76,12 @@
- + - @foreach (var transfer in PageModel.Upcomings) + @foreach (var transfer in _pageModel.Upcomings) { @@ -100,18 +101,18 @@ - +
- + - @foreach (var transfer in PageModel.Problems) + @foreach (var transfer in _pageModel.Problems) { @@ -214,6 +215,7 @@ DateTime StartDate { get; set; } = DateTime.Today; DxSchedulerDataStorage _dataStorage = new(); + private DriverManageTransfersPageModel _pageModel; public List IgnoreList = [ @@ -404,6 +406,7 @@ protected override async Task OnInitializedAsync() { _logger = new LoggerClient(LogWriters.ToArray()); + _pageModel = SiteViewModel.DriverManageTransfersPageModel; InitializePageAsync(DriverId).Forget(); @@ -418,9 +421,9 @@ { _logger.Error("response.Status == SignalResponseStatus.Error || response.ResponseData == null"); } - else PageModel.Initialize(response.ResponseData); + else _pageModel.Initialize(response.ResponseData); - InitializeAppointments(PageModel.Transfers); + InitializeAppointments(_pageModel.Transfers); StateHasChanged(); return Task.CompletedTask; diff --git a/TIAMSharedUI/Pages/User/SysAdmins/MessageDetailGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/MessageDetailGridComponent.razor index 58bac543..be082d44 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/MessageDetailGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/MessageDetailGridComponent.razor @@ -125,7 +125,7 @@ @System.Text.RegularExpressions.Regex.Replace((displayTextContext.Value as string)!, "<(.|\n)*?>", string.Empty) - + diff --git a/TIAMSharedUI/Shared/Components/Navbar.razor.cs b/TIAMSharedUI/Shared/Components/Navbar.razor.cs index 69f0fba8..a87d4831 100644 --- a/TIAMSharedUI/Shared/Components/Navbar.razor.cs +++ b/TIAMSharedUI/Shared/Components/Navbar.razor.cs @@ -21,6 +21,7 @@ using Microsoft.JSInterop; using Microsoft.EntityFrameworkCore.Metadata.Internal; using Microsoft.AspNetCore.Components.Routing; using AyCode.Blazor.Components.Services; +using TIAM.Models; namespace TIAMSharedUI.Shared.Components @@ -51,6 +52,7 @@ namespace TIAMSharedUI.Shared.Components private IJSRuntime JsRuntime { get; set; } [Inject] AuthenticationStateProvider AuthStateProvider { get; set; } + [Inject] SiteViewModel SiteViewModel { get; set; } private bool enableLogin = true; private bool enableEvents = false; @@ -96,6 +98,8 @@ namespace TIAMSharedUI.Shared.Components private async Task SignOut() { + //SiteViewModel.ClearAll(); + bool serverResult; string userDetailsStr = await SecureStorageHandler.GetFromSecureStorageAsync(nameof(Setting.UserBasicDetails)); if (!string.IsNullOrEmpty(userDetailsStr)) diff --git a/TIAMWebApp/Client/Program.cs b/TIAMWebApp/Client/Program.cs index 2b38c699..b22fa4ba 100644 --- a/TIAMWebApp/Client/Program.cs +++ b/TIAMWebApp/Client/Program.cs @@ -13,6 +13,7 @@ using TIAMWebApp.Shared.Application.Utility; using AyCode.Services.Loggers; using System.Net; using Microsoft.AspNetCore.Components.Authorization; +using TIAM.Models; using TIAM.Models.PageViewModels; @@ -30,7 +31,7 @@ builder.Services.AddScoped(); builder.Services.AddBlazoredLocalStorage(); builder.Services.AddSingleton(); -builder.Services.AddSingleton(); +builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddScoped(); diff --git a/TIAMWebApp/Client/Services/UserDataServiceWeb.cs b/TIAMWebApp/Client/Services/UserDataServiceWeb.cs index b9ab9e96..a263f9db 100644 --- a/TIAMWebApp/Client/Services/UserDataServiceWeb.cs +++ b/TIAMWebApp/Client/Services/UserDataServiceWeb.cs @@ -12,28 +12,31 @@ using AyCode.Services.Loggers; using System.Net.Http; using AyCode.Core.Extensions; using System.Text.Json; +using TIAM.Models; namespace TIAMWebApp.Client.Services { public class UserDataServiceWeb : IUserDataService { - private readonly HttpClient http; - private readonly ISecureStorageHandler secureStorageHandler; + private readonly HttpClient _http; + private readonly SiteViewModel _siteViewModel; + private readonly ISecureStorageHandler _secureStorageHandler; //private readonly BrowserConsoleLogWriter _browserConsoleLogWriter; - private readonly IServiceProviderDataService serviceProviderDataService; + private readonly IServiceProviderDataService _serviceProviderDataService; private readonly LoggerClient _logger; - public UserDataServiceWeb(HttpClient http, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) + public UserDataServiceWeb(HttpClient http, SiteViewModel siteViewModel, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService, IEnumerable logWriters) //public UserDataServiceWeb(HttpClient http, ISecureStorageHandler secureStorageHandler, IJSRuntime jSRuntime, IServiceProviderDataService serviceProviderDataService, HttpClientLogItemWriter logWriter) { - this.http = http; - this.secureStorageHandler = secureStorageHandler; + _http = http; + _siteViewModel = siteViewModel; + _secureStorageHandler = secureStorageHandler; //this._browserConsoleLogWriter = new BrowserConsoleLogWriter(jsRuntime); - this.serviceProviderDataService = serviceProviderDataService; + _serviceProviderDataService = serviceProviderDataService; _logger = new LoggerClient(logWriters.ToArray()); //_logger = new TIAM.Core.Loggers.Logger(AppType.Web, LogLevel.Info, logWriters.ToArray()); //_logger = new TIAM.Core.Loggers.Logger(AppType.Web, LogLevel.Info, logWriter); @@ -80,7 +83,7 @@ namespace TIAMWebApp.Client.Services var url = $"{Setting.ApiBaseUrl}/{APIUrls.UserTest}"; - var response = await http.PostAsJsonAsync(url, Param); + var response = await _http.PostAsJsonAsync(url, Param); var result = await response.Content.ReadAsStringAsync(); return result; } @@ -90,7 +93,7 @@ namespace TIAMWebApp.Client.Services string result = string.Empty; var url = $"{Setting.ApiBaseUrl}/{APIUrls.AuthenticateUser}"; - var response = await http.PostAsJsonAsync(url, loginModel); + var response = await _http.PostAsJsonAsync(url, loginModel); //try //{ @@ -122,7 +125,7 @@ namespace TIAMWebApp.Client.Services string result = string.Empty; var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateUser}"; _logger.Info("CreateUser url: " + url); - var response = await http.PostAsJsonAsync(url, regModel); + var response = await _http.PostAsJsonAsync(url, regModel); result = await response.Content.ReadAsStringAsync(); /*if (response.IsSuccessStatusCode) { @@ -147,7 +150,7 @@ namespace TIAMWebApp.Client.Services UserModelDto? user = new UserModelDto(); var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateGuestUser}"; _logger.Info("CreateGuestUser url: " + url); - var response = await http.PostAsJsonAsync(url, regModel); + var response = await _http.PostAsJsonAsync(url, regModel); if (response.IsSuccessStatusCode) @@ -171,7 +174,7 @@ namespace TIAMWebApp.Client.Services public async Task?> GetUsersAsync() { - return await http.GetFromJsonAsync>(APIUrls.GetUsers); + return await _http.GetFromJsonAsync>(APIUrls.GetUsers); } public async Task> GetUsersWithDetailsAsync() @@ -179,7 +182,7 @@ namespace TIAMWebApp.Client.Services var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUsersWithDetails}"; _logger.Info("GetUserByEmailAsync url: " + url + "!"); - var response = await http.GetFromJsonAsync>(APIUrls.GetUsersWithDetails); + var response = await _http.GetFromJsonAsync>(APIUrls.GetUsersWithDetails); //var result = await response.Content.ReadAsStringAsync(); //var user = JsonConvert.DeserializeObject(result); return response ?? []; @@ -194,7 +197,7 @@ namespace TIAMWebApp.Client.Services { var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserByEmail}/{email}"; _logger.Info("GetUserByEmailAsync url: " + url + ", " + email); - var response = await http.GetAsync(url); + var response = await _http.GetAsync(url); response.EnsureSuccessStatusCode(); if (response.Content != null) @@ -235,7 +238,7 @@ namespace TIAMWebApp.Client.Services var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserById}"; _logger.Info("GetUserByIdAsync url: " + url + ", " + id.ToString()); - var response = await http.PostAsJsonAsync(url, id); + var response = await _http.PostAsJsonAsync(url, id); var result = await response.Content.ReadAsStringAsync(); var user = JsonConvert.DeserializeObject(result); @@ -249,7 +252,7 @@ namespace TIAMWebApp.Client.Services var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserDetailById}"; _logger.Info("GetUserDetailByIdAsync url: " + url + ", " + id.ToString()); - var response = await http.PostAsJsonAsync(url, id); + var response = await _http.PostAsJsonAsync(url, id); //var result = await response.Content.ReadAsStringAsync(); var result = await response.Content.ReadFromJsonAsync(); //var user = JsonConvert.DeserializeObject(result); @@ -274,7 +277,7 @@ namespace TIAMWebApp.Client.Services try { _logger.Info("Refreshtoken url: " + url); - var response = await http.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json")); + var response = await _http.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json")); if (response.IsSuccessStatusCode) { string contentStr = await response.Content.ReadAsStringAsync(); @@ -286,7 +289,7 @@ namespace TIAMWebApp.Client.Services Setting.UserBasicDetails.RefreshToken = tokenDetails.RefreshToken; string userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails); - await secureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr); + await _secureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr); isTokenRefreshed = true; } } @@ -306,9 +309,11 @@ namespace TIAMWebApp.Client.Services { _logger.Info("Logout() called"); + _siteViewModel.ClearAll(); + var url = $"{Setting.ApiBaseUrl}/{APIUrls.LogoutUser}"; bool result = false; - var response = await http.PostAsJsonAsync(url, refreshToken); + var response = await _http.PostAsJsonAsync(url, refreshToken); if (response.IsSuccessStatusCode) { string resultMessage = await response.Content.ReadAsStringAsync(); @@ -336,7 +341,7 @@ namespace TIAMWebApp.Client.Services _logger.Info("SendForgottenPasswordMail() called"); var url = $"{Setting.ApiBaseUrl}/{APIUrls.SendForgottenPasswordMail}"; - var response = await http.PostAsJsonAsync(url, emailAddress); + var response = await _http.PostAsJsonAsync(url, emailAddress); var success = await response.Content.ReadFromJsonAsync(); _logger.Detail($"SendForgottenPasswordMail(): {success.ToString()}"); @@ -351,7 +356,7 @@ namespace TIAMWebApp.Client.Services var url = $"{Setting.ApiBaseUrl}/{APIUrls.ValidateForgottenPasswordToken}"; var parameters = new[] { userId.ToString(), token }; - var response = await http.PostAsJsonAsync(url, parameters); + var response = await _http.PostAsJsonAsync(url, parameters); result = await response.Content.ReadAsStringAsync(); _logger.Detail($"ValidateForgotPasswordToken(): {result}"); @@ -366,7 +371,7 @@ namespace TIAMWebApp.Client.Services var url = $"{Setting.ApiBaseUrl}/{APIUrls.SetEmailConfirmed}"; - var response = await http.PostAsJsonAsync(url, userId); + var response = await _http.PostAsJsonAsync(url, userId); result = await response.Content.ReadFromJsonAsync(); _logger.Detail($"ValidateForgotPasswordToken(): {result.ToString()}"); diff --git a/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs b/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs index c4ccd50d..38a200e0 100644 --- a/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs +++ b/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs @@ -34,6 +34,8 @@ using TIAM.Entities.Products; using AyCode.Core.Enums; using TIAM.Core.Consts; using System.Security.Cryptography.Xml; +using TIAM.Models; +using TIAM.Models.Dtos.Users; using TIAM.Models.PageViewModels; namespace TIAMWebApp.Server.Controllers @@ -60,6 +62,15 @@ namespace TIAMWebApp.Server.Controllers _userApiController = userApiController; } + //TODO: ezt meg a Messages-eket átbuherálni a UserDal-ra... - J. + [NonAction] + [SignalR(SignalRTags.GetSiteViewModelByUserId)] + public async Task GetSiteViewModelByUserId(Guid userId) + { + _logger.Debug("$GetSiteViewModelByUserId called; userId: {userId}"); + + return await _adminDal.GetSiteViewModelByUserId(userId); + } [AllowAnonymous] diff --git a/TIAMWebApp/Server/Controllers/UserAPIController.cs b/TIAMWebApp/Server/Controllers/UserAPIController.cs index 69842b59..06c1d433 100644 --- a/TIAMWebApp/Server/Controllers/UserAPIController.cs +++ b/TIAMWebApp/Server/Controllers/UserAPIController.cs @@ -26,6 +26,7 @@ using TIAM.Services.Server.Logins; using TIAMWebApp.Server.Services; using AyCode.Core.Enums; using AyCode.Models.Enums; +using TIAM.Models; namespace TIAMWebApp.Server.Controllers {