diff --git a/TIAM.Database/DataLayers/Admins/AdminDal.cs b/TIAM.Database/DataLayers/Admins/AdminDal.cs index fcd1bc8e..fb2e878e 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.Dtos.Users; namespace TIAM.Database.DataLayers.Admins { @@ -41,7 +42,6 @@ namespace TIAM.Database.DataLayers.Admins } #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()); public Car? GetCarById(Guid carId) => Session(ctx => ctx.Cars.FirstOrDefault(x => x.Id == carId)); @@ -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)); @@ -214,12 +216,14 @@ namespace TIAM.Database.DataLayers.Admins public string GetUsersJson() => Session(ctx => ctx.Users.ToJson()); public Task AddUserAsync(User user) => TransactionAsync(ctx => ctx.AddUser(user)); - public Task UpdateUserAsync(User user) => TransactionAsync(ctx => ctx.UpdateUser(user)); + public Task UpdateUserAsync(User user) => UpdateSafeAsync(user); public Task RemoveUserAsync(Guid userId) => TransactionAsync(ctx => ctx.RemoveUser(userId)); + #region Product public Product? GetProductById(Guid contextId, bool includeUsers = true) => Session(ctx => ctx.GetProductById(contextId, includeUsers)); public Task GetProductByIdAsync(Guid contextId, bool includeUsers = true) => SessionAsync(ctx => ctx.GetProductById(contextId, includeUsers)); - + + public Task> GetProductModelDtoNamesAsync() => SessionAsync(ctx => ctx.Products.Select(x => new ProductModelDtoName(x)).ToList()); public string GetProductsJson(bool includeUsers = true) => Session(ctx => ctx.ProductsWithUserRelations(includeUsers).ToJson()); public List GetProductsByServiceProviderId(Guid serviceProviderId, bool includeUsers = true) => Session(ctx => ctx.GetProductsByCompanyId(serviceProviderId, includeUsers).ToList()); public string GetProductsJsonByServiceProviderId(Guid serviceProviderId, bool includeUsers = true) => Session(ctx => ctx.GetProductsByCompanyId(serviceProviderId, includeUsers).ToJson()); @@ -228,6 +232,7 @@ namespace TIAM.Database.DataLayers.Admins public Task UpdateProductAsync(Product product) => UpdateSafeAsync(product, (ctx, safeProduct) => ctx.UpdateProduct(safeProduct)); public Task RemoveProductAsync(Product product) => RemoveProductAsync(product.Id); public Task RemoveProductAsync(Guid productId) => TransactionAsync(ctx => ctx.RemoveProduct(productId)); + #endregion Product public UserProductMapping? GetUserProductMappingById(Guid userProductMappingId, bool autoInclude = true) => Session(ctx => ctx.GetUserProductMappingById(userProductMappingId, autoInclude)); public Task GetUserProductMappingByIdAsync(Guid userProductMappingId, bool autoInclude = true) => SessionAsync(ctx => ctx.GetUserProductMappingById(userProductMappingId, autoInclude)); diff --git a/TIAM.Database/DataLayers/Users/UserDal.cs b/TIAM.Database/DataLayers/Users/UserDal.cs index b6ec58eb..e36a4cc4 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.Users; using Microsoft.EntityFrameworkCore; using TIAM.Database.DbContexts.Users; using TIAM.Entities.Addresses; @@ -6,6 +7,7 @@ using TIAM.Entities.Emails; using TIAM.Entities.Profiles; using TIAM.Entities.ServiceProviders; using TIAM.Entities.Users; +using TIAM.Models.Dtos.Users; namespace TIAM.Database.DataLayers.Users { @@ -20,6 +22,27 @@ 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.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); @@ -31,21 +54,5 @@ namespace TIAM.Database.DataLayers.Users Console.WriteLine($@"Saving user to db {user.Id}, {user.EmailAddress}, {user.PhoneNumber}, {user.Password}"); return await Context.SaveChangesAsync() > 0; } - - - public async Task UpdateUserAsync(User user) - { - var existingUser = await Context.Users.CountAsync(u => u.EmailAddress == user.EmailAddress); - if (existingUser == 1) - { - //user.Modified = DateTime.UtcNow; //ezt nem kell megadni, a háttérben ezt magától megcsinálja a DbContextBase - J. - Context.Users.Update(user); - return await Context.SaveChangesAsync() > 0; - } - else - { - throw new Exception("User not found"); - } - } } } diff --git a/TIAM.Models/Dtos/Products/ProductModelDtoName.cs b/TIAM.Models/Dtos/Products/ProductModelDtoName.cs new file mode 100644 index 00000000..728271df --- /dev/null +++ b/TIAM.Models/Dtos/Products/ProductModelDtoName.cs @@ -0,0 +1,21 @@ +using AyCode.Interfaces; +using TIAM.Entities.Products; + +namespace TIAM.Models.Dtos.Products; + +public class ProductModelDtoName : IAcModelDtoBase +{ + public Guid Id { get; set; } + public string Name { get; set; } + + public ProductModelDtoName() + { } + public ProductModelDtoName(Product product) : this(product.Id, product.Name) + { } + + public ProductModelDtoName(Guid id, string name) : this() + { + Id = id; + Name = name; + } +} \ No newline at end of file diff --git a/TIAM.Models/Dtos/Users/UserModelDto.cs b/TIAM.Models/Dtos/Users/UserModelDto.cs index c50d7bd3..de93ccfe 100644 --- a/TIAM.Models/Dtos/Users/UserModelDto.cs +++ b/TIAM.Models/Dtos/Users/UserModelDto.cs @@ -1,5 +1,6 @@ using System.ComponentModel.DataAnnotations.Schema; using System.Text.Json.Serialization; +using AyCode.Core.Interfaces; using AyCode.Interfaces; using AyCode.Models.Users; using TIAM.Entities.Products; diff --git a/TIAM.Models/Dtos/Users/UserModelDtoDetail.cs b/TIAM.Models/Dtos/Users/UserModelDtoDetail.cs index 4760053a..576fe90e 100644 --- a/TIAM.Models/Dtos/Users/UserModelDtoDetail.cs +++ b/TIAM.Models/Dtos/Users/UserModelDtoDetail.cs @@ -50,6 +50,8 @@ namespace TIAM.Models.Dtos.Users } } + public void CopyUserDtoValuesToUser(User user) => base.CopyUserDtoValuesToUser(user); + public virtual User CreateMainEntity() { //TODO: Models... - J. diff --git a/TIAM.Models/Dtos/Users/UserModelDtoEmail.cs b/TIAM.Models/Dtos/Users/UserModelDtoEmail.cs new file mode 100644 index 00000000..eeb35ab9 --- /dev/null +++ b/TIAM.Models/Dtos/Users/UserModelDtoEmail.cs @@ -0,0 +1,22 @@ +using AyCode.Interfaces; +using AyCode.Interfaces.Users; +using TIAM.Entities.Users; + +namespace TIAM.Models.Dtos.Users; + +public class UserModelDtoEmail : IAcEmailAddress, IAcModelDtoBase +{ + public Guid Id { get; set; } + public string EmailAddress { get; set; } + + public UserModelDtoEmail() + { } + public UserModelDtoEmail(User user) : this(user.Id, user.EmailAddress) + { } + + public UserModelDtoEmail(Guid id, string emailAddress) : this() + { + Id = id; + EmailAddress = emailAddress; + } +} \ No newline at end of file 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 b617a802..ff8c0587 100644 --- a/TIAM.Services/SignalRTags.cs +++ b/TIAM.Services/SignalRTags.cs @@ -85,6 +85,8 @@ public class SignalRTags : AcSignalRTags public const int RemoveProduct = 75; public const int GetProductsById = 76; public const int GetAllProducts = 77; + public const int GetAllProductModelDtoNames = 78; + public const int GetTransferDestinationById = 80; public const int GetAllTransferDestinations = 81; @@ -101,6 +103,12 @@ public class SignalRTags : AcSignalRTags public const int GetTransferDestinationToProductsByTransferDestinationId = 96; public const int GetAllUsers = 120; + public const int GetAllUserModelDtoDetails = 121; + public const int GetAllUserModelDtoEmails = 125; + 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/Formula1.razor b/TIAMSharedUI/Pages/Formula1.razor index d247ed16..714367ff 100644 --- a/TIAMSharedUI/Pages/Formula1.razor +++ b/TIAMSharedUI/Pages/Formula1.razor @@ -9,6 +9,8 @@ @using TIAMSharedUI.Pages.Components; @using TIAMSharedUI.Shared @using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels +@using AyCode.Core.Helpers +@using AyCode.Core.Consts @inject NavigationManager NavManager @inject IUserDataService UserDataService; @inject IJSRuntime jsRuntime; @@ -461,10 +463,12 @@ new HeroSliderItem { //if not, create user - Random random = new Random(); - string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; - string password = new string(Enumerable.Repeat(chars, 10) - .Select(s => s[random.Next(s.Length)]).ToArray()); + // Random random = new Random(); + // string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; + // string password = new string(Enumerable.Repeat(chars, 10) + // .Select(s => s[random.Next(s.Length)]).ToArray()); + + var password = AcCharsGenerator.NewPassword(AcConst.MinPasswordLength, 16); RegistrationModel regModel = new RegistrationModel { diff --git a/TIAMSharedUI/Pages/User/Drivers/DriverManageCars.razor b/TIAMSharedUI/Pages/User/Drivers/DriverManageCars.razor index f2e85394..9115782c 100644 --- a/TIAMSharedUI/Pages/User/Drivers/DriverManageCars.razor +++ b/TIAMSharedUI/Pages/User/Drivers/DriverManageCars.razor @@ -32,33 +32,31 @@
- - + +
-
-
- @code { - [Parameter] public Guid driverId { get; set; } + [Parameter] public Guid DriverId { get; set; } private LoggerClient _logger; - - protected override async Task OnInitializedAsync() - { + + protected override void OnInitialized() + { _logger = new LoggerClient(LogWriters.ToArray()); - + base.OnInitialized(); } diff --git a/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor b/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor index 268155d6..6f6fb0d3 100644 --- a/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor +++ b/TIAMSharedUI/Pages/User/Drivers/DriverManageTransfers.razor @@ -100,7 +100,7 @@ ShowFilterRow="true"> - + @@ -150,11 +150,15 @@ + @{ + var transfer = ((Transfer)context.DataItem); + } + - + - + diff --git a/TIAMSharedUI/Pages/User/SysAdmins/CarDetailGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/CarDetailGridComponent.razor index 5d0aea89..5d329073 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/CarDetailGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/CarDetailGridComponent.razor @@ -50,10 +50,10 @@ @{ + // TODO: ide max a transferek kellenek, nem a UserProductMapping! - J. - - + diff --git a/TIAMSharedUI/Pages/User/SysAdmins/CarGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/CarGridComponent.razor index 8b1160f0..bc255083 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/CarGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/CarGridComponent.razor @@ -20,6 +20,7 @@ - + @{ @@ -49,13 +51,12 @@ @{ + // TODO: ide max a transferek kellenek, nem a UserProductMapping! - J. - - } @@ -95,10 +96,16 @@ @code { - [Parameter] public ICarRelation ParentData { get; set; } = null!; + [Parameter] public Guid ContextId { get; set; } + //[Parameter] public ICarRelation ParentData { get; set; } = null!; [Parameter] public int GetAllTag { get; set; } = SignalRTags.GetAllCars; [Parameter] public GridDetailExpandButtonDisplayMode DetailExpandButtonDisplayMode { get; set; } = GridDetailExpandButtonDisplayMode.Never; + [Parameter] public bool CommandColumnVisible { get; set; } = true; + [Parameter] public bool NewButtonVisible { get; set; } = false; + [Parameter] public bool EditButtonVisible { get; set; } = true; + [Parameter] public bool DeleteButtonVisible { get; set; } = false; + private LoggerClient _logger = null!; protected override void OnInitialized() diff --git a/TIAMSharedUI/Pages/User/SysAdmins/LogViewerGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/LogViewerGridComponent.razor index 25680fd9..7746ba15 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/LogViewerGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/LogViewerGridComponent.razor @@ -168,7 +168,7 @@ _takeCount = value; _contextParams[0] = _takeCount; - await _logViewerGrid.LoadDataSourceAsync(); + await _logViewerGrid.ReloadDataSourceAsync(); } private async Task OnValueChangedStartDate(DateTime value) @@ -181,7 +181,7 @@ _contextParams[1] = _fromDate; if (_fromDate.Date > _toDate.Date) return; - await _logViewerGrid.LoadDataSourceAsync(); + await _logViewerGrid.ReloadDataSourceAsync(); } private async Task OnValueChangedEndDate(DateTime value) @@ -192,7 +192,7 @@ _contextParams[2] = _toDate; if (_fromDate.Date > _toDate.Date) return; - await _logViewerGrid.LoadDataSourceAsync(); + await _logViewerGrid.ReloadDataSourceAsync(); } void Grid_CustomizeElement(GridCustomizeElementEventArgs e) diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageCars.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageCars.razor index a43ab4bd..8694dad2 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageCars.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageCars.razor @@ -10,6 +10,8 @@ @using TIAMWebApp.Shared.Application.Models.PageModels @using TIAMWebApp.Shared.Application.Utility @using AyCode.Services.Loggers +@using AyCode.Core.Helpers +@using AyCode.Core.Consts @layout AdminLayout @inject IEnumerable LogWriters @inject IStringLocalizer Localizer @@ -119,11 +121,13 @@ 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()); + // var random = new Random(); + // const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; + // var password = new string(Enumerable.Repeat(chars, 10) + // .Select(s => s[random.Next(s.Length)]).ToArray()); + var password = AcCharsGenerator.NewPassword(AcConst.MinPasswordLength, 16); + registration.Email = userModelDtoDetail.UserDto.EmailAddress; registration.PhoneNumber = userModelDtoDetail.UserDto.PhoneNumber; registration.Password = password; diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransferDestinationToProducts.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransferDestinationToProducts.razor index 4426d28f..c4b9eb1f 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransferDestinationToProducts.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransferDestinationToProducts.razor @@ -10,6 +10,8 @@ @using TIAMWebApp.Shared.Application.Models.PageModels @using TIAMWebApp.Shared.Application.Utility @using AyCode.Services.Loggers +@using AyCode.Core.Helpers +@using AyCode.Core.Consts @layout AdminLayout @inject IEnumerable LogWriters @inject IStringLocalizer Localizer @@ -100,10 +102,12 @@ 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()); + // var random = new Random(); + // const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; + // var password = new string(Enumerable.Repeat(chars, 10) + // .Select(s => s[random.Next(s.Length)]).ToArray()); + + var password = AcCharsGenerator.NewPassword(AcConst.MinPasswordLength, 16); registration.Email = userModelDtoDetail.UserDto.EmailAddress; registration.PhoneNumber = userModelDtoDetail.UserDto.PhoneNumber; diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageUserProductMappings.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageUserProductMappings.razor index 1cf46d1b..6cb7975d 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageUserProductMappings.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageUserProductMappings.razor @@ -10,6 +10,8 @@ @using TIAMWebApp.Shared.Application.Models.PageModels @using TIAMWebApp.Shared.Application.Utility @using AyCode.Services.Loggers +@using AyCode.Core.Helpers +@using AyCode.Core.Consts @layout AdminLayout @inject IEnumerable LogWriters @inject IStringLocalizer Localizer @@ -119,10 +121,12 @@ 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()); + // var random = new Random(); + // const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; + // var password = new string(Enumerable.Repeat(chars, 10) + // .Select(s => s[random.Next(s.Length)]).ToArray()); + + var password = AcCharsGenerator.NewPassword(AcConst.MinPasswordLength, 16); registration.Email = userModelDtoDetail.UserDto.EmailAddress; registration.PhoneNumber = userModelDtoDetail.UserDto.PhoneNumber; diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor index 035d0846..8685efce 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor @@ -11,12 +11,17 @@ @using TIAMWebApp.Shared.Application.Utility @using AyCode.Services.Loggers @using AyCode.Core +@using AyCode.Core.Consts +@using AyCode.Core.Extensions +@using AyCode.Core.Helpers +@using TIAMWebApp.Shared.Application.Services @layout AdminLayout @inject IEnumerable LogWriters @inject IStringLocalizer Localizer @inject ISessionService SessionService @inject IWizardProcessor WizardProcessor @inject IUserDataService UserDataService +@inject AdminSignalRClient AdminSignalRClient; Users
@@ -72,17 +77,17 @@ EditMode="GridEditMode.EditForm" ColumnResizeMode="GridColumnResizeMode.NextColumn" PageSize="15" - TextWrapEnabled="false" - AllowSelectRowByClick="true" - HighlightRowOnHover="true" - AutoCollapseDetailRow="true" - AutoExpandAllGroupRows="false" + TextWrapEnabled = "false" + AllowSelectRowByClick = "true" + HighlightRowOnHover = "true" + AutoCollapseDetailRow = "true" + AutoExpandAllGroupRows = "false" ShowFilterRow="true"> - - - - + + + + @@ -93,7 +98,7 @@ var keyItem = (UserModelDtoDetail)context.DataItem; var buttonText = "Contact"; - + } @@ -115,25 +120,25 @@ - - + + - - + + @{ - var transfer2 = (UserModelDtoDetail)EditFormContext.EditModel; + var transfer2 = (UserModelDtoDetail)editFormContext.EditModel; } - @EditFormContext.GetEditor("UserDto.EmailAddress") - + @editFormContext.GetEditor("UserDto.EmailAddress") + - @EditFormContext.GetEditor("UserDto.EmailConfirmed") + @editFormContext.GetEditor("UserDto.EmailConfirmed") - @EditFormContext.GetEditor("UserDto.PhoneNumber") + @editFormContext.GetEditor("UserDto.PhoneNumber") - + @@ -156,7 +161,7 @@ private LoggerClient _logger; //public UserModelDtoDetail UserModelDtoDetail = new(); - public List UserData { get; set; } + public List UserData { get; set; } = null!; bool PopupVisible { get; set; } = false; @@ -164,15 +169,15 @@ //object? MasterGridData { get; set; } public List IgnoreList = - [ - nameof(MessageWizardModel.ReceiverEmailAddress), - nameof(MessageWizardModel.ReceiverFullName), - nameof(MessageWizardModel.ReceiverId), - nameof(MessageWizardModel.SenderEmailAddress), - nameof(MessageWizardModel.SenderFullName), - nameof(MessageWizardModel.SenderId), - nameof(MessageWizardModel.ContextId) - ]; + [ + "ReceiverEmailAddress", + "ReceiverFullName", + "ReceiverId", + "SenderEmailAddress", + "SenderFullName", + "SenderId", + "ContextId" + ]; public MessageWizardModel MessageWizardModel = new MessageWizardModel(); @@ -185,7 +190,7 @@ MessageWizardModel.ReceiverId = item.Id; MessageWizardModel.ReceiverEmailAddress = item.UserDto.EmailAddress; - MessageWizardModel.SenderId = SessionService.User.UserId; + MessageWizardModel.SenderId = SessionService.User?.UserId ?? throw new NullReferenceException("SessionService.User == null"); MessageWizardModel.SenderEmailAddress = "info@anataworld.com"; // _logger.Info($"Sending mail to {MessageWizardModel.ReceiverEmailAddress} from {MessageWizardModel.SenderId}"); @@ -261,79 +266,67 @@ userEditModel.ServiceProviders = []; userEditModel.UserProductMappings = []; } - - } async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) { - var userModelDtoDetail = ((UserModelDtoDetail)e.EditModel); + 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 = userModelDtoDetail.UserDto.EmailAddress; - registration.PhoneNumber = userModelDtoDetail.UserDto.PhoneNumber; - registration.Password = password; + + 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 updated at id " + userModelDtoDetail.Id); + _logger.Info($"UserData updating; id: {userModelDtoDetailEditModel.Id}; email: {userModelDtoDetailEditModel.UserDto.EmailAddress}"); - //await transferDataService.UpdateTransferAsync((TransferWizardModel)e.EditModel); - //modify transferData where transferData.Id == e.EditModel.Id + userModelDtoDetail = await AdminSignalRClient.UpdateUserModelDtoDetail(userModelDtoDetailEditModel); } - //get transfer from TransferData by Id - // foreach (var transferToModify in (List)TransferData) - // { - // myModel = (Transfer)e.EditModel; - - // if (transferToModify.Id == myModel.Id) - // { - // //transferToModify.Driver = myModel.Driver; - // } - // } - - //TODO: ne a teljes grid-et refresh-eljük, elég lenne csak az adott sort! - J. - await UpdateDataAsync(); + 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() { //refresh grid - UserData = (await UserDataService.GetUsersWithDetailsAsync()).OrderBy(x => x.ProfileDto?.Name).ToList(); + //UserData = (await UserDataService.GetUsersWithDetailsAsync()).OrderBy(x => x.ProfileDto?.Name).ToList(); + UserData = await AdminSignalRClient.GetAllAsync>(SignalRTags.GetAllUserModelDtoDetails) ?? []; _logger.Info("UserData grid refreshed"); } protected override async Task OnInitializedAsync() - { + { _logger = new LoggerClient(LogWriters.ToArray()); - UserData = (await UserDataService.GetUsersWithDetailsAsync()).OrderBy(x => x.ProfileDto?.Name).ToList(); + await UpdateDataAsync(); base.OnInitialized(); } void ColumnChooserButton_Click() { Grid.ShowColumnChooser(); - } + } protected override void OnAfterRender(bool firstRender) { diff --git a/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor index 2cf730b4..6c230d0a 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/TransferToDriverGridComponent.razor @@ -34,15 +34,26 @@ EditMode="GridEditMode.EditRow" ColumnResizeMode="GridColumnResizeMode.NextColumn"> - - + + @{ var userEmailFieldName = $"{nameof(TransferToDriver.UserProductMapping)}.{nameof(UserProductMapping.User)}.{nameof(User.EmailAddress)}"; var userEmailFieldNameComboItem = $"{nameof(UserProductMapping.User)}.{nameof(User.EmailAddress)}"; var userNameFieldNameComboItem = $"{nameof(UserProductMapping.User)}.{nameof(User.FullName)}"; } - + + + @{ + var email = string.Empty; + var transferToDriverDataItem = ((TransferToDriver)context.DataItem); + + if (HasReadPermission(transferToDriverDataItem.UserProductMappingId)) + email = transferToDriverDataItem.UserProductMapping.User.EmailAddress; + } + @email + @{ var transferToDriverEditModel = (TransferToDriver)context.EditModel; @@ -51,6 +62,7 @@ - + @{ - var transferToDriver = (TransferToDriver)context.DataItem; - @_cars.FirstOrDefault(x => x.Id == transferToDriver.CarId)?.LicencePlate + var transferToDriverDataItem = (TransferToDriver)context.DataItem; + @_cars.FirstOrDefault(x => x.Id == transferToDriverDataItem.CarId)?.LicencePlate } @@ -80,6 +92,7 @@ @* *@ - + @@ -122,18 +135,43 @@ *@ - + + + @{ + var price = string.Empty; + var transferToDriverDataItem = ((TransferToDriver)context.DataItem); + + if (HasReadPermission(transferToDriverDataItem.UserProductMappingId)) + price = transferToDriverDataItem.Price.ToString("N0"); + } + + @price + + + @* *@ - - + + @code { + /// + /// UserProductMappingId! Not required... + /// + [Parameter] public Guid? DriverId { get; set; } = null; [Parameter] public Guid ContextId { get; set; } [Parameter] public ITransferToDriversRelation ParentData { get; set; } = null!; [Parameter] public EventCallback OnTransferToDriverChanged { get; set; } + [Parameter] public bool CommandColumnVisible { get; set; } = true; + [Parameter] public bool NewButtonVisible { get; set; } = true; + [Parameter] public bool EditButtonVisible { get; set; } = true; + [Parameter] public bool DeleteButtonVisible { get; set; } = true; + + private bool _hasEditPermission = true; + private bool HasReadPermission(Guid userProductMappingId) => DriverId.IsNullOrEmpty() || DriverId == userProductMappingId; + private TransferToDriversDetailGrid _transferToDriversGrid = null!; private LoggerClient _logger = null!; @@ -146,27 +184,6 @@ _logger.Info($"DetailGridData: {ParentData.TransferToDrivers.Count}"); - // _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]) - 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(); - _drivers.Clear(); - - _cars.AddRange(response.ResponseData); - _drivers.AddRange(_cars.DistinctBy(x => x.UserProductMappingId).Select(x => x.UserProductMapping)); - - await InvokeAsync(StateHasChanged); - }, [TiamConstClient.TransferProductId]).Forget(); - await base.OnInitializedAsync(); } @@ -174,22 +191,37 @@ { if (firstRender) { - // _transferToDriversGrid.BeginUpdate(); - // _cars.AddRange((await AdminSignalRClient.GetAllAsync>(SignalRTags.GetAllCars))!); - // _transferToDriversGrid.EndUpdate(); - - // AdminSignalRClient.GetAllAsync>(SignalRTags.GetAllCars, response => - // { - // if (response is { Status: SignalResponseStatus.Success, ResponseData: not null }) - // _cars.AddRange(response.ResponseData); - - // return Task.CompletedTask; - // }).Forget(); + LoadComboBoxItems().Forget(); } await base.OnAfterRenderAsync(firstRender); } + void CustomizeEditModel(GridCustomizeEditModelEventArgs e) + { + if (!e.IsNew) + { + _hasEditPermission = HasReadPermission(((TransferToDriver)e.DataItem).UserProductMappingId); + return; + } + + _hasEditPermission = true; + + var newDriver = (TransferToDriver)e.EditModel; + newDriver.Id = Guid.NewGuid(); + newDriver.CarId = Guid.Empty; + newDriver.LicencePlate = ""; + newDriver.Car = new Car(); + newDriver.Price = 0; + newDriver.TransferId = ParentData.Id; + } + + private Task LoadComboBoxItems() + { + //TODO: CarModelDtoMin-t megcsinálni és azt lekérni a ComboBox-hoz! - J. + return AdminSignalRClient.GetAllCarsAndDriversByProductIdAsync(_cars, _drivers, TiamConstClient.TransferProductId, StateHasChanged); + } + private void DataItemChanged(GridDataItemChangedEventArgs args) { //ParentData?.TransferToDrivers?.UpdateCollection(args.DataItem, args.TrackingState == TrackingState.Remove); @@ -222,17 +254,4 @@ { _logger.Debug($"DataItemDeleting"); } - - void CustomizeEditModel(GridCustomizeEditModelEventArgs e) - { - if (!e.IsNew) return; - - var newDriver = (TransferToDriver)e.EditModel; - newDriver.Id = Guid.NewGuid(); - newDriver.CarId = Guid.Empty; - newDriver.LicencePlate = ""; - newDriver.Car = new Car(); - newDriver.Price = 0; - newDriver.TransferId = ParentData.Id; - } } \ No newline at end of file diff --git a/TIAMSharedUI/Pages/User/SysAdmins/UserProductMappingGridComponent.razor b/TIAMSharedUI/Pages/User/SysAdmins/UserProductMappingGridComponent.razor index 4b0963ca..88842114 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/UserProductMappingGridComponent.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/UserProductMappingGridComponent.razor @@ -17,6 +17,7 @@ @using AyCode.Models.Users @using AyCode.Services.SignalRs @using TIAM.Core.Consts +@using TIAM.Models.Dtos.Products @inject IServiceProviderDataService ServiceProviderDataService @inject IEnumerable LogWriters @inject AdminSignalRClient AdminSignalRClient @@ -24,6 +25,7 @@ @@ -63,15 +65,15 @@ var userProductMappingEditModel = (UserProductMapping)context.EditModel; } - - - + + @{ @@ -100,22 +102,32 @@ private bool? _isNewState = null; private LoggerClient _logger; - private static List _users = []; - private static List _products = []; - + private List _userProductMapping = []; //TODO: kell a UserProductMappingDetailGridComponent és utána ez is static lehet! - J. + private static List _userModelDtoEmails = []; + private static List _productModelDtoNames = []; + protected override async Task OnInitializedAsync() { _logger = new LoggerClient(LogWriters.ToArray()); - AdminSignalRClient.GetAllIntoAsync(_products, SignalRTags.GetAllProducts).Forget(); - AdminSignalRClient.GetAllIntoAsync(_users, SignalRTags.GetAllUsers).Forget(); - await base.OnInitializedAsync(); } + protected override void OnAfterRender(bool firstRender) + { + if (firstRender) + { + AdminSignalRClient.GetAllIntoAsync(_userModelDtoEmails, SignalRTags.GetAllUserModelDtoEmails).Forget(); + AdminSignalRClient.GetAllIntoAsync(_productModelDtoNames, SignalRTags.GetAllProductModelDtoNames).Forget(); + } + + base.OnAfterRender(firstRender); + } + void CustomizeEditModel(GridCustomizeEditModelEventArgs e) { _isNewState = e.IsNew; + if (!e.IsNew) return; // var newProductMapping = new UserProductMapping diff --git a/TIAMSharedUI/Shared/Components/Cards/CardBase.cs b/TIAMSharedUI/Shared/Components/Cards/CardBase.cs index 816ab1c5..e7cc258e 100644 --- a/TIAMSharedUI/Shared/Components/Cards/CardBase.cs +++ b/TIAMSharedUI/Shared/Components/Cards/CardBase.cs @@ -85,7 +85,13 @@ namespace TIAMSharedUI.Shared.Components.Cards return _dataSource!; } - set => _dataSourceParam = value; + set + { + _dataSourceParam = value; + + if (_dataSource != null! && _dataSourceParam is List workingReferenceList) + _dataSource.SetWorkingReferenceList(workingReferenceList); + } } protected override async Task OnInitializedAsync() @@ -125,7 +131,7 @@ namespace TIAMSharedUI.Shared.Components.Cards if (firstRender) { - if (_dataSourceParam.Count > 0) await _dataSource.LoadDataSource(_dataSourceParam); + if (_dataSourceParam != null!) await _dataSource.LoadDataSource(_dataSourceParam, true, true); else _dataSource.LoadDataSourceAsync(true).Forget(); } } diff --git a/TIAMSharedUI/Shared/Components/Grids/TiamGrid.cs b/TIAMSharedUI/Shared/Components/Grids/TiamGrid.cs index ba8a25f8..05ff2ce9 100644 --- a/TIAMSharedUI/Shared/Components/Grids/TiamGrid.cs +++ b/TIAMSharedUI/Shared/Components/Grids/TiamGrid.cs @@ -46,7 +46,7 @@ namespace TIAMSharedUI.Shared.Components.Grids if (_dataSource != null! && _dataSource.FilterText != value) { _dataSource.FilterText = value; - LoadDataSourceAsync().Forget(); + ReloadDataSourceAsync().Forget(); } } } @@ -89,7 +89,13 @@ namespace TIAMSharedUI.Shared.Components.Grids return _dataSource!; } - set => _dataSourceParam = value; + set + { + _dataSourceParam = value; + + if (_dataSource != null! && _dataSourceParam is List workingReferenceList) + _dataSource.SetWorkingReferenceList(workingReferenceList); + } } protected override async Task OnInitializedAsync() @@ -142,13 +148,13 @@ namespace TIAMSharedUI.Shared.Components.Grids protected override async Task OnAfterRenderAsync(bool firstRender) { - await base.OnAfterRenderAsync(firstRender); - if (firstRender) { - if (_dataSourceParam.Count > 0) await _dataSource.LoadDataSource(_dataSourceParam); + if (_dataSourceParam != null!) await _dataSource.LoadDataSource(_dataSourceParam, true, true); else _dataSource.LoadDataSourceAsync(true).Forget(); } + + await base.OnAfterRenderAsync(firstRender); } public Task AddDataItem(TDataItem dataItem) @@ -326,7 +332,7 @@ namespace TIAMSharedUI.Shared.Components.Grids return _dataSource.Remove(dataItem, true); } - public Task LoadDataSourceAsync() + public Task ReloadDataSourceAsync() { return _dataSource.LoadDataSourceAsync(false); } 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/Client/Services/WizardProcessor.cs b/TIAMWebApp/Client/Services/WizardProcessor.cs index 20a3e960..5d1e99b0 100644 --- a/TIAMWebApp/Client/Services/WizardProcessor.cs +++ b/TIAMWebApp/Client/Services/WizardProcessor.cs @@ -25,22 +25,22 @@ namespace TIAMWebApp.Client.Services { switch (type.Name) { - case "TransferDestinationWizardModel": + case nameof(TransferDestinationWizardModel): var result = await TransferDataService.CreateTransferDestination((TransferDestination)data); return result as TModelType; - case "TransferWizardModel": + case nameof(TransferWizardModel): Console.WriteLine(@"TransferWizardModel"); var transferResult = await TransferDataService.CreateTransfer((TransferWizardModel)data); return transferResult as TModelType; - case "MessageWizardModel": + case nameof(MessageWizardModel): EmailMessage emailMessage = ((MessageWizardModel)data).CopyToEmailMessage(); var messageResult = await MessageSenderService.SendNoticeAsync(emailMessage, 1); return messageResult as TModelType; - case "ServiceProvider": - return null; + //case nameof(ServiceProvider): + // return null; default: return null; } diff --git a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs index a8a1a548..d952596c 100644 --- a/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs +++ b/TIAMWebApp/Server/Controllers/ServiceProviderAPIController.cs @@ -19,6 +19,8 @@ using AyCode.Utils.Extensions; using TIAM.Entities.Drivers; using TIAM.Services; using TIAM.Entities.Products; +using TIAM.Models.Dtos.Products; +using TIAM.Models.Dtos.Users; namespace TIAMWebApp.Server.Controllers { @@ -309,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; @@ -455,6 +457,15 @@ namespace TIAMWebApp.Server.Controllers return products; } + [NonAction] + [SignalR(SignalRTags.GetAllProductModelDtoNames)] + public async Task> GetProductModelDtoNames() + { + _logger.Info("GetUserModelDtoEmails called"); + return await adminDal.GetProductModelDtoNamesAsync(); + } + + [AllowAnonymous] [HttpPost] [Route(APIUrls.GetProductByIdRouteName)] 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 b01aaf5c..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; @@ -15,15 +16,18 @@ using TIAM.Entities.Addresses; using TIAM.Services.Server.Logins; using ILogger = TIAM.Core.Loggers.ILogger; 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()); @@ -230,140 +234,79 @@ namespace TIAMWebApp.Server.Controllers } } - [AllowAnonymous] - [HttpPost] - [Route(APIUrls.UpdateUser)] - public async Task UpdateUser([FromBody] JsonElement SerializedUserModel) - { - _logger.Info("UpdateUser called"); - - 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] [HttpGet] [Route("GetUsers")] - public Task> GetUsers() + public async Task> GetUsers() { //var users = await _userDal.Ctx.Users.ToListAsync();//.GetUsersAsync(); //return users; - return userDal.GetAllUserModelDtoAsync(); + return await userDal.GetAllUserModelDtoAsync(); } [AllowAnonymous] [HttpGet] [Route(APIUrls.GetUsersWithDetailsRouteName)] - public Task> GetUsersWithDetails() + [SignalR(SignalRTags.GetAllUserModelDtoDetails)] + public async Task> GetUsersWithDetails() { _logger.Info("GetUsersWithDetails called"); - //var users = await _userDal.Ctx.Users.ToListAsync();//.GetUsersAsync(); - //return users; - return userDal.GetAllUserModelDtoAsync(); + + var users = await userDal.GetAllUserModelDtoAsync(); + return users; } [NonAction] @@ -371,26 +314,81 @@ namespace TIAMWebApp.Server.Controllers public async Task> GetAllUsers() { _logger.Info("GetAllUsers called"); - //var users = await _userDal.Ctx.Users.ToListAsync();//.GetUsersAsync(); - //return users; return await userDal.GetUsersAsync(); } + [NonAction] + [SignalR(SignalRTags.GetAllUserModelDtoEmails)] + 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; 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}")] public async Task? GetUserByEmail(string email) { _logger.Info($"GetUserByEmail called with email: {email}"); - var result = userDal.GetUserModelDtoByEmailAsync(email, false); - if (result.Result == null) + var result = await userDal.GetUserModelDtoByEmailAsync(email, false); + if (result == null) { UserModelDto resultDto = new UserModelDto(); return resultDto; } else { - return result.Result; + return result; } } @@ -398,10 +396,10 @@ namespace TIAMWebApp.Server.Controllers [AllowAnonymous] [HttpPost] [Route("GetUserById")] - public Task GetUserById([FromBody] Guid id) + public async Task GetUserById([FromBody] Guid id) { _logger.Info($"GetUserById called with id: {id}"); - return userDal.GetUserModelDtoByIdAsync(id, true); + return await userDal.GetUserModelDtoByIdAsync(id, true); } [AllowAnonymous] 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 } }