This commit is contained in:
Adam 2024-07-07 17:15:10 +02:00
commit efeedff96e
34 changed files with 722 additions and 329 deletions

View File

@ -31,6 +31,7 @@ using DevExpress.Data.Linq.Helpers;
using TIAM.Database.DbSets.Drivers; using TIAM.Database.DbSets.Drivers;
using AyCode.Entities.Server.LogItems; using AyCode.Entities.Server.LogItems;
using AyCode.Interfaces.Entities; using AyCode.Interfaces.Entities;
using TIAM.Models.Dtos.Users;
namespace TIAM.Database.DataLayers.Admins namespace TIAM.Database.DataLayers.Admins
{ {
@ -41,7 +42,6 @@ namespace TIAM.Database.DataLayers.Admins
} }
#region Car #region Car
public Task<List<Car>> GetAllCarsAsync() => SessionAsync(ctx => ctx.Cars.OrderBy(x => x.Manufacture).ThenBy(x => x.CarModel).ToList()); public Task<List<Car>> GetAllCarsAsync() => SessionAsync(ctx => ctx.Cars.OrderBy(x => x.Manufacture).ThenBy(x => x.CarModel).ToList());
public Task<List<Car>> GetAllCarsbyProductIdAsync(Guid productId) => SessionAsync(ctx => ctx.Cars.Where(x => x.UserProductMapping.ProductId == productId).OrderBy(x => x.Manufacture).ThenBy(x => x.CarModel).ToList()); public Task<List<Car>> 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)); 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<List<Transfer>> GetTransfersAsync() => SessionAsync(ctx => ctx.GetTransfers().OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToList()); public Task<List<Transfer>> GetTransfersAsync() => SessionAsync(ctx => ctx.GetTransfers().OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToList());
public Task<string> GetTransfersJsonAsync() => SessionAsync(ctx => ctx.GetTransfers().OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToJson()); public Task<string> GetTransfersJsonAsync() => SessionAsync(ctx => ctx.GetTransfers().OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToJson());
public Task<List<Transfer>> GetTransfersByUserIdAsync(Guid userId) => SessionAsync(ctx => ctx.GetTransfersByUserId(userId).OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToList());
public Task<string> GetTransfersByUserIdJsonAsync(Guid userId) => SessionAsync(ctx => ctx.GetTransfersByUserId(userId).OrderBy(x => x.TransferStatusType).ThenByDescending(x => x.OrderId).ToJson()); public Task<string> 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 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 Transfer? GetTransferById(Guid transferId) => Session(ctx => ctx.GetTransferById(transferId));
public Task<Transfer?> GetTransferByIdAsync(Guid transferId) => SessionAsync(ctx => ctx.GetTransferById(transferId));
public string? GetTransferJsonById(Guid transferId) => Session(ctx => ctx.GetTransferById(transferId)?.ToJson()); public string? GetTransferJsonById(Guid transferId) => Session(ctx => ctx.GetTransferById(transferId)?.ToJson());
public Task<bool> AddTransferAsync(Transfer transfer) => TransactionAsync(ctx => ctx.AddTransfer(transfer)); public Task<bool> 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 string GetUsersJson() => Session(ctx => ctx.Users.ToJson());
public Task<bool> AddUserAsync(User user) => TransactionAsync(ctx => ctx.AddUser(user)); public Task<bool> AddUserAsync(User user) => TransactionAsync(ctx => ctx.AddUser(user));
public Task<bool> UpdateUserAsync(User user) => TransactionAsync(ctx => ctx.UpdateUser(user)); public Task<User?> UpdateUserAsync(User user) => UpdateSafeAsync(user);
public Task<bool> RemoveUserAsync(Guid userId) => TransactionAsync(ctx => ctx.RemoveUser(userId)); public Task<bool> 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 Product? GetProductById(Guid contextId, bool includeUsers = true) => Session(ctx => ctx.GetProductById(contextId, includeUsers));
public Task<Product?> GetProductByIdAsync(Guid contextId, bool includeUsers = true) => SessionAsync(ctx => ctx.GetProductById(contextId, includeUsers)); public Task<Product?> GetProductByIdAsync(Guid contextId, bool includeUsers = true) => SessionAsync(ctx => ctx.GetProductById(contextId, includeUsers));
public Task<List<ProductModelDtoName>> GetProductModelDtoNamesAsync() => SessionAsync(ctx => ctx.Products.Select(x => new ProductModelDtoName(x)).ToList());
public string GetProductsJson(bool includeUsers = true) => Session(ctx => ctx.ProductsWithUserRelations(includeUsers).ToJson()); public string GetProductsJson(bool includeUsers = true) => Session(ctx => ctx.ProductsWithUserRelations(includeUsers).ToJson());
public List<Product> GetProductsByServiceProviderId(Guid serviceProviderId, bool includeUsers = true) => Session(ctx => ctx.GetProductsByCompanyId(serviceProviderId, includeUsers).ToList()); public List<Product> 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()); 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<Product?> UpdateProductAsync(Product product) => UpdateSafeAsync(product, (ctx, safeProduct) => ctx.UpdateProduct(safeProduct)); public Task<Product?> UpdateProductAsync(Product product) => UpdateSafeAsync(product, (ctx, safeProduct) => ctx.UpdateProduct(safeProduct));
public Task<bool> RemoveProductAsync(Product product) => RemoveProductAsync(product.Id); public Task<bool> RemoveProductAsync(Product product) => RemoveProductAsync(product.Id);
public Task<bool> RemoveProductAsync(Guid productId) => TransactionAsync(ctx => ctx.RemoveProduct(productId)); public Task<bool> 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 UserProductMapping? GetUserProductMappingById(Guid userProductMappingId, bool autoInclude = true) => Session(ctx => ctx.GetUserProductMappingById(userProductMappingId, autoInclude));
public Task<UserProductMapping?> GetUserProductMappingByIdAsync(Guid userProductMappingId, bool autoInclude = true) => SessionAsync(ctx => ctx.GetUserProductMappingById(userProductMappingId, autoInclude)); public Task<UserProductMapping?> GetUserProductMappingByIdAsync(Guid userProductMappingId, bool autoInclude = true) => SessionAsync(ctx => ctx.GetUserProductMappingById(userProductMappingId, autoInclude));

View File

@ -1,4 +1,5 @@
using AyCode.Database.DataLayers.Users; using AyCode.Database.DataLayers.Users;
using AyCode.Database.DbSets.Users;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using TIAM.Database.DbContexts.Users; using TIAM.Database.DbContexts.Users;
using TIAM.Entities.Addresses; using TIAM.Entities.Addresses;
@ -6,6 +7,7 @@ using TIAM.Entities.Emails;
using TIAM.Entities.Profiles; using TIAM.Entities.Profiles;
using TIAM.Entities.ServiceProviders; using TIAM.Entities.ServiceProviders;
using TIAM.Entities.Users; using TIAM.Entities.Users;
using TIAM.Models.Dtos.Users;
namespace TIAM.Database.DataLayers.Users namespace TIAM.Database.DataLayers.Users
{ {
@ -20,6 +22,27 @@ namespace TIAM.Database.DataLayers.Users
{ {
} }
public Task<List<UserModelDtoEmail>> GetUserModelDtoEmailsAsync() => SessionAsync(ctx => ctx.Users.Select(x => new UserModelDtoEmail(x)).ToList());
public override Task<User?> UpdateUserAsync(User user) => base.UpdateSafeAsync(user);
public async Task<UserModelDtoDetail?> 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>(userModelDtoDetail.Id, false);
}
public async Task<UserModelDtoDetail?> AddUserModelDtoDetailAsync(UserModelDtoDetail userModelDtoDetail)
{
var user = new User();
userModelDtoDetail.CopyUserDtoValuesToUser(user);
return await AddUserAsync(user) ? await GetUserModelDtoByIdAsync<UserModelDtoDetail>(userModelDtoDetail.Id, false) : null;
}
public async Task<bool> CreateUserAsync(User user) public async Task<bool> CreateUserAsync(User user)
{ {
Context.Users.Add(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}"); Console.WriteLine($@"Saving user to db {user.Id}, {user.EmailAddress}, {user.PhoneNumber}, {user.Password}");
return await Context.SaveChangesAsync() > 0; return await Context.SaveChangesAsync() > 0;
} }
public async Task<bool> 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");
}
}
} }
} }

View File

@ -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;
}
}

View File

@ -1,5 +1,6 @@
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using AyCode.Core.Interfaces;
using AyCode.Interfaces; using AyCode.Interfaces;
using AyCode.Models.Users; using AyCode.Models.Users;
using TIAM.Entities.Products; using TIAM.Entities.Products;

View File

@ -50,6 +50,8 @@ namespace TIAM.Models.Dtos.Users
} }
} }
public void CopyUserDtoValuesToUser(User user) => base.CopyUserDtoValuesToUser(user);
public virtual User CreateMainEntity() public virtual User CreateMainEntity()
{ {
//TODO: Models... - J. //TODO: Models... - J.

View File

@ -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;
}
}

View File

@ -25,9 +25,9 @@ public class LoginService(UserDal userDal, IConfiguration configuration) : AcLog
return base.Logout(); return base.Logout();
} }
public override Task<AcErrorCode> RegistrationAsync(string email, string password, string? phoneNumber = null) public override Task<AcErrorCode> RegistrationAsync(string email, string password, string? phoneNumber = null, Guid? referralId = null)
{ {
return base.RegistrationAsync(email, password, phoneNumber); return base.RegistrationAsync(email, password, phoneNumber, referralId);
} }
} }

View File

@ -60,4 +60,8 @@
</Reference> </Reference>
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Interfaces\" />
</ItemGroup>
</Project> </Project>

View File

@ -0,0 +1,5 @@
namespace TIAM.Services.Interfaces;
public interface ITransferApiControllerClient : IUserApiControllerCommon
{
}

View File

