From 84e1acaa863c1af576f80024c4366bd7f41e9699 Mon Sep 17 00:00:00 2001 From: Loretta Date: Sun, 7 Jul 2024 08:32:14 +0200 Subject: [PATCH] improvements, fixes, etc... --- TIAM.Database/DataLayers/Admins/AdminDal.cs | 2 + TIAM.Database/DataLayers/Users/UserDal.cs | 11 +- TIAM.Models/Dtos/Users/UserModelDtoDetail.cs | 10 +- TIAM.Services.Server/Logins/LoginService.cs | 4 +- .../TIAM.Services.Server.csproj | 4 + .../ITransferApiControllerClient.cs | 5 + .../ITransferApiControllerCommon.cs | 42 +++++ .../Interfaces/IUserApiControllerClient.cs | 5 + .../Interfaces/IUserApiControllerCommon.cs | 10 + TIAM.Services/SignalRTags.cs | 6 +- .../Pages/User/SysAdmins/ManageUsers.razor | 32 ++-- .../TransferToDriverGridComponent.razor | 33 +--- .../Client/Properties/launchSettings.json | 4 +- .../ServiceProviderAPIController.cs | 2 +- .../Controllers/TransferDataAPIController.cs | 31 ++- .../Server/Controllers/UserAPIController.cs | 172 ++++++++--------- .../Server/Services/DevAdminSignalRhub.cs | 17 +- .../Shared/Services/AdminSignalRClient.cs | 177 +++++++++++++++++- 18 files changed, 394 insertions(+), 173 deletions(-) create mode 100644 TIAM.Services/Interfaces/ITransferApiControllerClient.cs create mode 100644 TIAM.Services/Interfaces/ITransferApiControllerCommon.cs create mode 100644 TIAM.Services/Interfaces/IUserApiControllerClient.cs create mode 100644 TIAM.Services/Interfaces/IUserApiControllerCommon.cs diff --git a/TIAM.Database/DataLayers/Admins/AdminDal.cs b/TIAM.Database/DataLayers/Admins/AdminDal.cs index bf23ca36..fb2e878e 100644 --- a/TIAM.Database/DataLayers/Admins/AdminDal.cs +++ b/TIAM.Database/DataLayers/Admins/AdminDal.cs @@ -61,9 +61,11 @@ namespace TIAM.Database.DataLayers.Admins public Task> GetTransfersAsync() => SessionAsync(ctx => ctx.GetTransfers().OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToList()); public Task GetTransfersJsonAsync() => SessionAsync(ctx => ctx.GetTransfers().OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToJson()); + public Task> GetTransfersByUserIdAsync(Guid userId) => SessionAsync(ctx => ctx.GetTransfersByUserId(userId).OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToList()); public Task GetTransfersByUserIdJsonAsync(Guid userId) => SessionAsync(ctx => ctx.GetTransfersByUserId(userId).OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToJson()); public string GetTransfersJson() => Session(ctx => ctx.GetTransfers().OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToJson()); public Transfer? GetTransferById(Guid transferId) => Session(ctx => ctx.GetTransferById(transferId)); + public Task GetTransferByIdAsync(Guid transferId) => SessionAsync(ctx => ctx.GetTransferById(transferId)); public string? GetTransferJsonById(Guid transferId) => Session(ctx => ctx.GetTransferById(transferId)?.ToJson()); public Task AddTransferAsync(Transfer transfer) => TransactionAsync(ctx => ctx.AddTransfer(transfer)); diff --git a/TIAM.Database/DataLayers/Users/UserDal.cs b/TIAM.Database/DataLayers/Users/UserDal.cs index 0c7250da..e36a4cc4 100644 --- a/TIAM.Database/DataLayers/Users/UserDal.cs +++ b/TIAM.Database/DataLayers/Users/UserDal.cs @@ -25,17 +25,24 @@ namespace TIAM.Database.DataLayers.Users public Task> GetUserModelDtoEmailsAsync() => SessionAsync(ctx => ctx.Users.Select(x => new UserModelDtoEmail(x)).ToList()); public override Task UpdateUserAsync(User user) => base.UpdateSafeAsync(user); - public async Task UpdateUserModelDtoDetailAsync(UserModelDtoDetail userModelDtoDetail) { var user = GetUserById(userModelDtoDetail.UserDto.Id, false); if (user == null) return null; - userModelDtoDetail.CopyMainValuesToUser(user); + userModelDtoDetail.CopyUserDtoValuesToUser(user); return await UpdateUserAsync(user) == null ? null : await GetUserModelDtoByIdAsync(userModelDtoDetail.Id, false); } + public async Task AddUserModelDtoDetailAsync(UserModelDtoDetail userModelDtoDetail) + { + var user = new User(); + userModelDtoDetail.CopyUserDtoValuesToUser(user); + + return await AddUserAsync(user) ? await GetUserModelDtoByIdAsync(userModelDtoDetail.Id, false) : null; + } + public async Task CreateUserAsync(User user) { Context.Users.Add(user); diff --git a/TIAM.Models/Dtos/Users/UserModelDtoDetail.cs b/TIAM.Models/Dtos/Users/UserModelDtoDetail.cs index ec44b461..576fe90e 100644 --- a/TIAM.Models/Dtos/Users/UserModelDtoDetail.cs +++ b/TIAM.Models/Dtos/Users/UserModelDtoDetail.cs @@ -50,15 +50,7 @@ namespace TIAM.Models.Dtos.Users } } - public void CopyMainValuesToUser(User user) - { - user.AffiliateId = UserDto.AffiliateId; - - user.EmailAddress = UserDto.EmailAddress; - user.EmailConfirmed = UserDto.EmailConfirmed; - user.PhoneNumber = UserDto.PhoneNumber; - user.RefferalId = UserDto.RefferalId; - } + public void CopyUserDtoValuesToUser(User user) => base.CopyUserDtoValuesToUser(user); public virtual User CreateMainEntity() { diff --git a/TIAM.Services.Server/Logins/LoginService.cs b/TIAM.Services.Server/Logins/LoginService.cs index ceef73b6..8077ad14 100644 --- a/TIAM.Services.Server/Logins/LoginService.cs +++ b/TIAM.Services.Server/Logins/LoginService.cs @@ -25,9 +25,9 @@ public class LoginService(UserDal userDal, IConfiguration configuration) : AcLog return base.Logout(); } - public override Task RegistrationAsync(string email, string password, string? phoneNumber = null) + public override Task RegistrationAsync(string email, string password, string? phoneNumber = null, Guid? referralId = null) { - return base.RegistrationAsync(email, password, phoneNumber); + return base.RegistrationAsync(email, password, phoneNumber, referralId); } } \ No newline at end of file diff --git a/TIAM.Services.Server/TIAM.Services.Server.csproj b/TIAM.Services.Server/TIAM.Services.Server.csproj index d8c3cf00..c650cf4e 100644 --- a/TIAM.Services.Server/TIAM.Services.Server.csproj +++ b/TIAM.Services.Server/TIAM.Services.Server.csproj @@ -60,4 +60,8 @@ + + + + diff --git a/TIAM.Services/Interfaces/ITransferApiControllerClient.cs b/TIAM.Services/Interfaces/ITransferApiControllerClient.cs new file mode 100644 index 00000000..59d6b1fd --- /dev/null +++ b/TIAM.Services/Interfaces/ITransferApiControllerClient.cs @@ -0,0 +1,5 @@ +namespace TIAM.Services.Interfaces; + +public interface ITransferApiControllerClient : IUserApiControllerCommon +{ +} \ No newline at end of file diff --git a/TIAM.Services/Interfaces/ITransferApiControllerCommon.cs b/TIAM.Services/Interfaces/ITransferApiControllerCommon.cs new file mode 100644 index 00000000..a2925269 --- /dev/null +++ b/TIAM.Services/Interfaces/ITransferApiControllerCommon.cs @@ -0,0 +1,42 @@ +using TIAM.Entities.Transfers; +using TIAM.Entities.Users; + +namespace TIAM.Services.Interfaces; + +public interface ITransferApiControllerCommon +{ + #region Transfers + public Task> GetTransfers(); + public Task> GetTransfersByFilterText(string criteriaOperatorText); + public Task> GetTransfersByUserId(Guid userId); + public Task GetTransfersByDriverId(Guid userProductMappingId); + public Task GetTransferById(Guid transferId); + public Task UpdateTransfer(Transfer transfer); + public Task RemoveTransfer(Transfer transfer); + #endregion Transfers + + #region Drivers + public Task> GetAllDrivers(); + public Task> GetAllDriversByProductId(Guid productId); + public Task GetTransferDriver(Guid transferDriverId); + public Task> GetTransferDrivers(Guid transferId); + public Task AddTransferDriver(TransferToDriver transferToDriver); + public Task UpdateTransferDriver(TransferToDriver transferToDriver); + public Task RemoveTransferDriver(TransferToDriver transferToDriver); + #endregion Drivers + + #region TransferDestination + public List GetTransferDestinations(); + public Task GetTransferDestinationById(Guid transferDestinationId); + public Task CreateTransferDestination(TransferDestination transferDestination); + public Task UpdateTransferDestination(TransferDestination transferDestination); + public Task RemoveTransferDestination(TransferDestination transferDestination); + public Task> GetAllTransferDestinationToProducts(); + public Task> GetTransferDestinationToProductsByProductId(Guid productId); + public Task> GetTransferDestinationToProductsByTransferDestinationId(Guid transferDestinationId); + public Task GetTransferDestinationToProductById(Guid transferDestinationToProductId); + public Task CreateTransferDestinationToProduct(TransferDestinationToProduct transferDestinationToProduct); + public Task UpdateTransferDestinationToProduct(TransferDestinationToProduct transferDestinationToProduct); + public Task RemoveTransferDestinationToProduct(TransferDestinationToProduct transferDestinationToProduct); + #endregion TransferDestination +} diff --git a/TIAM.Services/Interfaces/IUserApiControllerClient.cs b/TIAM.Services/Interfaces/IUserApiControllerClient.cs new file mode 100644 index 00000000..dbeb6ff8 --- /dev/null +++ b/TIAM.Services/Interfaces/IUserApiControllerClient.cs @@ -0,0 +1,5 @@ +namespace TIAM.Services.Interfaces; + +public interface IUserApiControllerClient : IUserApiControllerCommon +{ +} \ No newline at end of file diff --git a/TIAM.Services/Interfaces/IUserApiControllerCommon.cs b/TIAM.Services/Interfaces/IUserApiControllerCommon.cs new file mode 100644 index 00000000..7a56b0b6 --- /dev/null +++ b/TIAM.Services/Interfaces/IUserApiControllerCommon.cs @@ -0,0 +1,10 @@ +using TIAM.Entities.Users; +using TIAM.Models.Dtos.Users; + +namespace TIAM.Services.Interfaces; + +public interface IUserApiControllerCommon +{ + public Task UpdateUser(User user); + public Task UpdateUserModelDtoDetail(UserModelDtoDetail userModelDtoDetail); +} \ No newline at end of file diff --git a/TIAM.Services/SignalRTags.cs b/TIAM.Services/SignalRTags.cs index 9e54fd0f..ff8c0587 100644 --- a/TIAM.Services/SignalRTags.cs +++ b/TIAM.Services/SignalRTags.cs @@ -105,8 +105,10 @@ public class SignalRTags : AcSignalRTags public const int GetAllUsers = 120; public const int GetAllUserModelDtoDetails = 121; public const int GetAllUserModelDtoEmails = 125; - public const int UpdateUser = 130; - public const int UpdateUserModelDtoDetail = 131; + public const int AddUser = 130; + public const int AddUserModelDtoDetail = 131; + public const int UpdateUser = 135; + public const int UpdateUserModelDtoDetail = 136; public const int GetAllLogItemsByFilterText = 1000; } diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor index e7001912..8685efce 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor @@ -270,43 +270,41 @@ async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) { + UserModelDtoDetail? userModelDtoDetail = null!; var userModelDtoDetailEditModel = ((UserModelDtoDetail)e.EditModel); if (e.IsNew) { var registration = new RegistrationModel(); //TODO: Refractor to userDataService - - - // var random = new Random(); - // const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; - // var password = new string(Enumerable.Repeat(chars, 10) - // .Select(s => s[random.Next(s.Length)]).ToArray()); - - + registration.Email = userModelDtoDetailEditModel.UserDto.EmailAddress; registration.PhoneNumber = userModelDtoDetailEditModel.UserDto.PhoneNumber; //registration.Password = password; registration.Password = AcCharsGenerator.NewPassword(AcConst.MinPasswordLength, 16); registration.ReferralId = null; + _logger.Info($"New user creating; Email: {registration.Email}"); await UserDataService.CreateGuestUser(registration); - _logger.Info("New user created added"); - + return; + //userModelDtoDetail = await AdminSignalRClient.PostDataAsync(SignalRTags.AddUserModelDtoDetail, userModelDtoDetailEditModel); + } + else + { + _logger.Info($"UserData updating; id: {userModelDtoDetailEditModel.Id}; email: {userModelDtoDetailEditModel.UserDto.EmailAddress}"); + + userModelDtoDetail = await AdminSignalRClient.UpdateUserModelDtoDetail(userModelDtoDetailEditModel); } - _logger.Info("UserData updated at id " + userModelDtoDetailEditModel.Id); - - var updateUserModelDtoDetail = await AdminSignalRClient.PostDataAsync(SignalRTags.UpdateUserModelDtoDetail, userModelDtoDetailEditModel); - if (updateUserModelDtoDetail == null) return; - - UserData.UpdateCollection(updateUserModelDtoDetail, false); + if (userModelDtoDetail == null) return; + UserData.UpdateCollection(userModelDtoDetail, false); } - async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) + Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) { _logger.Info("UserData deleted"); + return Task.CompletedTask; } async Task UpdateDataAsync() diff --git a/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor index fb63d9b6..6c230d0a 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor @@ -100,7 +100,7 @@ SearchMode="ListSearchMode.AutoSearch"> @* *@ - + @@ -199,8 +199,13 @@ void CustomizeEditModel(GridCustomizeEditModelEventArgs e) { - _hasEditPermission = HasReadPermission(((TransferToDriver)e.DataItem).UserProductMappingId); - if (!e.IsNew) return; + if (!e.IsNew) + { + _hasEditPermission = HasReadPermission(((TransferToDriver)e.DataItem).UserProductMappingId); + return; + } + + _hasEditPermission = true; var newDriver = (TransferToDriver)e.EditModel; newDriver.Id = Guid.NewGuid(); @@ -213,28 +218,8 @@ private Task LoadComboBoxItems() { - // _cars.AddRange((await AdminSignalRClient.GetAllAsync>(SignalRTags.GetAllCarsByProductId, [TiamConstClient.TransferProductId])) ?? []); - // _drivers.AddRange(_cars.DistinctBy(x => x.UserProductMappingId).Select(x => x.UserProductMapping)); - - //AdminSignalRClient.GetAllIntoAsync(_cars, SignalRTags.GetAllCarsByProductId, [TiamConstClient.TransferProductId]) - //TODO: CarModelDtoMin-t megcsinálni és azt lekérni a ComboBox-hoz! - J. - return AdminSignalRClient.GetAllAsync>(SignalRTags.GetAllCarsByProductId, async response => - { - if (response.Status != SignalResponseStatus.Success || response.ResponseData == null) - { - _logger.Error($"GetAllAsync>(); status: {response.Status}; dataCount: {response.ResponseData?.Count}"); - return; - } - - _cars.Clear(); - _cars.AddRange(response.ResponseData); - - _drivers.Clear(); - _drivers.AddRange(_cars.DistinctBy(x => x.UserProductMappingId).Select(x => x.UserProductMapping)); - - await InvokeAsync(StateHasChanged); - }, [TiamConstClient.TransferProductId]); + return AdminSignalRClient.GetAllCarsAndDriversByProductIdAsync(_cars, _drivers, TiamConstClient.TransferProductId, StateHasChanged); } private void DataItemChanged(GridDataItemChangedEventArgs args) diff --git a/TIAMWebApp/Client/Properties/launchSettings.json b/TIAMWebApp/Client/Properties/launchSettings.json index 76e15b95..6455a22f 100644 --- a/TIAMWebApp/Client/Properties/launchSettings.json +++ b/TIAMWebApp/Client/Properties/launchSettings.json @@ -33,8 +33,8 @@ "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://localhost:60505/", - "sslPort": 44395 + "applicationUrl": "http://localhost:52163/", + "sslPort": 44374 } } } \ No newline at end of file diff --git a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs index 685efd52..d952596c 100644 --- a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs +++ b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs @@ -311,7 +311,7 @@ namespace TIAMWebApp.Server.Controllers [SignalR(SignalRTags.GetAllCarsByProductId)] public async Task> GetAllCarsByProductId(Guid productId) { - _logger.Info($@"GetAllCarsByProductId called"); + _logger.Debug($@"GetAllCarsByProductId called; productId: {productId}"); var cars = await adminDal.GetAllCarsbyProductIdAsync(productId); return cars; diff --git a/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs b/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs index 9a4869b5..ecdbd0d3 100644 --- a/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs +++ b/TIAMWebApp/Server/Controllers/TransferDataAPIController.cs @@ -29,12 +29,13 @@ using DevExpress.Data.Linq; using DevExpress.Data.Linq.Helpers; using System; using TIAM.Database.DbSets.Transfers; +using TIAM.Services.Interfaces; namespace TIAMWebApp.Server.Controllers { [ApiController] [Route("api/v1/[controller]")] - public class TransferDataAPIController : ControllerBase + public class TransferDataAPIController : ControllerBase, ITransferApiControllerCommon { private readonly AdminDal _adminDal; private readonly TIAM.Core.Loggers.ILogger _logger; @@ -549,6 +550,7 @@ namespace TIAMWebApp.Server.Controllers [SignalR(SignalRTags.GetTransfers)] public async Task> GetTransfers() { + _logger.Debug($"GetTransfers called;"); //var token = _authService.GetAuthTokenFromRequest(Request); //_logger.Detail(token); @@ -560,6 +562,8 @@ namespace TIAMWebApp.Server.Controllers [SignalR(SignalRTags.GetTransfersByFilterText)] public async Task> GetTransfersByFilterText(string criteriaOperatorText) { + _logger.Debug($"GetTransfersByFilterText called; criteriaOperatorText: {criteriaOperatorText}"); + if (criteriaOperatorText.IsNullOrWhiteSpace()) return await GetTransfers(); var results = await _adminDal.GetTransfersByFilterAsync(CriteriaOperator.Parse(criteriaOperatorText)); @@ -570,9 +574,11 @@ namespace TIAMWebApp.Server.Controllers [HttpGet] [Route(APIUrls.GetTransfersByUserIdRouteName)] [SignalR(SignalRTags.GetTransfersByUserId)] - public async Task GetTransfersByUserId(Guid userId) + public async Task> GetTransfersByUserId(Guid userId) { - var result = await _adminDal.GetTransfersByUserIdJsonAsync(userId); + _logger.Debug($"GetTransfersByUserId called; userId: {userId}"); + + var result = await _adminDal.GetTransfersByUserIdAsync(userId); return result; } @@ -582,7 +588,8 @@ namespace TIAMWebApp.Server.Controllers [SignalR(SignalRTags.GetTransfersByUserProductMappingId)] public async Task GetTransfersByDriverId(Guid userProductMappingId) { - _logger.Debug($"GetTransferByDriverId called!!!"); + _logger.Debug($"GetTransferByDriverId called; userProductMappingId: {userProductMappingId}"); + var result = await _adminDal.GetTransfersByUserProductMappingIdAsync(userProductMappingId); return result.ToJson(); } @@ -592,11 +599,11 @@ namespace TIAMWebApp.Server.Controllers [HttpPost] [Route(APIUrls.GetTransferByIdRouteName)] [SignalR(SignalRTags.GetTransfer)] - public string? GetTransferById([FromBody] Guid transferId) + public async Task GetTransferById([FromBody] Guid transferId) { - _logger.Info($"Get transfer by id called; transferId: {transferId}"); + _logger.Debug($"GetTransferById called; transferId: {transferId}"); - return _adminDal.GetTransferJsonById(transferId); + return await _adminDal.GetTransferByIdAsync(transferId); } [AllowAnonymous] @@ -605,7 +612,7 @@ namespace TIAMWebApp.Server.Controllers [SignalR(SignalRTags.UpdateTransfer)] public async Task UpdateTransfer(Transfer transfer) { - _logger.Info($"UpdateTransfer called! + {transfer.Id}"); + _logger.Info($"UpdateTransfer called! transferId: {transfer.Id}"); return await _adminDal.UpdateTransferAsync(transfer); } @@ -614,7 +621,7 @@ namespace TIAMWebApp.Server.Controllers [SignalR(SignalRTags.RemoveTransfer)] public async Task RemoveTransfer(Transfer transfer) { - _logger.Info($"RemoveTransfer called! + {transfer.Id}"); + _logger.Info($"RemoveTransfer called! transferId: {transfer.Id}"); var result = await _adminDal.RemoveTransferAsync(transfer); return result ? transfer : null; @@ -627,6 +634,8 @@ namespace TIAMWebApp.Server.Controllers [SignalR(SignalRTags.GetAllDrivers)] public async Task> GetAllDrivers() { + _logger.Debug($"GetAllDrivers called!"); + var result = await _adminDal.GetAllDriversAsync(); return result; } @@ -647,6 +656,8 @@ namespace TIAMWebApp.Server.Controllers [SignalR(SignalRTags.GetTransferDriver)] public async Task GetTransferDriver(Guid transferDriverId) { + _logger.Debug($"GetTransferDriver called; transferDriverId: {transferDriverId}"); + var result = await _adminDal.GetTransferToDriverByIdAsync(transferDriverId); return result; } @@ -657,6 +668,8 @@ namespace TIAMWebApp.Server.Controllers [SignalR(SignalRTags.GetTransferDriversByTransferId)] public async Task> GetTransferDrivers(Guid transferId) { + _logger.Debug($"GetTransferDrivers called; transferId: {transferId}"); + var result = await _adminDal.GetTransferToDriversByTransferIdAsync(transferId); return result; } diff --git a/TIAMWebApp/Server/Controllers/UserAPIController.cs b/TIAMWebApp/Server/Controllers/UserAPIController.cs index 8b74d42c..9484a85f 100644 --- a/TIAMWebApp/Server/Controllers/UserAPIController.cs +++ b/TIAMWebApp/Server/Controllers/UserAPIController.cs @@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json.Linq; using System.Security.Claims; using System.Text.Json; +using AyCode.Core.Extensions; using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Models.PageModels; using TIAMWebApp.Server.Models; @@ -18,13 +19,15 @@ using AyCode.Core.Helpers; using AyCode.Entities; using AyCode.Services.SignalRs; using TIAM.Services; +using TIAM.Services.Interfaces; +using TIAMWebApp.Shared.Application.Services; namespace TIAMWebApp.Server.Controllers { [Authorize] [ApiController] [Route("api/v1/[controller]")] - public class UserAPIController(IConfiguration configuration, UserDal userDal, IEnumerable logWriters) : ControllerBase + public class UserAPIController(IConfiguration configuration, UserDal userDal, IEnumerable logWriters) : ControllerBase, IUserApiControllerCommon { private readonly TIAM.Core.Loggers.Logger _logger = new(logWriters.ToArray()); @@ -231,121 +234,57 @@ namespace TIAMWebApp.Server.Controllers } } - [AllowAnonymous] - [HttpPost] - [Route(APIUrls.UpdateUser)] - [SignalR(SignalRTags.UpdateUser)] - public async Task UpdateUser([FromBody] User user) - { - _logger.Info("UpdateUser called"); - - return await userDal.UpdateUserAsync(user); - //if (string.IsNullOrEmpty(serializedUserModel.GetRawText())) - //{ - // return BadRequest("SerializedUserModel is required"); - //} - //else - //{ - // var user = JObject.Parse(serializedUserModel.GetRawText()).ToObject(); - - // if (user != null) - // { - // var userId = user.Id; - // var email = user.UserDto.EmailAddress; - // var phoneNumber = user.UserDto.PhoneNumber; - - // if (email is null || phoneNumber is null) - // { - // return BadRequest("Invalid request"); - // } - // else - // { - // _logger.Info($"User to be updated: {userId}"); - // _logger.Info($"User to be updated: {email}"); - // _logger.Info($"User to be updated: {phoneNumber}"); - - // await userDal.UpdateUserAsync(new User(userId, email, phoneNumber)); - // } - // } - - // return Ok("yes"); - //} - } - - [AllowAnonymous] [HttpPost] [Route(APIUrls.CreateGuestUserRouteName)] public async Task CreateGuestUser([FromBody] JsonElement serializedRegistrationModel) { _logger.Info(@"CreateGuestUser called"); - var result = false; UserModelDtoDetail? guestUser = null; if (string.IsNullOrEmpty(serializedRegistrationModel.GetRawText())) { return BadRequest("SerializedLoginModel is required"); } - else + + var user = JObject.Parse(serializedRegistrationModel.GetRawText()).ToObject(); + + if (user != null) { - var user = JObject.Parse(serializedRegistrationModel.GetRawText()).ToObject(); - - if (user != null) - { - //var random = new Random(); - //var chars = "1234567890"; - //var nameExtension = new string(Enumerable.Repeat(chars, 10) - // .Select(s => s[random.Next(s.Length)]).ToArray()); + //var random = new Random(); + //var chars = "1234567890"; + //var nameExtension = new string(Enumerable.Repeat(chars, 10) + // .Select(s => s[random.Next(s.Length)]).ToArray()); - var userId = Guid.NewGuid(); - var email = user?.Email; - var phoneNumber = user?.PhoneNumber; - var password = user?.Password; + var userId = Guid.NewGuid(); + var email = user.Email?.ToLower(); + var phoneNumber = user.PhoneNumber; + var password = user.Password; - var referralId = user?.ReferralId; + var referralId = user.ReferralId.IsNullOrEmpty() ? null : user.ReferralId; - if (email is null || phoneNumber is null || password is null) - { - return BadRequest("Invalid request"); - } - else - { - _logger.Info($@"User to be created: {userId}"); - _logger.Info($@"User to be created: {email}"); - _logger.Info($@"User to be created: {phoneNumber}"); - _logger.Info($@"User to be created: {password}"); - //User userToCreate = new(userId, email, phoneNumber, hashedPassword); - //userToCreate.ProfileId = Guid.NewGuid(); - - //userToCreate.Profile = new Profile(); - //userToCreate.Profile.Id = userToCreate.ProfileId; - //userToCreate.Profile.Name = "Guest - " + nameExtension; - //userToCreate.RefferalId = referralId; - //userToCreate.Profile.AddressId = Guid.NewGuid(); - - ////Random rnd = new Random(); - //userToCreate.Profile.Address = new Address(); - //userToCreate.Profile.Address.Id = userToCreate.Profile.AddressId; - //userToCreate.Profile.Address.AddressText = null; - //userToCreate.Profile.Address.Latitude = null; //Math.Round(90 + rnd.NextDouble(), 8); - //userToCreate.Profile.Address.Longitude = null; //Math.Round(180 + rnd.NextDouble(), 8); - //result = await _userDal.AddUserAsync(userToCreate); - //guestUser = await _userDal.GetUserModelDtoByIdAsync(userId, false); - var createResult = await _loginService.RegistrationAsync(userId, email, password, phoneNumber); - if (createResult != AyCode.Core.Consts.AcErrorCode.Unset) - { - _logger.Error("Error:" + createResult.ToString()); - } - else - { - result = true; - } - } + if (email is null || phoneNumber is null || password is null) + { + return BadRequest("Invalid request"); } - return Ok(guestUser); + _logger.Info($@"User to be created: {userId}"); + _logger.Info($@"User to be created: {email}"); + _logger.Info($@"User to be created: {phoneNumber}"); + _logger.Info($@"User to be created: {password}"); + + var createResult = await _loginService.RegistrationAsync(userId, email, password, phoneNumber, referralId); + if (createResult != AyCode.Core.Consts.AcErrorCode.Unset) + { + _logger.Error("Error:" + createResult.ToString()); + } + else + { + } } + + return Ok(guestUser); } [AllowAnonymous] @@ -383,19 +322,58 @@ namespace TIAMWebApp.Server.Controllers public async Task> GetUserModelDtoEmails() { _logger.Info("GetUserModelDtoEmails called"); + return await userDal.GetUserModelDtoEmailsAsync(); } + [AllowAnonymous] + [HttpPost] + [Route(APIUrls.UpdateUser)] + [SignalR(SignalRTags.UpdateUser)] + public async Task UpdateUser([FromBody] User user) + { + _logger.Info("UpdateUser called"); + + return await userDal.UpdateUserAsync(user); + } + [NonAction] [SignalR(SignalRTags.UpdateUserModelDtoDetail)] public async Task UpdateUserModelDtoDetail(UserModelDtoDetail userModelDtoDetail) { - _logger.Info("UpdateUserModelDtoDetail called"); + _logger.Info($"UpdateUserModelDtoDetail called; Id: {userModelDtoDetail.UserDto.Id}"); var result = await userDal.UpdateUserModelDtoDetailAsync(userModelDtoDetail); return result; } + [NonAction] + [SignalR(SignalRTags.AddUser)] + public async Task AddUser(User user) + { + throw new NotImplementedException("Profile, Address, etc..."); + + if (user.Id.IsNullOrEmpty()) user.Id = Guid.NewGuid(); + + _logger.Info($"AddUser called; Id: {user.Id}"); + + return await userDal.AddUserAsync(user) ? user : null; + } + + [NonAction] + [SignalR(SignalRTags.AddUserModelDtoDetail)] + public async Task AddUserModelDtoDetail(UserModelDtoDetail userModelDtoDetail) + { + throw new NotImplementedException("Profile, Address, etc..."); + + if (userModelDtoDetail.UserDto.Id.IsNullOrEmpty()) userModelDtoDetail.UserDto.Id = Guid.NewGuid(); + + _logger.Info($"AddUserModelDtoDetail called; Id: {userModelDtoDetail.UserDto.Id}"); + + var result = await userDal.AddUserModelDtoDetailAsync(userModelDtoDetail); + return result; + } + [AllowAnonymous] [HttpGet] [Route(APIUrls.GetUserByEmailRouteName + "/{email}")] diff --git a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs index 1728f955..b24475dc 100644 --- a/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs +++ b/TIAMWebApp/Server/Services/DevAdminSignalRhub.cs @@ -132,7 +132,10 @@ public class DevAdminSignalRHub : Hub, IAcSignalRHubServe public override async Task OnDisconnectedAsync(Exception? exception) { - _logger.ErrorConditional($"Server OnDisconnectedAsync; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier}", exception); + var logText = $"Server OnDisconnectedAsync; ConnectionId: {Context.ConnectionId}; UserIdentifier: {Context.UserIdentifier};"; + + if (exception == null) _logger.Debug(logText); + else _logger.Error(logText, exception); //await Groups.RemoveFromGroupAsync(Context.ConnectionId, "SignalR Users"); await base.OnDisconnectedAsync(exception); @@ -212,7 +215,7 @@ public class DevAdminSignalRHub : Hub, IAcSignalRHubServe } else _logger.Debug($"{logText}(); {tagName}"); - await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, methodInfoModel.MethodInfo.InvokeMethod(methodsByDeclaringObject.InstanceObject, paramValues)), requestId); + await ResponseToCaller(messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, methodInfoModel.MethodInfo.InvokeMethod(methodsByDeclaringObject.InstanceObject, paramValues)), requestId); return; } @@ -226,7 +229,7 @@ public class DevAdminSignalRHub : Hub, IAcSignalRHubServe var id = message!.MessagePackTo>().PostData.Ids[0].JsonTo()![0]; var address = await _adminDal.GetAddressByIdAsync(id); - await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, address), requestId); + await ResponseToCaller(messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, address), requestId); return; @@ -235,7 +238,7 @@ public class DevAdminSignalRHub : Hub, IAcSignalRHubServe id = message!.MessagePackTo>().PostData.Ids[0].JsonTo()![0]; address = await _adminDal.GetAddressByIdAsync(id); - await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, new List
{ address! }), requestId); + await ResponseToCaller(messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, new List
{ address! }), requestId); return; @@ -243,7 +246,7 @@ public class DevAdminSignalRHub : Hub, IAcSignalRHubServe address = message!.MessagePackTo>().PostData; await _adminDal.UpdateAddressAsync(address); - await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, address), requestId); + await ResponseToCaller(messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, address), requestId); return; @@ -251,7 +254,7 @@ public class DevAdminSignalRHub : Hub, IAcSignalRHubServe var profile = message!.MessagePackTo>().PostData; await _adminDal.UpdateProfileAsync(profile); - await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, profile), requestId); + await ResponseToCaller(messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, profile), requestId); return; @@ -298,7 +301,7 @@ public class DevAdminSignalRHub : Hub, IAcSignalRHubServe _logger.Error($"Server OnReceiveMessage; {ex.Message}; {tagName}", ex); } - await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Error), requestId); + await ResponseToCaller(messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Error), requestId); } protected async Task ResponseToCaller(int messageTag, ISignalRMessage message, int? requestId) diff --git a/TIAMWebApp/Shared/Services/AdminSignalRClient.cs b/TIAMWebApp/Shared/Services/AdminSignalRClient.cs index dd5a47d2..b7528428 100644 --- a/TIAMWebApp/Shared/Services/AdminSignalRClient.cs +++ b/TIAMWebApp/Shared/Services/AdminSignalRClient.cs @@ -9,18 +9,193 @@ using AyCode.Services.Loggers; using AyCode.Services.SignalRs; using MessagePack.Resolvers; using Microsoft.AspNetCore.SignalR.Client; +using TIAM.Core.Consts; +using TIAM.Entities.Drivers; +using TIAM.Entities.Transfers; +using TIAM.Entities.Users; +using TIAM.Models.Dtos.Users; using TIAM.Services; +using TIAM.Services.Interfaces; using TIAMWebApp.Shared.Application.Models.ClientSide; using TIAMWebApp.Shared.Application.Utility; namespace TIAMWebApp.Shared.Application.Services { - public class AdminSignalRClient : AcSignalRClientBase + public class AdminSignalRClient : AcSignalRClientBase, IUserApiControllerClient, ITransferApiControllerClient { public AdminSignalRClient(IEnumerable logWriters) : base($"{Setting.BaseUrl}/DevAdminHub", new LoggerClient(nameof(AdminSignalRClient), logWriters.ToArray())) { ConstHelper.NameByValue(0); } + #region IUserApiController + public async Task UpdateUser(User user) + => await PostDataAsync(SignalRTags.UpdateUser, user); + + public async Task UpdateUserModelDtoDetail(UserModelDtoDetail userModelDtoDetail) + => await PostDataAsync(SignalRTags.UpdateUserModelDtoDetail, userModelDtoDetail); + #endregion IUserApiController + + #region ICompanyApiController + public async Task> GetAllCarsByProductId(Guid productId) + { + Logger.Detail($"GetAllCarsByProductId client called; productId: {productId}"); + return await GetAllAsync>(SignalRTags.GetAllCarsByProductId, [productId]) ?? []; + } + + public Task GetAllCarsAndDriversByProductIdAsync(List intoCars, List intoDrivers, Guid productId, Action? callback = null) + { + return GetAllCarsByProductIdAsync(intoCars, productId, () => + { + intoDrivers.Clear(); + intoDrivers.AddRange(intoCars.DistinctBy(x => x.UserProductMappingId).Select(x => x.UserProductMapping)); + + callback?.Invoke(); + }); + } + + public Task GetAllCarsByProductIdAsync(List intoCars, Guid productId, Action? callback = null) + { + Logger.Detail($"GetAllCarsByProductIdAsync client called; productId: {productId}"); + + //TODO: AdminSignalRClient.GetAllIntoAsync(_cars, SignalRTags.GetAllCarsByProductId, [productId]) - J. + return GetAllAsync>(SignalRTags.GetAllCarsByProductId, response => + { + if (response is { Status: SignalResponseStatus.Success, ResponseData: not null }) + { + intoCars.Clear(); + intoCars.AddRange(response.ResponseData); + } + + callback?.Invoke(); + + return Task.CompletedTask; + }, [productId]); + } + #endregion ICompanyApiController + + #region ITransferApiController + public async Task> GetTransfers() + => await GetAllAsync>(SignalRTags.GetTransfers) ?? []; + + public async Task> GetTransfersByFilterText(string criteriaOperatorText) + => await GetAllAsync>(SignalRTags.GetTransfersByFilterText, [criteriaOperatorText]) ?? []; + + public async Task> GetTransfersByUserId(Guid userId) + => await GetAllAsync>(SignalRTags.GetTransfersByUserId, [userId]) ?? []; + + public async Task GetTransfersByDriverId(Guid userProductMappingId) + { + throw new NotImplementedException(); + } + + public async Task GetTransferById(Guid transferId) + => await GetByIdAsync(SignalRTags.GetTransfer, transferId); + + public async Task UpdateTransfer(Transfer transfer) + { + throw new NotImplementedException(); + } + + public async Task RemoveTransfer(Transfer transfer) + { + throw new NotImplementedException(); + } + + public async Task> GetAllDrivers() + { + throw new NotImplementedException(); + } + + public async Task> GetAllDriversByProductId(Guid productId) + { + throw new NotImplementedException(); + } + + public async Task GetTransferDriver(Guid transferDriverId) + { + throw new NotImplementedException(); + } + + public async Task> GetTransferDrivers(Guid transferId) + { + throw new NotImplementedException(); + } + + public async Task AddTransferDriver(TransferToDriver transferToDriver) + { + throw new NotImplementedException(); + } + + public async Task UpdateTransferDriver(TransferToDriver transferToDriver) + { + throw new NotImplementedException(); + } + + public async Task RemoveTransferDriver(TransferToDriver transferToDriver) + { + throw new NotImplementedException(); + } + + public List GetTransferDestinations() + { + throw new NotImplementedException(); + } + + public async Task GetTransferDestinationById(Guid transferDestinationId) + { + throw new NotImplementedException(); + } + + public async Task CreateTransferDestination(TransferDestination transferDestination) + { + throw new NotImplementedException(); + } + + public async Task UpdateTransferDestination(TransferDestination transferDestination) + { + throw new NotImplementedException(); + } + + public async Task RemoveTransferDestination(TransferDestination transferDestination) + { + throw new NotImplementedException(); + } + + public async Task> GetAllTransferDestinationToProducts() + { + throw new NotImplementedException(); + } + + public async Task> GetTransferDestinationToProductsByProductId(Guid productId) + { + throw new NotImplementedException(); + } + + public async Task> GetTransferDestinationToProductsByTransferDestinationId(Guid transferDestinationId) + { + throw new NotImplementedException(); + } + + public async Task GetTransferDestinationToProductById(Guid transferDestinationToProductId) + { + throw new NotImplementedException(); + } + + public async Task CreateTransferDestinationToProduct(TransferDestinationToProduct transferDestinationToProduct) + { + throw new NotImplementedException(); + } + + public async Task UpdateTransferDestinationToProduct(TransferDestinationToProduct transferDestinationToProduct) + { + throw new NotImplementedException(); + } + + public async Task RemoveTransferDestinationToProduct(TransferDestinationToProduct transferDestinationToProduct) + { + throw new NotImplementedException(); + } + #endregion ITransferApiController } }