@ -0,0 +1,42 @@
using TIAM.Entities.Transfers;
using TIAM.Entities.Users;
namespace TIAM.Services.Interfaces;
public interface ITransferApiControllerCommon
{
#region Transfers
public Task<List<Transfer>> GetTransfers();
public Task<List<Transfer>> GetTransfersByFilterText(string criteriaOperatorText);
public Task<List<Transfer>> GetTransfersByUserId(Guid userId);
public Task<string> GetTransfersByDriverId(Guid userProductMappingId);
public Task<Transfer?> GetTransferById(Guid transferId);
public Task<Transfer?> UpdateTransfer(Transfer transfer);
public Task<Transfer?> RemoveTransfer(Transfer transfer);
#endregion Transfers
#region Drivers
public Task<List<UserProductMapping>> GetAllDrivers();
public Task<List<UserProductMapping>> GetAllDriversByProductId(Guid productId);
public Task<TransferToDriver?> GetTransferDriver(Guid transferDriverId);
public Task<List<TransferToDriver>> GetTransferDrivers(Guid transferId);
public Task<TransferToDriver?> AddTransferDriver(TransferToDriver transferToDriver);
public Task<TransferToDriver?> UpdateTransferDriver(TransferToDriver transferToDriver);
public Task<TransferToDriver?> RemoveTransferDriver(TransferToDriver transferToDriver);
#endregion Drivers
#region TransferDestination
public List<TransferDestination> GetTransferDestinations();
public Task<TransferDestination?> GetTransferDestinationById(Guid transferDestinationId);
public Task<TransferDestination?> CreateTransferDestination(TransferDestination transferDestination);
public Task<TransferDestination?> UpdateTransferDestination(TransferDestination transferDestination);
public Task<TransferDestination?> RemoveTransferDestination(TransferDestination transferDestination);
public Task<List<TransferDestinationToProduct>> GetAllTransferDestinationToProducts();
public Task<List<TransferDestinationToProduct>> GetTransferDestinationToProductsByProductId(Guid productId);
public Task<List<TransferDestinationToProduct>> GetTransferDestinationToProductsByTransferDestinationId(Guid transferDestinationId);
public Task<TransferDestinationToProduct?> GetTransferDestinationToProductById(Guid transferDestinationToProductId);
public Task<TransferDestinationToProduct?> CreateTransferDestinationToProduct(TransferDestinationToProduct transferDestinationToProduct);
public Task<TransferDestinationToProduct?> UpdateTransferDestinationToProduct(TransferDestinationToProduct transferDestinationToProduct);
public Task<TransferDestinationToProduct?> RemoveTransferDestinationToProduct(TransferDestinationToProduct transferDestinationToProduct);
#endregion TransferDestination
}

View File

@ -0,0 +1,5 @@
namespace TIAM.Services.Interfaces;
public interface IUserApiControllerClient : IUserApiControllerCommon
{
}

View File

@ -0,0 +1,10 @@
using TIAM.Entities.Users;
using TIAM.Models.Dtos.Users;
namespace TIAM.Services.Interfaces;
public interface IUserApiControllerCommon
{
public Task<User?> UpdateUser(User user);
public Task<UserModelDtoDetail?> UpdateUserModelDtoDetail(UserModelDtoDetail userModelDtoDetail);
}

View File

@ -85,6 +85,8 @@ public class SignalRTags : AcSignalRTags
public const int RemoveProduct = 75; public const int RemoveProduct = 75;
public const int GetProductsById = 76; public const int GetProductsById = 76;
public const int GetAllProducts = 77; public const int GetAllProducts = 77;
public const int GetAllProductModelDtoNames = 78;
public const int GetTransferDestinationById = 80; public const int GetTransferDestinationById = 80;
public const int GetAllTransferDestinations = 81; public const int GetAllTransferDestinations = 81;
@ -101,6 +103,12 @@ public class SignalRTags : AcSignalRTags
public const int GetTransferDestinationToProductsByTransferDestinationId = 96; public const int GetTransferDestinationToProductsByTransferDestinationId = 96;
public const int GetAllUsers = 120; 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; public const int GetAllLogItemsByFilterText = 1000;
} }

View File

@ -9,6 +9,8 @@
@using TIAMSharedUI.Pages.Components; @using TIAMSharedUI.Pages.Components;
@using TIAMSharedUI.Shared @using TIAMSharedUI.Shared
@using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels @using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels
@using AyCode.Core.Helpers
@using AyCode.Core.Consts
@inject NavigationManager NavManager @inject NavigationManager NavManager
@inject IUserDataService UserDataService; @inject IUserDataService UserDataService;
@inject IJSRuntime jsRuntime; @inject IJSRuntime jsRuntime;
@ -461,10 +463,12 @@ new HeroSliderItem
{ {
//if not, create user //if not, create user
Random random = new Random(); // Random random = new Random();
string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; // string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
string password = new string(Enumerable.Repeat(chars, 10) // string password = new string(Enumerable.Repeat(chars, 10)
.Select(s => s[random.Next(s.Length)]).ToArray()); // .Select(s => s[random.Next(s.Length)]).ToArray());
var password = AcCharsGenerator.NewPassword(AcConst.MinPasswordLength, 16);
RegistrationModel regModel = new RegistrationModel RegistrationModel regModel = new RegistrationModel
{ {

View File

@ -32,33 +32,31 @@
<Animation Effect="@Effect.FadeInUp" Speed="@Speed.Fast" Delay="@TimeSpan.FromMilliseconds(250)"> <Animation Effect="@Effect.FadeInUp" Speed="@Speed.Fast" Delay="@TimeSpan.FromMilliseconds(250)">
<div class="card"> <div class="card">
<div class="d-flex flex-column mb-4 pb-2"> <div class="d-flex flex-column mb-4 pb-2">
<CarDetailGridComponent DetailExpandButtonDisplayMode="GridDetailExpandButtonDisplayMode.Auto" ContextId="driverId" GetAllTag="SignalRTags.GetCarsForUserProductMapping"></CarDetailGridComponent>
<CarGridComponent ContextId="DriverId" GetAllTag="SignalRTags.GetCarsForUserProductMapping"
NewButtonVisible="true" DeleteButtonVisible="false" EditButtonVisible="true" DetailExpandButtonDisplayMode="GridDetailExpandButtonDisplayMode.Never" />
</div> </div>
</div> </div>
</Animation> </Animation>
</div> </div>
<div class=" col-12 col-xl-6"> <div class=" col-12 col-xl-6">
</div> </div>
</div> </div>
</div> </div>
@code { @code {
[Parameter] public Guid driverId { get; set; } [Parameter] public Guid DriverId { get; set; }
private LoggerClient<DriverManageCars> _logger; private LoggerClient<DriverManageCars> _logger;
protected override async Task OnInitializedAsync()
{ protected override void OnInitialized()
{
_logger = new LoggerClient<DriverManageCars>(LogWriters.ToArray()); _logger = new LoggerClient<DriverManageCars>(LogWriters.ToArray());
base.OnInitialized(); base.OnInitialized();
} }

View File

@ -100,7 +100,7 @@
ShowFilterRow="true"> ShowFilterRow="true">
<Columns> <Columns>
<DxGridCommandColumn NewButtonVisible="false" DeleteButtonVisible="AcDomain.IsDeveloperVersion" Width="80" MinWidth="80" FixedPosition="GridColumnFixedPosition.Left" /> <DxGridCommandColumn Visible="false" Width="80" MinWidth="80" FixedPosition="GridColumnFixedPosition.Left" />
<DxGridDataColumn FieldName="Id" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" /> <DxGridDataColumn FieldName="Id" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" />
<DxGridDataColumn FieldName="OrderId" Caption="Order" SortIndex="1" SortOrder="GridColumnSortOrder.Descending" Width="70"> <DxGridDataColumn FieldName="OrderId" Caption="Order" SortIndex="1" SortOrder="GridColumnSortOrder.Descending" Width="70">
<CellDisplayTemplate> <CellDisplayTemplate>
@ -150,11 +150,15 @@
</Columns> </Columns>
<DetailRowTemplate> <DetailRowTemplate>
<DxTabs> <DxTabs>
@{
var transfer = ((Transfer)context.DataItem);
}
<DxTabPage Text="Messages"> <DxTabPage Text="Messages">
<MessageDetailGridComponent ContextId="((Transfer)context.DataItem).Id" /> <MessageDetailGridComponent ContextId="transfer.Id" />
</DxTabPage> </DxTabPage>
<DxTabPage Text="Driver"> <DxTabPage Text="Driver">
<TransferToDriverGridComponent ContextId="((Transfer)context.DataItem).Id" ParentData="(Transfer)context.DataItem" /> <TransferToDriverGridComponent ContextId="transfer.Id" ParentData="transfer" DriverId="driverId" NewButtonVisible="false" DeleteButtonVisible="false" />
</DxTabPage> </DxTabPage>
</DxTabs> </DxTabs>
</DetailRowTemplate> </DetailRowTemplate>

View File

@ -50,10 +50,10 @@
</Columns> </Columns>
<DetailRowTemplate> <DetailRowTemplate>
@{ @{
// TODO: ide max a transferek kellenek, nem a UserProductMapping! - J.
<DxTabs> <DxTabs>
<DxTabPage Text="Driving permissions assigned"> <DxTabPage Text="Driving permissions assigned">
<UserProductMappingGridComponent GetAllTag="SignalRTags.GetUserProductMappingsById" ContextIds="new[] { ((Car)context.DataItem).UserProductMappingId }" /> <UserProductMappingGridComponent GetAllTag="SignalRTags.GetUserProductMappingsById" ContextIds="new[] { ((Car)context.DataItem).UserProductMappingId }"/>
</DxTabPage> </DxTabPage>
</DxTabs> </DxTabs>

View File

@ -20,6 +20,7 @@
<CarGrid Logger="_logger" <CarGrid Logger="_logger"
GetAllMessageTag="GetAllTag" GetAllMessageTag="GetAllTag"
ContextIds="@(ContextId.IsNullOrEmpty() ? null : [ContextId])"
SignalRClient="AdminSignalRClient" SignalRClient="AdminSignalRClient"
PageSize="10" PageSize="10"
ValidationEnabled="false" ValidationEnabled="false"
@ -29,7 +30,8 @@
DetailExpandButtonDisplayMode="DetailExpandButtonDisplayMode" DetailExpandButtonDisplayMode="DetailExpandButtonDisplayMode"
ShowFilterRow="true"> ShowFilterRow="true">
<Columns> <Columns>
<DxGridCommandColumn NewButtonVisible="false" DeleteButtonVisible="false" Width="135" MinWidth="135" FixedPosition="GridColumnFixedPosition.Left" /> <DxGridCommandColumn Width="135" MinWidth="135" FixedPosition="GridColumnFixedPosition.Left"
Visible="CommandColumnVisible" NewButtonVisible="NewButtonVisible" EditButtonVisible="EditButtonVisible" DeleteButtonVisible="DeleteButtonVisible" />
<DxGridDataColumn FieldName="Id" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" /> <DxGridDataColumn FieldName="Id" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" />
<DxGridDataColumn FieldName="UserProductMappingId" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" /> <DxGridDataColumn FieldName="UserProductMappingId" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" />
@{ @{
@ -49,13 +51,12 @@
</Columns> </Columns>
<DetailRowTemplate> <DetailRowTemplate>
@{ @{
// TODO: ide max a transferek kellenek, nem a UserProductMapping! - J.
<DxTabs> <DxTabs>
<DxTabPage Text="Driving permissions assigned"> <DxTabPage Text="Driving permissions assigned">
<UserProductMappingGridComponent GetAllTag="SignalRTags.GetUserProductMappingsById" ContextIds="new[] { ((Car)context.DataItem).UserProductMappingId }" <UserProductMappingGridComponent GetAllTag="SignalRTags.GetUserProductMappingsById" ContextIds="new[] { ((Car)context.DataItem).UserProductMappingId }"
CommandColumnVisible="false" /> CommandColumnVisible="false" />
</DxTabPage> </DxTabPage>
</DxTabs> </DxTabs>
} }
</DetailRowTemplate> </DetailRowTemplate>
@ -95,10 +96,16 @@
</CarGrid> </CarGrid>
@code { @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 int GetAllTag { get; set; } = SignalRTags.GetAllCars;
[Parameter] public GridDetailExpandButtonDisplayMode DetailExpandButtonDisplayMode { get; set; } = GridDetailExpandButtonDisplayMode.Never; [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<CarGridComponent> _logger = null!; private LoggerClient<CarGridComponent> _logger = null!;
protected override void OnInitialized() protected override void OnInitialized()

View File

@ -168,7 +168,7 @@
_takeCount = value; _takeCount = value;
_contextParams[0] = _takeCount; _contextParams[0] = _takeCount;
await _logViewerGrid.LoadDataSourceAsync(); await _logViewerGrid.ReloadDataSourceAsync();
} }
private async Task OnValueChangedStartDate(DateTime value) private async Task OnValueChangedStartDate(DateTime value)
@ -181,7 +181,7 @@
_contextParams[1] = _fromDate; _contextParams[1] = _fromDate;
if (_fromDate.Date > _toDate.Date) return; if (_fromDate.Date > _toDate.Date) return;
await _logViewerGrid.LoadDataSourceAsync(); await _logViewerGrid.ReloadDataSourceAsync();
} }
private async Task OnValueChangedEndDate(DateTime value) private async Task OnValueChangedEndDate(DateTime value)
@ -192,7 +192,7 @@
_contextParams[2] = _toDate; _contextParams[2] = _toDate;
if (_fromDate.Date > _toDate.Date) return; if (_fromDate.Date > _toDate.Date) return;
await _logViewerGrid.LoadDataSourceAsync(); await _logViewerGrid.ReloadDataSourceAsync();
} }
void Grid_CustomizeElement(GridCustomizeElementEventArgs e) void Grid_CustomizeElement(GridCustomizeElementEventArgs e)

View File

@ -10,6 +10,8 @@
@using TIAMWebApp.Shared.Application.Models.PageModels @using TIAMWebApp.Shared.Application.Models.PageModels
@using TIAMWebApp.Shared.Application.Utility @using TIAMWebApp.Shared.Application.Utility
@using AyCode.Services.Loggers @using AyCode.Services.Loggers
@using AyCode.Core.Helpers
@using AyCode.Core.Consts
@layout AdminLayout @layout AdminLayout
@inject IEnumerable<IAcLogWriterClientBase> LogWriters @inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject IStringLocalizer<TIAMResources> Localizer @inject IStringLocalizer<TIAMResources> Localizer
@ -119,11 +121,13 @@
var registration = new RegistrationModel(); var registration = new RegistrationModel();
//TODO: Refractor to userDataService //TODO: Refractor to userDataService
var random = new Random(); // var random = new Random();
const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; // const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
var password = new string(Enumerable.Repeat(chars, 10) // var password = new string(Enumerable.Repeat(chars, 10)
.Select(s => s[random.Next(s.Length)]).ToArray()); // .Select(s => s[random.Next(s.Length)]).ToArray());
var password = AcCharsGenerator.NewPassword(AcConst.MinPasswordLength, 16);
registration.Email = userModelDtoDetail.UserDto.EmailAddress; registration.Email = userModelDtoDetail.UserDto.EmailAddress;
registration.PhoneNumber = userModelDtoDetail.UserDto.PhoneNumber; registration.PhoneNumber = userModelDtoDetail.UserDto.PhoneNumber;
registration.Password = password; registration.Password = password;

View File

@ -10,6 +10,8 @@
@using TIAMWebApp.Shared.Application.Models.PageModels @using TIAMWebApp.Shared.Application.Models.PageModels
@using TIAMWebApp.Shared.Application.Utility @using TIAMWebApp.Shared.Application.Utility
@using AyCode.Services.Loggers @using AyCode.Services.Loggers
@using AyCode.Core.Helpers
@using AyCode.Core.Consts
@layout AdminLayout @layout AdminLayout
@inject IEnumerable<IAcLogWriterClientBase> LogWriters @inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject IStringLocalizer<TIAMResources> Localizer @inject IStringLocalizer<TIAMResources> Localizer
@ -100,10 +102,12 @@
var registration = new RegistrationModel(); var registration = new RegistrationModel();
//TODO: Refractor to userDataService //TODO: Refractor to userDataService
var random = new Random(); // var random = new Random();
const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; // const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
var password = new string(Enumerable.Repeat(chars, 10) // var password = new string(Enumerable.Repeat(chars, 10)
.Select(s => s[random.Next(s.Length)]).ToArray()); // .Select(s => s[random.Next(s.Length)]).ToArray());
var password = AcCharsGenerator.NewPassword(AcConst.MinPasswordLength, 16);
registration.Email = userModelDtoDetail.UserDto.EmailAddress; registration.Email = userModelDtoDetail.UserDto.EmailAddress;
registration.PhoneNumber = userModelDtoDetail.UserDto.PhoneNumber; registration.PhoneNumber = userModelDtoDetail.UserDto.PhoneNumber;

View File

@ -10,6 +10,8 @@
@using TIAMWebApp.Shared.Application.Models.PageModels @using TIAMWebApp.Shared.Application.Models.PageModels
@using TIAMWebApp.Shared.Application.Utility @using TIAMWebApp.Shared.Application.Utility
@using AyCode.Services.Loggers @using AyCode.Services.Loggers
@using AyCode.Core.Helpers
@using AyCode.Core.Consts
@layout AdminLayout @layout AdminLayout
@inject IEnumerable<IAcLogWriterClientBase> LogWriters @inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject IStringLocalizer<TIAMResources> Localizer @inject IStringLocalizer<TIAMResources> Localizer
@ -119,10 +121,12 @@
var registration = new RegistrationModel(); var registration = new RegistrationModel();
//TODO: Refractor to userDataService //TODO: Refractor to userDataService
var random = new Random(); // var random = new Random();
const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; // const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
var password = new string(Enumerable.Repeat(chars, 10) // var password = new string(Enumerable.Repeat(chars, 10)
.Select(s => s[random.Next(s.Length)]).ToArray()); // .Select(s => s[random.Next(s.Length)]).ToArray());
var password = AcCharsGenerator.NewPassword(AcConst.MinPasswordLength, 16);
registration.Email = userModelDtoDetail.UserDto.EmailAddress; registration.Email = userModelDtoDetail.UserDto.EmailAddress;
registration.PhoneNumber = userModelDtoDetail.UserDto.PhoneNumber; registration.PhoneNumber = userModelDtoDetail.UserDto.PhoneNumber;

View File

@ -11,12 +11,17 @@
@using TIAMWebApp.Shared.Application.Utility @using TIAMWebApp.Shared.Application.Utility
@using AyCode.Services.Loggers @using AyCode.Services.Loggers
@using AyCode.Core @using AyCode.Core
@using AyCode.Core.Consts
@using AyCode.Core.Extensions
@using AyCode.Core.Helpers
@using TIAMWebApp.Shared.Application.Services
@layout AdminLayout @layout AdminLayout
@inject IEnumerable<IAcLogWriterClientBase> LogWriters @inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject IStringLocalizer<TIAMResources> Localizer @inject IStringLocalizer<TIAMResources> Localizer
@inject ISessionService SessionService @inject ISessionService SessionService
@inject IWizardProcessor WizardProcessor @inject IWizardProcessor WizardProcessor
@inject IUserDataService UserDataService @inject IUserDataService UserDataService
@inject AdminSignalRClient AdminSignalRClient;
<PageTitle>Users</PageTitle> <PageTitle>Users</PageTitle>
<div class="text-center m-5"> <div class="text-center m-5">
@ -72,17 +77,17 @@
EditMode="GridEditMode.EditForm" EditMode="GridEditMode.EditForm"
ColumnResizeMode="GridColumnResizeMode.NextColumn" ColumnResizeMode="GridColumnResizeMode.NextColumn"
PageSize="15" PageSize="15"
TextWrapEnabled="false" TextWrapEnabled = "false"
AllowSelectRowByClick="true" AllowSelectRowByClick = "true"
HighlightRowOnHover="true" HighlightRowOnHover = "true"
AutoCollapseDetailRow="true" AutoCollapseDetailRow = "true"
AutoExpandAllGroupRows="false" AutoExpandAllGroupRows = "false"
ShowFilterRow="true"> ShowFilterRow="true">
<Columns> <Columns>
<DxGridCommandColumn Width="135" MinWidth="135" FixedPosition="GridColumnFixedPosition.Left" /> <DxGridCommandColumn Width="135" MinWidth="135" FixedPosition="GridColumnFixedPosition.Left"/>
<DxGridDataColumn Caption="@Localizer.GetString("Id")" FieldName="Id" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" /> <DxGridDataColumn Caption="@Localizer.GetString("Id")" FieldName="Id" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N"/>
<DxGridDataColumn Caption="@Localizer.GetString("FullName")" FieldName="ProfileDto.FullName" /> <DxGridDataColumn Caption="@Localizer.GetString("FullName")" FieldName="ProfileDto.FullName"/>
<DxGridDataColumn Caption="@Localizer.GetString("PhoneNumber")" FieldName="UserDto.PhoneNumber" /> <DxGridDataColumn Caption="@Localizer.GetString("PhoneNumber")" FieldName="UserDto.PhoneNumber"/>
<DxGridDataColumn Caption="@Localizer.GetString("RefferalId")" FieldName="UserDto.RefferalId" /> <DxGridDataColumn Caption="@Localizer.GetString("RefferalId")" FieldName="UserDto.RefferalId" />
<DxGridDataColumn Caption="@Localizer.GetString("EmailConfirmed")" FieldName="UserDto.EmailConfirmed" Width="120" CaptionAlignment="GridTextAlignment.Center" TextAlignment="GridTextAlignment.Center" /> <DxGridDataColumn Caption="@Localizer.GetString("EmailConfirmed")" FieldName="UserDto.EmailConfirmed" Width="120" CaptionAlignment="GridTextAlignment.Center" TextAlignment="GridTextAlignment.Center" />
<DxGridDataColumn Caption="@Localizer.GetString("EmailAddress")" Width="240" FieldName="UserDto.EmailAddress" SortIndex="0" /> <DxGridDataColumn Caption="@Localizer.GetString("EmailAddress")" Width="240" FieldName="UserDto.EmailAddress" SortIndex="0" />
@ -93,7 +98,7 @@
var keyItem = (UserModelDtoDetail)context.DataItem; var keyItem = (UserModelDtoDetail)context.DataItem;
var buttonText = "Contact"; var buttonText = "Contact";
<DxButton Click="() => SendMail(keyItem)" IconCssClass="btn-icon-envelope" Text="@buttonText" RenderStyle="ButtonRenderStyle.Primary" /> <DxButton Click="() => SendMail(keyItem)" IconCssClass="btn-icon-envelope" Text="@buttonText" RenderStyle="ButtonRenderStyle.Primary"/>
} }
</CellDisplayTemplate> </CellDisplayTemplate>
</DxGridDataColumn> </DxGridDataColumn>
@ -115,25 +120,25 @@
<UserProductMappingGridComponent GetAllTag="SignalRTags.GetUserProductMappingsByUserId" ContextIds="new [] {((UserModelDtoDetail)context.DataItem).Id}" /> <UserProductMappingGridComponent GetAllTag="SignalRTags.GetUserProductMappingsByUserId" ContextIds="new [] {((UserModelDtoDetail)context.DataItem).Id}" />
</DxTabPage> </DxTabPage>
</DxTabs> </DxTabs>
</DetailRowTemplate> </DetailRowTemplate>
<EditFormTemplate Context="EditFormContext"> <EditFormTemplate Context="editFormContext">
@{ @{
var transfer2 = (UserModelDtoDetail)EditFormContext.EditModel; var transfer2 = (UserModelDtoDetail)editFormContext.EditModel;
} }
<DxFormLayout CssClass="w-100 form-control"> <DxFormLayout CssClass="w-100 form-control">
<DxFormLayoutItem Caption=@Localizer.GetString(ResourceKeys.EmailAddress) ColSpanMd="4"> <DxFormLayoutItem Caption=@Localizer.GetString(ResourceKeys.EmailAddress) ColSpanMd="4">
@EditFormContext.GetEditor("UserDto.EmailAddress") @editFormContext.GetEditor("UserDto.EmailAddress")
</DxFormLayoutItem> </DxFormLayoutItem>
<DxFormLayoutItem Caption=@Localizer.GetString(ResourceKeys.ConfirmEmail) ColSpanMd="4"> <DxFormLayoutItem Caption=@Localizer.GetString(ResourceKeys.ConfirmEmail) ColSpanMd="4">
@EditFormContext.GetEditor("UserDto.EmailConfirmed") @editFormContext.GetEditor("UserDto.EmailConfirmed")
</DxFormLayoutItem> </DxFormLayoutItem>
<DxFormLayoutItem Caption=@Localizer.GetString(ResourceKeys.PhoneNumber) ColSpanMd="4"> <DxFormLayoutItem Caption=@Localizer.GetString(ResourceKeys.PhoneNumber) ColSpanMd="4">
@EditFormContext.GetEditor("UserDto.PhoneNumber") @editFormContext.GetEditor("UserDto.PhoneNumber")
</DxFormLayoutItem> </DxFormLayoutItem>
</DxFormLayout> </DxFormLayout>
</EditFormTemplate> </EditFormTemplate>
@ -156,7 +161,7 @@
private LoggerClient<ManageUsers> _logger; private LoggerClient<ManageUsers> _logger;
//public UserModelDtoDetail UserModelDtoDetail = new(); //public UserModelDtoDetail UserModelDtoDetail = new();
public List<UserModelDtoDetail> UserData { get; set; } public List<UserModelDtoDetail> UserData { get; set; } = null!;
bool PopupVisible { get; set; } = false; bool PopupVisible { get; set; } = false;
@ -164,15 +169,15 @@
//object? MasterGridData { get; set; } //object? MasterGridData { get; set; }
public List<string> IgnoreList = public List<string> IgnoreList =
[ [
nameof(MessageWizardModel.ReceiverEmailAddress), "ReceiverEmailAddress",
nameof(MessageWizardModel.ReceiverFullName), "ReceiverFullName",
nameof(MessageWizardModel.ReceiverId), "ReceiverId",
nameof(MessageWizardModel.SenderEmailAddress), "SenderEmailAddress",
nameof(MessageWizardModel.SenderFullName), "SenderFullName",
nameof(MessageWizardModel.SenderId), "SenderId",
nameof(MessageWizardModel.ContextId) "ContextId"
]; ];
public MessageWizardModel MessageWizardModel = new MessageWizardModel(); public MessageWizardModel MessageWizardModel = new MessageWizardModel();
@ -185,7 +190,7 @@
MessageWizardModel.ReceiverId = item.Id; MessageWizardModel.ReceiverId = item.Id;
MessageWizardModel.ReceiverEmailAddress = item.UserDto.EmailAddress; 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"; MessageWizardModel.SenderEmailAddress = "info@anataworld.com";
// _logger.Info($"Sending mail to {MessageWizardModel.ReceiverEmailAddress} from {MessageWizardModel.SenderId}"); // _logger.Info($"Sending mail to {MessageWizardModel.ReceiverEmailAddress} from {MessageWizardModel.SenderId}");
@ -261,79 +266,67 @@
userEditModel.ServiceProviders = []; userEditModel.ServiceProviders = [];
userEditModel.UserProductMappings = []; userEditModel.UserProductMappings = [];
} }
} }
async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e)
{ {
var userModelDtoDetail = ((UserModelDtoDetail)e.EditModel); UserModelDtoDetail? userModelDtoDetail = null!;
var userModelDtoDetailEditModel = ((UserModelDtoDetail)e.EditModel);
if (e.IsNew) if (e.IsNew)
{ {
var registration = new RegistrationModel(); var registration = new RegistrationModel();
//TODO: Refractor to userDataService //TODO: Refractor to userDataService
var random = new Random(); registration.Email = userModelDtoDetailEditModel.UserDto.EmailAddress;
const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; registration.PhoneNumber = userModelDtoDetailEditModel.UserDto.PhoneNumber;
var password = new string(Enumerable.Repeat(chars, 10) //registration.Password = password;
.Select(s => s[random.Next(s.Length)]).ToArray()); registration.Password = AcCharsGenerator.NewPassword(AcConst.MinPasswordLength, 16);
registration.Email = userModelDtoDetail.UserDto.EmailAddress;
registration.PhoneNumber = userModelDtoDetail.UserDto.PhoneNumber;
registration.Password = password;
registration.ReferralId = null; registration.ReferralId = null;
_logger.Info($"New user creating; Email: {registration.Email}");
await UserDataService.CreateGuestUser(registration); await UserDataService.CreateGuestUser(registration);
_logger.Info("New user created added");
return;
//userModelDtoDetail = await AdminSignalRClient.PostDataAsync(SignalRTags.AddUserModelDtoDetail, userModelDtoDetailEditModel);
} }
else 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); userModelDtoDetail = await AdminSignalRClient.UpdateUserModelDtoDetail(userModelDtoDetailEditModel);
//modify transferData where transferData.Id == e.EditModel.Id
} }
//get transfer from TransferData by Id
// foreach (var transferToModify in (List<Transfer>)TransferData) if (userModelDtoDetail == null) return;
// { UserData.UpdateCollection(userModelDtoDetail, false);
// 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();
} }
async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e)
{ {
_logger.Info("UserData deleted"); _logger.Info("UserData deleted");
return Task.CompletedTask;
} }
async Task UpdateDataAsync() async Task UpdateDataAsync()
{ {
//refresh grid //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<List<UserModelDtoDetail>>(SignalRTags.GetAllUserModelDtoDetails) ?? [];
_logger.Info("UserData grid refreshed"); _logger.Info("UserData grid refreshed");
} }
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
_logger = new LoggerClient<ManageUsers>(LogWriters.ToArray()); _logger = new LoggerClient<ManageUsers>(LogWriters.ToArray());
UserData = (await UserDataService.GetUsersWithDetailsAsync()).OrderBy(x => x.ProfileDto?.Name).ToList(); await UpdateDataAsync();
base.OnInitialized(); base.OnInitialized();
} }
void ColumnChooserButton_Click() void ColumnChooserButton_Click()
{ {
Grid.ShowColumnChooser(); Grid.ShowColumnChooser();
} }
protected override void OnAfterRender(bool firstRender) protected override void OnAfterRender(bool firstRender)
{ {

View File

@ -34,15 +34,26 @@
EditMode="GridEditMode.EditRow" EditMode="GridEditMode.EditRow"
ColumnResizeMode="GridColumnResizeMode.NextColumn"> ColumnResizeMode="GridColumnResizeMode.NextColumn">
<Columns> <Columns>
<DxGridCommandColumn Width="150" MinWidth="150" FixedPosition="GridColumnFixedPosition.Left" /> <DxGridCommandColumn Width="150" MinWidth="150" FixedPosition="GridColumnFixedPosition.Left"
<DxGridDataColumn FieldName="Id" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" /> Visible="CommandColumnVisible" NewButtonVisible="NewButtonVisible" DeleteButtonVisible="DeleteButtonVisible" EditButtonVisible="EditButtonVisible" />
<DxGridDataColumn FieldName="Id" ShowInColumnChooser="AcDomain.IsDeveloperVersion" Visible="AcDomain.IsDeveloperVersion" DisplayFormat="N" ReadOnly="true" />
@{ @{
var userEmailFieldName = $"{nameof(TransferToDriver.UserProductMapping)}.{nameof(UserProductMapping.User)}.{nameof(User.EmailAddress)}"; var userEmailFieldName = $"{nameof(TransferToDriver.UserProductMapping)}.{nameof(UserProductMapping.User)}.{nameof(User.EmailAddress)}";
var userEmailFieldNameComboItem = $"{nameof(UserProductMapping.User)}.{nameof(User.EmailAddress)}"; var userEmailFieldNameComboItem = $"{nameof(UserProductMapping.User)}.{nameof(User.EmailAddress)}";
var userNameFieldNameComboItem = $"{nameof(UserProductMapping.User)}.{nameof(User.FullName)}"; var userNameFieldNameComboItem = $"{nameof(UserProductMapping.User)}.{nameof(User.FullName)}";
} }
<DxGridDataColumn FieldName="@userEmailFieldName" Caption="Driver" SortIndex="0"> <DxGridDataColumn FieldName="@userEmailFieldName" Caption="Driver" SortIndex="0" ReadOnly="!DriverId.IsNullOrEmpty()" Visible="DriverId.IsNullOrEmpty()">
<CellDisplayTemplate>
@{
var email = string.Empty;
var transferToDriverDataItem = ((TransferToDriver)context.DataItem);
if (HasReadPermission(transferToDriverDataItem.UserProductMappingId))
email = transferToDriverDataItem.UserProductMapping.User.EmailAddress;
}
<text>@email</text>
</CellDisplayTemplate>
<CellEditTemplate> <CellEditTemplate>
@{ @{
var transferToDriverEditModel = (TransferToDriver)context.EditModel; var transferToDriverEditModel = (TransferToDriver)context.EditModel;
@ -51,6 +62,7 @@
<DxComboBox Data="@_drivers" <DxComboBox Data="@_drivers"
TData="@UserProductMapping" TData="@UserProductMapping"
TValue="@UserProductMapping" TValue="@UserProductMapping"
ReadOnly="!DriverId.IsNullOrEmpty()"
TextFieldName="@userEmailFieldNameComboItem" TextFieldName="@userEmailFieldNameComboItem"
Value="@_drivers.FirstOrDefault(x => x.Id == transferToDriverEditModel.UserProductMappingId)" Value="@_drivers.FirstOrDefault(x => x.Id == transferToDriverEditModel.UserProductMappingId)"
ValueChanged="v => transferToDriverEditModel.UserProductMappingId = v.Id" ValueChanged="v => transferToDriverEditModel.UserProductMappingId = v.Id"
@ -65,11 +77,11 @@
</CellEditTemplate> </CellEditTemplate>
</DxGridDataColumn> </DxGridDataColumn>
<DxGridDataColumn FieldName="CarId" Caption="Car"> <DxGridDataColumn FieldName="CarId" Caption="Car" ReadOnly="!_hasEditPermission">
<CellDisplayTemplate> <CellDisplayTemplate>
@{ @{
var transferToDriver = (TransferToDriver)context.DataItem; var transferToDriverDataItem = (TransferToDriver)context.DataItem;
<text>@_cars.FirstOrDefault(x => x.Id == transferToDriver.CarId)?.LicencePlate</text> <text>@_cars.FirstOrDefault(x => x.Id == transferToDriverDataItem.CarId)?.LicencePlate</text>
} }
</CellDisplayTemplate> </CellDisplayTemplate>
<CellEditTemplate> <CellEditTemplate>
@ -80,6 +92,7 @@
<DxComboBox Data="@_cars.Where(x=>x.UserProductMappingId == transferToDriverEditModel.UserProductMappingId)" <DxComboBox Data="@_cars.Where(x=>x.UserProductMappingId == transferToDriverEditModel.UserProductMappingId)"
TData="@Car" TData="@Car"
TValue="@Car" TValue="@Car"
ReadOnly="!_hasEditPermission"
TextFieldName="LicencePlate" TextFieldName="LicencePlate"
Value="@_cars.FirstOrDefault(x => x.Id == transferToDriverEditModel.CarId)" Value="@_cars.FirstOrDefault(x => x.Id == transferToDriverEditModel.CarId)"
ValueChanged="v => { transferToDriverEditModel.CarId = v?.Id ?? Guid.Empty; transferToDriverEditModel.LicencePlate = v?.LicencePlate ?? string.Empty; }" ValueChanged="v => { transferToDriverEditModel.CarId = v?.Id ?? Guid.Empty; transferToDriverEditModel.LicencePlate = v?.LicencePlate ?? string.Empty; }"
@ -87,7 +100,7 @@
SearchMode="ListSearchMode.AutoSearch"> SearchMode="ListSearchMode.AutoSearch">
<Columns> <Columns>
@* <DxListEditorColumn FieldName="Id"/> *@ @* <DxListEditorColumn FieldName="Id"/> *@
<DxListEditorColumn FieldName="LicencePlate" Caption="LicencePlate" /> <DxListEditorColumn FieldName="LicencePlate" Caption="LicencePlate" Width="100" />
<DxListEditorColumn FieldName="Manufacture" Caption="Manufacture" /> <DxListEditorColumn FieldName="Manufacture" Caption="Manufacture" />
<DxListEditorColumn FieldName="CarModel" Caption="Model" /> <DxListEditorColumn FieldName="CarModel" Caption="Model" />
<DxListEditorColumn FieldName="SeatNumber" Caption="SeatNumber" /> <DxListEditorColumn FieldName="SeatNumber" Caption="SeatNumber" />
@ -122,18 +135,43 @@
</DxGridDataColumn>*@ </DxGridDataColumn>*@
<DxGridDataColumn FieldName="Price" /> <DxGridDataColumn FieldName="Price" ReadOnly="!_hasEditPermission">
<CellDisplayTemplate>
@{
var price = string.Empty;
var transferToDriverDataItem = ((TransferToDriver)context.DataItem);
if (HasReadPermission(transferToDriverDataItem.UserProductMappingId))
price = transferToDriverDataItem.Price.ToString("N0");
}
<text>@price</text>
</CellDisplayTemplate>
</DxGridDataColumn>
@* <DxGridDataColumn FieldName="LicencePlate" ReadOnly="true" /> *@ @* <DxGridDataColumn FieldName="LicencePlate" ReadOnly="true" /> *@
<DxGridDataColumn FieldName="Created" DisplayFormat="g" Width="140" CaptionAlignment="GridTextAlignment.Center" TextAlignment="GridTextAlignment.Center" /> <DxGridDataColumn FieldName="Created" DisplayFormat="g" Width="140" CaptionAlignment="GridTextAlignment.Center" TextAlignment="GridTextAlignment.Center" ReadOnly="true" />
<DxGridDataColumn FieldName="Modified" DisplayFormat="g" Width="140" CaptionAlignment="GridTextAlignment.Center" TextAlignment="GridTextAlignment.Center" /> <DxGridDataColumn FieldName="Modified" DisplayFormat="g" Width="140" CaptionAlignment="GridTextAlignment.Center" TextAlignment="GridTextAlignment.Center" ReadOnly="true"/>
</Columns> </Columns>
</TransferToDriversDetailGrid> </TransferToDriversDetailGrid>
@code { @code {
/// <summary>
/// UserProductMappingId! Not required...
/// </summary>
[Parameter] public Guid? DriverId { get; set; } = null;
[Parameter] public Guid ContextId { get; set; } [Parameter] public Guid ContextId { get; set; }
[Parameter] public ITransferToDriversRelation ParentData { get; set; } = null!; [Parameter] public ITransferToDriversRelation ParentData { get; set; } = null!;
[Parameter] public EventCallback<TransferToDriver> OnTransferToDriverChanged { get; set; } [Parameter] public EventCallback<TransferToDriver> 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 TransferToDriversDetailGrid _transferToDriversGrid = null!;
private LoggerClient<TransferToDriverGridComponent> _logger = null!; private LoggerClient<TransferToDriverGridComponent> _logger = null!;
@ -146,27 +184,6 @@
_logger.Info($"DetailGridData: {ParentData.TransferToDrivers.Count}"); _logger.Info($"DetailGridData: {ParentData.TransferToDrivers.Count}");
// _cars.AddRange((await AdminSignalRClient.GetAllAsync<List<Car>>(SignalRTags.GetAllCarsByProductId, [TiamConstClient.TransferProductId])) ?? []);
// _drivers.AddRange(_cars.DistinctBy(x => x.UserProductMappingId).Select(x => x.UserProductMapping));
//AdminSignalRClient.GetAllIntoAsync<Car>(_cars, SignalRTags.GetAllCarsByProductId, [TiamConstClient.TransferProductId])
AdminSignalRClient.GetAllAsync<List<Car>>(SignalRTags.GetAllCarsByProductId, async response =>
{
if (response.Status != SignalResponseStatus.Success || response.ResponseData == null)
{
_logger.Error($"GetAllAsync<List<Car>>(); 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(); await base.OnInitializedAsync();
} }
@ -174,22 +191,37 @@
{ {
if (firstRender) if (firstRender)
{ {
// _transferToDriversGrid.BeginUpdate(); LoadComboBoxItems().Forget();
// _cars.AddRange((await AdminSignalRClient.GetAllAsync<List<Car>>(SignalRTags.GetAllCars))!);
// _transferToDriversGrid.EndUpdate();
// AdminSignalRClient.GetAllAsync<List<Car>>(SignalRTags.GetAllCars, response =>
// {
// if (response is { Status: SignalResponseStatus.Success, ResponseData: not null })
// _cars.AddRange(response.ResponseData);
// return Task.CompletedTask;
// }).Forget();
} }
await base.OnAfterRenderAsync(firstRender); 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<TransferToDriver> args) private void DataItemChanged(GridDataItemChangedEventArgs<TransferToDriver> args)
{ {
//ParentData?.TransferToDrivers?.UpdateCollection(args.DataItem, args.TrackingState == TrackingState.Remove); //ParentData?.TransferToDrivers?.UpdateCollection(args.DataItem, args.TrackingState == TrackingState.Remove);
@ -222,17 +254,4 @@
{ {
_logger.Debug($"DataItemDeleting"); _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;
}
} }

View File

@ -17,6 +17,7 @@
@using AyCode.Models.Users @using AyCode.Models.Users
@using AyCode.Services.SignalRs @using AyCode.Services.SignalRs
@using TIAM.Core.Consts @using TIAM.Core.Consts
@using TIAM.Models.Dtos.Products
@inject IServiceProviderDataService ServiceProviderDataService @inject IServiceProviderDataService ServiceProviderDataService
@inject IEnumerable<IAcLogWriterClientBase> LogWriters @inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject AdminSignalRClient AdminSignalRClient @inject AdminSignalRClient AdminSignalRClient
@ -24,6 +25,7 @@
<UserProductMappingGrid Logger="_logger" <UserProductMappingGrid Logger="_logger"
ContextIds="ContextIds?.Cast<object>().ToArray()" ContextIds="ContextIds?.Cast<object>().ToArray()"
DataSource="_userProductMapping"
GetAllMessageTag="GetAllTag" GetAllMessageTag="GetAllTag"
SignalRClient="AdminSignalRClient" SignalRClient="AdminSignalRClient"
PageSize="10" PageSize="10"
@ -48,7 +50,7 @@
var userProductMappingEditModel = (UserProductMapping)context.EditModel; var userProductMappingEditModel = (UserProductMapping)context.EditModel;
} }
<DxComboBox Data="@_products" TextFieldName="Name" ValueFieldName="Id" @bind-Value="userProductMappingEditModel.ProductId" ReadOnly="@(!_isNewState!.Value)" <DxComboBox Data="@_productModelDtoNames" TextFieldName="Name" ValueFieldName="Id" @bind-Value="userProductMappingEditModel.ProductId" ReadOnly="@(!_isNewState!.Value)"
SearchFilterCondition="ListSearchFilterCondition.Contains" SearchMode="ListSearchMode.AutoSearch"> SearchFilterCondition="ListSearchFilterCondition.Contains" SearchMode="ListSearchMode.AutoSearch">
</DxComboBox> </DxComboBox>
</CellEditTemplate> </CellEditTemplate>
@ -63,15 +65,15 @@
var userProductMappingEditModel = (UserProductMapping)context.EditModel; var userProductMappingEditModel = (UserProductMapping)context.EditModel;
} }
<DxComboBox Data="@_users" TextFieldName="EmailAddress" ValueFieldName="Id" @bind-Value="userProductMappingEditModel.UserId" ReadOnly="@(!_isNewState!.Value)" <DxComboBox Data="@_userModelDtoEmails" TextFieldName="EmailAddress" ValueFieldName="Id" @bind-Value="userProductMappingEditModel.UserId" ReadOnly="@(!_isNewState!.Value)"
SearchFilterCondition="ListSearchFilterCondition.Contains" SearchMode="ListSearchMode.AutoSearch"> SearchFilterCondition="ListSearchFilterCondition.Contains" SearchMode="ListSearchMode.AutoSearch">
</DxComboBox> </DxComboBox>
</CellEditTemplate> </CellEditTemplate>
</DxGridDataColumn> </DxGridDataColumn>
<DxGridDataColumn FieldName="Permissions" /> <DxGridDataColumn FieldName="Permissions" />
<DxGridDataColumn FieldName="Created" DisplayFormat="g" Width="140" CaptionAlignment="GridTextAlignment.Center" TextAlignment="GridTextAlignment.Center" /> <DxGridDataColumn FieldName="Created" DisplayFormat="g" Width="140" CaptionAlignment="GridTextAlignment.Center" TextAlignment="GridTextAlignment.Center" ReadOnly="true" />
<DxGridDataColumn FieldName="Modified" DisplayFormat="g" Width="140" CaptionAlignment="GridTextAlignment.Center" TextAlignment="GridTextAlignment.Center" /> <DxGridDataColumn FieldName="Modified" DisplayFormat="g" Width="140" CaptionAlignment="GridTextAlignment.Center" TextAlignment="GridTextAlignment.Center" ReadOnly="true" />
</Columns> </Columns>
<DetailRowTemplate> <DetailRowTemplate>
@{ @{
@ -100,22 +102,32 @@
private bool? _isNewState = null; private bool? _isNewState = null;
private LoggerClient<UserProductMappingGridComponent> _logger; private LoggerClient<UserProductMappingGridComponent> _logger;
private static List<User> _users = []; private List<UserProductMapping> _userProductMapping = []; //TODO: kell a UserProductMappingDetailGridComponent és utána ez is static lehet! - J.
private static List<Product> _products = []; private static List<UserModelDtoEmail> _userModelDtoEmails = [];
private static List<ProductModelDtoName> _productModelDtoNames = [];
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
_logger = new LoggerClient<UserProductMappingGridComponent>(LogWriters.ToArray()); _logger = new LoggerClient<UserProductMappingGridComponent>(LogWriters.ToArray());
AdminSignalRClient.GetAllIntoAsync(_products, SignalRTags.GetAllProducts).Forget();
AdminSignalRClient.GetAllIntoAsync(_users, SignalRTags.GetAllUsers).Forget();
await base.OnInitializedAsync(); 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) void CustomizeEditModel(GridCustomizeEditModelEventArgs e)
{ {
_isNewState = e.IsNew; _isNewState = e.IsNew;
if (!e.IsNew) return; if (!e.IsNew) return;
// var newProductMapping = new UserProductMapping // var newProductMapping = new UserProductMapping

View File

@ -85,7 +85,13 @@ namespace TIAMSharedUI.Shared.Components.Cards
return _dataSource!; return _dataSource!;
} }
set => _dataSourceParam = value; set
{
_dataSourceParam = value;
if (_dataSource != null! && _dataSourceParam is List<TDataItem> workingReferenceList)
_dataSource.SetWorkingReferenceList(workingReferenceList);
}
} }
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
@ -125,7 +131,7 @@ namespace TIAMSharedUI.Shared.Components.Cards
if (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(); else _dataSource.LoadDataSourceAsync(true).Forget();
} }
} }

View File

@ -46,7 +46,7 @@ namespace TIAMSharedUI.Shared.Components.Grids
if (_dataSource != null! && _dataSource.FilterText != value) if (_dataSource != null! && _dataSource.FilterText != value)
{ {
_dataSource.FilterText = value; _dataSource.FilterText = value;
LoadDataSourceAsync().Forget(); ReloadDataSourceAsync().Forget();
} }
} }
} }
@ -89,7 +89,13 @@ namespace TIAMSharedUI.Shared.Components.Grids
return _dataSource!; return _dataSource!;
} }
set => _dataSourceParam = value; set
{
_dataSourceParam = value;
if (_dataSource != null! && _dataSourceParam is List<TDataItem> workingReferenceList)
_dataSource.SetWorkingReferenceList(workingReferenceList);
}
} }
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
@ -142,13 +148,13 @@ namespace TIAMSharedUI.Shared.Components.Grids
protected override async Task OnAfterRenderAsync(bool firstRender) protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
await base.OnAfterRenderAsync(firstRender);
if (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(); else _dataSource.LoadDataSourceAsync(true).Forget();
} }
await base.OnAfterRenderAsync(firstRender);
} }
public Task AddDataItem(TDataItem dataItem) public Task AddDataItem(TDataItem dataItem)
@ -326,7 +332,7 @@ namespace TIAMSharedUI.Shared.Components.Grids
return _dataSource.Remove(dataItem, true); return _dataSource.Remove(dataItem, true);
} }
public Task LoadDataSourceAsync() public Task ReloadDataSourceAsync()
{ {
return _dataSource.LoadDataSourceAsync(false); return _dataSource.LoadDataSourceAsync(false);
} }

View File

@ -33,8 +33,8 @@
"windowsAuthentication": false, "windowsAuthentication": false,
"anonymousAuthentication": true, "anonymousAuthentication": true,
"iisExpress": { "iisExpress": {
"applicationUrl": "http://localhost:60505/", "applicationUrl": "http://localhost:52163/",
"sslPort": 44395 "sslPort": 44374
} }
} }
} }

View File

@ -25,22 +25,22 @@ namespace TIAMWebApp.Client.Services
{ {
switch (type.Name) switch (type.Name)
{ {
case "TransferDestinationWizardModel": case nameof(TransferDestinationWizardModel):
var result = await TransferDataService.CreateTransferDestination((TransferDestination)data); var result = await TransferDataService.CreateTransferDestination((TransferDestination)data);
return result as TModelType; return result as TModelType;
case "TransferWizardModel": case nameof(TransferWizardModel):
Console.WriteLine(@"TransferWizardModel"); Console.WriteLine(@"TransferWizardModel");
var transferResult = await TransferDataService.CreateTransfer((TransferWizardModel)data); var transferResult = await TransferDataService.CreateTransfer((TransferWizardModel)data);
return transferResult as TModelType; return transferResult as TModelType;
case "MessageWizardModel": case nameof(MessageWizardModel):
EmailMessage emailMessage = ((MessageWizardModel)data).CopyToEmailMessage(); EmailMessage emailMessage = ((MessageWizardModel)data).CopyToEmailMessage();
var messageResult = await MessageSenderService.SendNoticeAsync(emailMessage, 1); var messageResult = await MessageSenderService.SendNoticeAsync(emailMessage, 1);
return messageResult as TModelType; return messageResult as TModelType;
case "ServiceProvider": //case nameof(ServiceProvider):
return null; // return null;
default: default:
return null; return null;
} }

View File

@ -19,6 +19,8 @@ using AyCode.Utils.Extensions;
using TIAM.Entities.Drivers; using TIAM.Entities.Drivers;
using TIAM.Services; using TIAM.Services;
using TIAM.Entities.Products; using TIAM.Entities.Products;
using TIAM.Models.Dtos.Products;
using TIAM.Models.Dtos.Users;
namespace TIAMWebApp.Server.Controllers namespace TIAMWebApp.Server.Controllers
{ {
@ -309,7 +311,7 @@ namespace TIAMWebApp.Server.Controllers
[SignalR(SignalRTags.GetAllCarsByProductId)] [SignalR(SignalRTags.GetAllCarsByProductId)]
public async Task<List<Car>> GetAllCarsByProductId(Guid productId) public async Task<List<Car>> GetAllCarsByProductId(Guid productId)
{ {
_logger.Info($@"GetAllCarsByProductId called"); _logger.Debug($@"GetAllCarsByProductId called; productId: {productId}");
var cars = await adminDal.GetAllCarsbyProductIdAsync(productId); var cars = await adminDal.GetAllCarsbyProductIdAsync(productId);
return cars; return cars;
@ -455,6 +457,15 @@ namespace TIAMWebApp.Server.Controllers
return products; return products;
} }
[NonAction]
[SignalR(SignalRTags.GetAllProductModelDtoNames)]
public async Task<List<ProductModelDtoName>> GetProductModelDtoNames()
{
_logger.Info("GetUserModelDtoEmails called");
return await adminDal.GetProductModelDtoNamesAsync();
}
[AllowAnonymous] [AllowAnonymous]
[HttpPost] [HttpPost]
[Route(APIUrls.GetProductByIdRouteName)] [Route(APIUrls.GetProductByIdRouteName)]

View File

@ -29,12 +29,13 @@ using DevExpress.Data.Linq;
using DevExpress.Data.Linq.Helpers; using DevExpress.Data.Linq.Helpers;
using System; using System;
using TIAM.Database.DbSets.Transfers; using TIAM.Database.DbSets.Transfers;
using TIAM.Services.Interfaces;
namespace TIAMWebApp.Server.Controllers namespace TIAMWebApp.Server.Controllers
{ {
[ApiController] [ApiController]
[Route("api/v1/[controller]")] [Route("api/v1/[controller]")]
public class TransferDataAPIController : ControllerBase public class TransferDataAPIController : ControllerBase, ITransferApiControllerCommon
{ {
private readonly AdminDal _adminDal; private readonly AdminDal _adminDal;
private readonly TIAM.Core.Loggers.ILogger _logger; private readonly TIAM.Core.Loggers.ILogger _logger;
@ -549,6 +550,7 @@ namespace TIAMWebApp.Server.Controllers
[SignalR(SignalRTags.GetTransfers)] [SignalR(SignalRTags.GetTransfers)]
public async Task<List<Transfer>> GetTransfers() public async Task<List<Transfer>> GetTransfers()
{ {
_logger.Debug($"GetTransfers called;");
//var token = _authService.GetAuthTokenFromRequest(Request); //var token = _authService.GetAuthTokenFromRequest(Request);
//_logger.Detail(token); //_logger.Detail(token);
@ -560,6 +562,8 @@ namespace TIAMWebApp.Server.Controllers
[SignalR(SignalRTags.GetTransfersByFilterText)] [SignalR(SignalRTags.GetTransfersByFilterText)]
public async Task<List<Transfer>> GetTransfersByFilterText(string criteriaOperatorText) public async Task<List<Transfer>> GetTransfersByFilterText(string criteriaOperatorText)
{ {
_logger.Debug($"GetTransfersByFilterText called; criteriaOperatorText: {criteriaOperatorText}");
if (criteriaOperatorText.IsNullOrWhiteSpace()) return await GetTransfers(); if (criteriaOperatorText.IsNullOrWhiteSpace()) return await GetTransfers();
var results = await _adminDal.GetTransfersByFilterAsync(CriteriaOperator.Parse(criteriaOperatorText)); var results = await _adminDal.GetTransfersByFilterAsync(CriteriaOperator.Parse(criteriaOperatorText));
@ -570,9 +574,11 @@ namespace TIAMWebApp.Server.Controllers
[HttpGet] [HttpGet]
[Route(APIUrls.GetTransfersByUserIdRouteName)] [Route(APIUrls.GetTransfersByUserIdRouteName)]
[SignalR(SignalRTags.GetTransfersByUserId)] [SignalR(SignalRTags.GetTransfersByUserId)]
public async Task<string> GetTransfersByUserId(Guid userId) public async Task<List<Transfer>> GetTransfersByUserId(Guid userId)
{ {
var result = await _adminDal.GetTransfersByUserIdJsonAsync(userId); _logger.Debug($"GetTransfersByUserId called; userId: {userId}");
var result = await _adminDal.GetTransfersByUserIdAsync(userId);
return result; return result;
} }
@ -582,7 +588,8 @@ namespace TIAMWebApp.Server.Controllers
[SignalR(SignalRTags.GetTransfersByUserProductMappingId)] [SignalR(SignalRTags.GetTransfersByUserProductMappingId)]
public async Task<string> GetTransfersByDriverId(Guid userProductMappingId) public async Task<string> GetTransfersByDriverId(Guid userProductMappingId)
{ {
_logger.Debug($"GetTransferByDriverId called!!!"); _logger.Debug($"GetTransferByDriverId called; userProductMappingId: {userProductMappingId}");
var result = await _adminDal.GetTransfersByUserProductMappingIdAsync(userProductMappingId); var result = await _adminDal.GetTransfersByUserProductMappingIdAsync(userProductMappingId);
return result.ToJson(); return result.ToJson();
} }
@ -592,11 +599,11 @@ namespace TIAMWebApp.Server.Controllers
[HttpPost] [HttpPost]
[Route(APIUrls.GetTransferByIdRouteName)] [Route(APIUrls.GetTransferByIdRouteName)]
[SignalR(SignalRTags.GetTransfer)] [SignalR(SignalRTags.GetTransfer)]
public string? GetTransferById([FromBody] Guid transferId) public async Task<Transfer?> 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] [AllowAnonymous]
@ -605,7 +612,7 @@ namespace TIAMWebApp.Server.Controllers
[SignalR(SignalRTags.UpdateTransfer)] [SignalR(SignalRTags.UpdateTransfer)]
public async Task<Transfer?> UpdateTransfer(Transfer transfer) public async Task<Transfer?> UpdateTransfer(Transfer transfer)
{ {
_logger.Info($"UpdateTransfer called! + {transfer.Id}"); _logger.Info($"UpdateTransfer called! transferId: {transfer.Id}");
return await _adminDal.UpdateTransferAsync(transfer); return await _adminDal.UpdateTransferAsync(transfer);
} }
@ -614,7 +621,7 @@ namespace TIAMWebApp.Server.Controllers
[SignalR(SignalRTags.RemoveTransfer)] [SignalR(SignalRTags.RemoveTransfer)]
public async Task<Transfer?> RemoveTransfer(Transfer transfer) public async Task<Transfer?> RemoveTransfer(Transfer transfer)
{ {
_logger.Info($"RemoveTransfer called! + {transfer.Id}"); _logger.Info($"RemoveTransfer called! transferId: {transfer.Id}");
var result = await _adminDal.RemoveTransferAsync(transfer); var result = await _adminDal.RemoveTransferAsync(transfer);
return result ? transfer : null; return result ? transfer : null;
@ -627,6 +634,8 @@ namespace TIAMWebApp.Server.Controllers
[SignalR(SignalRTags.GetAllDrivers)] [SignalR(SignalRTags.GetAllDrivers)]
public async Task<List<UserProductMapping>> GetAllDrivers() public async Task<List<UserProductMapping>> GetAllDrivers()
{ {
_logger.Debug($"GetAllDrivers called!");
var result = await _adminDal.GetAllDriversAsync(); var result = await _adminDal.GetAllDriversAsync();
return result; return result;
} }
@ -647,6 +656,8 @@ namespace TIAMWebApp.Server.Controllers
[SignalR(SignalRTags.GetTransferDriver)] [SignalR(SignalRTags.GetTransferDriver)]
public async Task<TransferToDriver?> GetTransferDriver(Guid transferDriverId) public async Task<TransferToDriver?> GetTransferDriver(Guid transferDriverId)
{ {
_logger.Debug($"GetTransferDriver called; transferDriverId: {transferDriverId}");
var result = await _adminDal.GetTransferToDriverByIdAsync(transferDriverId); var result = await _adminDal.GetTransferToDriverByIdAsync(transferDriverId);
return result; return result;
} }
@ -657,6 +668,8 @@ namespace TIAMWebApp.Server.Controllers
[SignalR(SignalRTags.GetTransferDriversByTransferId)] [SignalR(SignalRTags.GetTransferDriversByTransferId)]
public async Task<List<TransferToDriver>> GetTransferDrivers(Guid transferId) public async Task<List<TransferToDriver>> GetTransferDrivers(Guid transferId)
{ {
_logger.Debug($"GetTransferDrivers called; transferId: {transferId}");
var result = await _adminDal.GetTransferToDriversByTransferIdAsync(transferId); var result = await _adminDal.GetTransferToDriversByTransferIdAsync(transferId);
return result; return result;
} }

View File

@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
using System.Security.Claims; using System.Security.Claims;
using System.Text.Json; using System.Text.Json;
using AyCode.Core.Extensions;
using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Models;
using TIAMWebApp.Shared.Application.Models.PageModels; using TIAMWebApp.Shared.Application.Models.PageModels;
using TIAMWebApp.Server.Models; using TIAMWebApp.Server.Models;
@ -15,15 +16,18 @@ using TIAM.Entities.Addresses;
using TIAM.Services.Server.Logins; using TIAM.Services.Server.Logins;
using ILogger = TIAM.Core.Loggers.ILogger; using ILogger = TIAM.Core.Loggers.ILogger;
using AyCode.Core.Helpers; using AyCode.Core.Helpers;
using AyCode.Entities;
using AyCode.Services.SignalRs; using AyCode.Services.SignalRs;
using TIAM.Services; using TIAM.Services;
using TIAM.Services.Interfaces;
using TIAMWebApp.Shared.Application.Services;
namespace TIAMWebApp.Server.Controllers namespace TIAMWebApp.Server.Controllers
{ {
[Authorize] [Authorize]
[ApiController] [ApiController]
[Route("api/v1/[controller]")] [Route("api/v1/[controller]")]
public class UserAPIController(IConfiguration configuration, UserDal userDal, IEnumerable<IAcLogWriterBase> logWriters) : ControllerBase public class UserAPIController(IConfiguration configuration, UserDal userDal, IEnumerable<IAcLogWriterBase> logWriters) : ControllerBase, IUserApiControllerCommon
{ {
private readonly TIAM.Core.Loggers.Logger<UserAPIController> _logger = new(logWriters.ToArray()); private readonly TIAM.Core.Loggers.Logger<UserAPIController> _logger = new(logWriters.ToArray());
@ -230,140 +234,79 @@ namespace TIAMWebApp.Server.Controllers
} }
} }
[AllowAnonymous]
[HttpPost]
[Route(APIUrls.UpdateUser)]
public async Task<IActionResult> 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<UserModelDtoDetail>();
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] [AllowAnonymous]
[HttpPost] [HttpPost]
[Route(APIUrls.CreateGuestUserRouteName)] [Route(APIUrls.CreateGuestUserRouteName)]
public async Task<IActionResult> CreateGuestUser([FromBody] JsonElement serializedRegistrationModel) public async Task<IActionResult> CreateGuestUser([FromBody] JsonElement serializedRegistrationModel)
{ {
_logger.Info(@"CreateGuestUser called"); _logger.Info(@"CreateGuestUser called");
var result = false;
UserModelDtoDetail? guestUser = null; UserModelDtoDetail? guestUser = null;
if (string.IsNullOrEmpty(serializedRegistrationModel.GetRawText())) if (string.IsNullOrEmpty(serializedRegistrationModel.GetRawText()))
{ {
return BadRequest("SerializedLoginModel is required"); return BadRequest("SerializedLoginModel is required");
} }
else
var user = JObject.Parse(serializedRegistrationModel.GetRawText()).ToObject<RegistrationModel>();
if (user != null)
{ {
var user = JObject.Parse(serializedRegistrationModel.GetRawText()).ToObject<RegistrationModel>(); //var random = new Random();
//var chars = "1234567890";
if (user != null) //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 userId = Guid.NewGuid();
var email = user?.Email; var email = user.Email?.ToLower();
var phoneNumber = user?.PhoneNumber; var phoneNumber = user.PhoneNumber;
var password = user?.Password; 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) if (email is null || phoneNumber is null || password is null)
{ {
return BadRequest("Invalid request"); 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<UserModelDtoDetail>(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;
}
}
} }
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] [AllowAnonymous]
[HttpGet] [HttpGet]
[Route("GetUsers")] [Route("GetUsers")]
public Task<List<UserModelDto>> GetUsers() public async Task<List<UserModelDto>> GetUsers()
{ {
//var users = await _userDal.Ctx.Users.ToListAsync();//.GetUsersAsync(); //var users = await _userDal.Ctx.Users.ToListAsync();//.GetUsersAsync();
//return users; //return users;
return userDal.GetAllUserModelDtoAsync<UserModelDto>(); return await userDal.GetAllUserModelDtoAsync<UserModelDto>();
} }
[AllowAnonymous] [AllowAnonymous]
[HttpGet] [HttpGet]
[Route(APIUrls.GetUsersWithDetailsRouteName)] [Route(APIUrls.GetUsersWithDetailsRouteName)]
public Task<List<UserModelDtoDetail>> GetUsersWithDetails() [SignalR(SignalRTags.GetAllUserModelDtoDetails)]
public async Task<List<UserModelDtoDetail>> GetUsersWithDetails()
{ {
_logger.Info("GetUsersWithDetails called"); _logger.Info("GetUsersWithDetails called");
//var users = await _userDal.Ctx.Users.ToListAsync();//.GetUsersAsync();
//return users; var users = await userDal.GetAllUserModelDtoAsync<UserModelDtoDetail>();
return userDal.GetAllUserModelDtoAsync<UserModelDtoDetail>(); return users;
} }
[NonAction] [NonAction]
@ -371,26 +314,81 @@ namespace TIAMWebApp.Server.Controllers
public async Task<List<User>> GetAllUsers() public async Task<List<User>> GetAllUsers()
{ {
_logger.Info("GetAllUsers called"); _logger.Info("GetAllUsers called");
//var users = await _userDal.Ctx.Users.ToListAsync();//.GetUsersAsync();
//return users;
return await userDal.GetUsersAsync(); return await userDal.GetUsersAsync();
} }
[NonAction]
[SignalR(SignalRTags.GetAllUserModelDtoEmails)]
public async Task<List<UserModelDtoEmail>> GetUserModelDtoEmails()
{
_logger.Info("GetUserModelDtoEmails called");
return await userDal.GetUserModelDtoEmailsAsync();
}
[AllowAnonymous]
[HttpPost]
[Route(APIUrls.UpdateUser)]
[SignalR(SignalRTags.UpdateUser)]
public async Task<User?> UpdateUser([FromBody] User user)
{
_logger.Info("UpdateUser called");
return await userDal.UpdateUserAsync(user);
}
[NonAction]
[SignalR(SignalRTags.UpdateUserModelDtoDetail)]
public async Task<UserModelDtoDetail?> 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<User?> 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<UserModelDtoDetail?> 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] [AllowAnonymous]
[HttpGet] [HttpGet]
[Route(APIUrls.GetUserByEmailRouteName + "/{email}")] [Route(APIUrls.GetUserByEmailRouteName + "/{email}")]
public async Task<UserModelDto>? GetUserByEmail(string email) public async Task<UserModelDto>? GetUserByEmail(string email)
{ {
_logger.Info($"GetUserByEmail called with email: {email}"); _logger.Info($"GetUserByEmail called with email: {email}");
var result = userDal.GetUserModelDtoByEmailAsync<UserModelDto>(email, false); var result = await userDal.GetUserModelDtoByEmailAsync<UserModelDto>(email, false);
if (result.Result == null) if (result == null)
{ {
UserModelDto resultDto = new UserModelDto(); UserModelDto resultDto = new UserModelDto();
return resultDto; return resultDto;
} }
else else
{ {
return result.Result; return result;
} }
} }
@ -398,10 +396,10 @@ namespace TIAMWebApp.Server.Controllers
[AllowAnonymous] [AllowAnonymous]
[HttpPost] [HttpPost]
[Route("GetUserById")] [Route("GetUserById")]
public Task<UserModelDto?> GetUserById([FromBody] Guid id) public async Task<UserModelDto?> GetUserById([FromBody] Guid id)
{ {
_logger.Info($"GetUserById called with id: {id}"); _logger.Info($"GetUserById called with id: {id}");
return userDal.GetUserModelDtoByIdAsync<UserModelDto>(id, true); return await userDal.GetUserModelDtoByIdAsync<UserModelDto>(id, true);
} }
[AllowAnonymous] [AllowAnonymous]

View File

@ -132,7 +132,10 @@ public class DevAdminSignalRHub : Hub<ISignalRHubItemServer>, IAcSignalRHubServe
public override async Task OnDisconnectedAsync(Exception? exception) 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 Groups.RemoveFromGroupAsync(Context.ConnectionId, "SignalR Users");
await base.OnDisconnectedAsync(exception); await base.OnDisconnectedAsync(exception);
@ -212,7 +215,7 @@ public class DevAdminSignalRHub : Hub<ISignalRHubItemServer>, IAcSignalRHubServe
} }
else _logger.Debug($"{logText}(); {tagName}"); 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; return;
} }
@ -226,7 +229,7 @@ public class DevAdminSignalRHub : Hub<ISignalRHubItemServer>, IAcSignalRHubServe
var id = message!.MessagePackTo<SignalPostJsonDataMessage<IdMessage>>().PostData.Ids[0].JsonTo<Guid[]>()![0]; var id = message!.MessagePackTo<SignalPostJsonDataMessage<IdMessage>>().PostData.Ids[0].JsonTo<Guid[]>()![0];
var address = await _adminDal.GetAddressByIdAsync(id); 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; return;
@ -235,7 +238,7 @@ public class DevAdminSignalRHub : Hub<ISignalRHubItemServer>, IAcSignalRHubServe
id = message!.MessagePackTo<SignalPostJsonDataMessage<IdMessage>>().PostData.Ids[0].JsonTo<Guid[]>()![0]; id = message!.MessagePackTo<SignalPostJsonDataMessage<IdMessage>>().PostData.Ids[0].JsonTo<Guid[]>()![0];
address = await _adminDal.GetAddressByIdAsync(id); address = await _adminDal.GetAddressByIdAsync(id);
await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, new List<Address> { address! }), requestId); await ResponseToCaller(messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, new List<Address> { address! }), requestId);
return; return;
@ -243,7 +246,7 @@ public class DevAdminSignalRHub : Hub<ISignalRHubItemServer>, IAcSignalRHubServe
address = message!.MessagePackTo<SignalPostJsonDataMessage<Address>>().PostData; address = message!.MessagePackTo<SignalPostJsonDataMessage<Address>>().PostData;
await _adminDal.UpdateAddressAsync(address); await _adminDal.UpdateAddressAsync(address);
await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, address), requestId); await ResponseToCaller(messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, address), requestId);
return; return;
@ -251,7 +254,7 @@ public class DevAdminSignalRHub : Hub<ISignalRHubItemServer>, IAcSignalRHubServe
var profile = message!.MessagePackTo<SignalPostJsonDataMessage<Profile>>().PostData; var profile = message!.MessagePackTo<SignalPostJsonDataMessage<Profile>>().PostData;
await _adminDal.UpdateProfileAsync(profile); await _adminDal.UpdateProfileAsync(profile);
await ResponseToCaller(messageTag, new SignalResponseJsonMessage(SignalResponseStatus.Success, profile), requestId); await ResponseToCaller(messageTag, new SignalResponseJsonMessage(messageTag, SignalResponseStatus.Success, profile), requestId);
return; return;
@ -298,7 +301,7 @@ public class DevAdminSignalRHub : Hub<ISignalRHubItemServer>, IAcSignalRHubServe
_logger.Error($"Server OnReceiveMessage; {ex.Message}; {tagName}", ex); _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) protected async Task ResponseToCaller(int messageTag, ISignalRMessage message, int? requestId)

View File

@ -9,18 +9,193 @@ using AyCode.Services.Loggers;
using AyCode.Services.SignalRs; using AyCode.Services.SignalRs;
using MessagePack.Resolvers; using MessagePack.Resolvers;
using Microsoft.AspNetCore.SignalR.Client; 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;
using TIAM.Services.Interfaces;
using TIAMWebApp.Shared.Application.Models.ClientSide; using TIAMWebApp.Shared.Application.Models.ClientSide;
using TIAMWebApp.Shared.Application.Utility; using TIAMWebApp.Shared.Application.Utility;
namespace TIAMWebApp.Shared.Application.Services namespace TIAMWebApp.Shared.Application.Services
{ {
public class AdminSignalRClient : AcSignalRClientBase public class AdminSignalRClient : AcSignalRClientBase, IUserApiControllerClient, ITransferApiControllerClient
{ {
public AdminSignalRClient(IEnumerable<IAcLogWriterClientBase> logWriters) : base($"{Setting.BaseUrl}/DevAdminHub", new LoggerClient(nameof(AdminSignalRClient), logWriters.ToArray())) public AdminSignalRClient(IEnumerable<IAcLogWriterClientBase> logWriters) : base($"{Setting.BaseUrl}/DevAdminHub", new LoggerClient(nameof(AdminSignalRClient), logWriters.ToArray()))
{ {
ConstHelper.NameByValue<SignalRTags>(0); ConstHelper.NameByValue<SignalRTags>(0);
} }
#region IUserApiController
public async Task<User?> UpdateUser(User user)
=> await PostDataAsync(SignalRTags.UpdateUser, user);
public async Task<UserModelDtoDetail?> UpdateUserModelDtoDetail(UserModelDtoDetail userModelDtoDetail)
=> await PostDataAsync(SignalRTags.UpdateUserModelDtoDetail, userModelDtoDetail);
#endregion IUserApiController
#region ICompanyApiController
public async Task<List<Car>> GetAllCarsByProductId(Guid productId)
{
Logger.Detail($"GetAllCarsByProductId client called; productId: {productId}");
return await GetAllAsync<List<Car>>(SignalRTags.GetAllCarsByProductId, [productId]) ?? [];
}
public Task GetAllCarsAndDriversByProductIdAsync(List<Car> intoCars, List<UserProductMapping> 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<Car> intoCars, Guid productId, Action? callback = null)
{
Logger.Detail($"GetAllCarsByProductIdAsync client called; productId: {productId}");
//TODO: AdminSignalRClient.GetAllIntoAsync<Car>(_cars, SignalRTags.GetAllCarsByProductId, [productId]) - J.
return GetAllAsync<List<Car>>(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<List<Transfer>> GetTransfers()
=> await GetAllAsync<List<Transfer>>(SignalRTags.GetTransfers) ?? [];
public async Task<List<Transfer>> GetTransfersByFilterText(string criteriaOperatorText)
=> await GetAllAsync<List<Transfer>>(SignalRTags.GetTransfersByFilterText, [criteriaOperatorText]) ?? [];
public async Task<List<Transfer>> GetTransfersByUserId(Guid userId)
=> await GetAllAsync<List<Transfer>>(SignalRTags.GetTransfersByUserId, [userId]) ?? [];
public async Task<string> GetTransfersByDriverId(Guid userProductMappingId)
{
throw new NotImplementedException();
}
public async Task<Transfer?> GetTransferById(Guid transferId)
=> await GetByIdAsync<Transfer>(SignalRTags.GetTransfer, transferId);
public async Task<Transfer?> UpdateTransfer(Transfer transfer)
{
throw new NotImplementedException();
}
public async Task<Transfer?> RemoveTransfer(Transfer transfer)
{
throw new NotImplementedException();
}
public async Task<List<UserProductMapping>> GetAllDrivers()
{
throw new NotImplementedException();
}
public async Task<List<UserProductMapping>> GetAllDriversByProductId(Guid productId)
{
throw new NotImplementedException();
}
public async Task<TransferToDriver?> GetTransferDriver(Guid transferDriverId)
{
throw new NotImplementedException();
}
public async Task<List<TransferToDriver>> GetTransferDrivers(Guid transferId)
{
throw new NotImplementedException();
}
public async Task<TransferToDriver?> AddTransferDriver(TransferToDriver transferToDriver)
{
throw new NotImplementedException();
}
public async Task<TransferToDriver?> UpdateTransferDriver(TransferToDriver transferToDriver)
{
throw new NotImplementedException();
}
public async Task<TransferToDriver?> RemoveTransferDriver(TransferToDriver transferToDriver)
{
throw new NotImplementedException();
}
public List<TransferDestination> GetTransferDestinations()
{
throw new NotImplementedException();
}
public async Task<TransferDestination?> GetTransferDestinationById(Guid transferDestinationId)
{
throw new NotImplementedException();
}
public async Task<TransferDestination?> CreateTransferDestination(TransferDestination transferDestination)
{
throw new NotImplementedException();
}
public async Task<TransferDestination?> UpdateTransferDestination(TransferDestination transferDestination)
{
throw new NotImplementedException();
}
public async Task<TransferDestination?> RemoveTransferDestination(TransferDestination transferDestination)
{
throw new NotImplementedException();
}
public async Task<List<TransferDestinationToProduct>> GetAllTransferDestinationToProducts()
{
throw new NotImplementedException();
}
public async Task<List<TransferDestinationToProduct>> GetTransferDestinationToProductsByProductId(Guid productId)
{
throw new NotImplementedException();
}
public async Task<List<TransferDestinationToProduct>> GetTransferDestinationToProductsByTransferDestinationId(Guid transferDestinationId)
{
throw new NotImplementedException();
}
public async Task<TransferDestinationToProduct?> GetTransferDestinationToProductById(Guid transferDestinationToProductId)
{
throw new NotImplementedException();
}
public async Task<TransferDestinationToProduct?> CreateTransferDestinationToProduct(TransferDestinationToProduct transferDestinationToProduct)
{
throw new NotImplementedException();
}
public async Task<TransferDestinationToProduct?> UpdateTransferDestinationToProduct(TransferDestinationToProduct transferDestinationToProduct)
{
throw new NotImplementedException();
}
public async Task<TransferDestinationToProduct?> RemoveTransferDestinationToProduct(TransferDestinationToProduct transferDestinationToProduct)
{
throw new NotImplementedException();
}
#endregion ITransferApiController
} }
} }