diff --git a/TIAM.Database/DataLayers/Admins/AdminDal.cs b/TIAM.Database/DataLayers/Admins/AdminDal.cs index 07a45f3a..bf23ca36 100644 --- a/TIAM.Database/DataLayers/Admins/AdminDal.cs +++ b/TIAM.Database/DataLayers/Admins/AdminDal.cs @@ -214,7 +214,7 @@ namespace TIAM.Database.DataLayers.Admins public string GetUsersJson() => Session(ctx => ctx.Users.ToJson()); public Task AddUserAsync(User user) => TransactionAsync(ctx => ctx.AddUser(user)); - public Task UpdateUserAsync(User user) => TransactionAsync(ctx => ctx.UpdateUser(user)); + public Task UpdateUserAsync(User user) => UpdateSafeAsync(user); public Task RemoveUserAsync(Guid userId) => TransactionAsync(ctx => ctx.RemoveUser(userId)); #region Product diff --git a/TIAM.Database/DataLayers/Users/UserDal.cs b/TIAM.Database/DataLayers/Users/UserDal.cs index d95fffe3..0c7250da 100644 --- a/TIAM.Database/DataLayers/Users/UserDal.cs +++ b/TIAM.Database/DataLayers/Users/UserDal.cs @@ -1,4 +1,5 @@ using AyCode.Database.DataLayers.Users; +using AyCode.Database.DbSets.Users; using Microsoft.EntityFrameworkCore; using TIAM.Database.DbContexts.Users; using TIAM.Entities.Addresses; @@ -23,6 +24,18 @@ namespace TIAM.Database.DataLayers.Users public Task> GetUserModelDtoEmailsAsync() => SessionAsync(ctx => ctx.Users.Select(x => new UserModelDtoEmail(x)).ToList()); + public override Task UpdateUserAsync(User user) => base.UpdateSafeAsync(user); + + public async Task UpdateUserModelDtoDetailAsync(UserModelDtoDetail userModelDtoDetail) + { + var user = GetUserById(userModelDtoDetail.UserDto.Id, false); + if (user == null) return null; + + userModelDtoDetail.CopyMainValuesToUser(user); + + return await UpdateUserAsync(user) == null ? null : await GetUserModelDtoByIdAsync(userModelDtoDetail.Id, false); + } + public async Task CreateUserAsync(User user) { Context.Users.Add(user); @@ -34,21 +47,5 @@ namespace TIAM.Database.DataLayers.Users Console.WriteLine($@"Saving user to db {user.Id}, {user.EmailAddress}, {user.PhoneNumber}, {user.Password}"); return await Context.SaveChangesAsync() > 0; } - - - public async Task UpdateUserAsync(User user) - { - var existingUser = await Context.Users.CountAsync(u => u.EmailAddress == user.EmailAddress); - if (existingUser == 1) - { - //user.Modified = DateTime.UtcNow; //ezt nem kell megadni, a háttérben ezt magától megcsinálja a DbContextBase - J. - Context.Users.Update(user); - return await Context.SaveChangesAsync() > 0; - } - else - { - throw new Exception("User not found"); - } - } } } diff --git a/TIAM.Models/Dtos/Users/UserModelDtoDetail.cs b/TIAM.Models/Dtos/Users/UserModelDtoDetail.cs index 4760053a..ec44b461 100644 --- a/TIAM.Models/Dtos/Users/UserModelDtoDetail.cs +++ b/TIAM.Models/Dtos/Users/UserModelDtoDetail.cs @@ -50,6 +50,16 @@ namespace TIAM.Models.Dtos.Users } } + public void CopyMainValuesToUser(User user) + { + user.AffiliateId = UserDto.AffiliateId; + + user.EmailAddress = UserDto.EmailAddress; + user.EmailConfirmed = UserDto.EmailConfirmed; + user.PhoneNumber = UserDto.PhoneNumber; + user.RefferalId = UserDto.RefferalId; + } + public virtual User CreateMainEntity() { //TODO: Models... - J. diff --git a/TIAM.Services/SignalRTags.cs b/TIAM.Services/SignalRTags.cs index b24872f6..9e54fd0f 100644 --- a/TIAM.Services/SignalRTags.cs +++ b/TIAM.Services/SignalRTags.cs @@ -105,6 +105,8 @@ public class SignalRTags : AcSignalRTags public const int GetAllUsers = 120; public const int GetAllUserModelDtoDetails = 121; public const int GetAllUserModelDtoEmails = 125; + public const int UpdateUser = 130; + public const int UpdateUserModelDtoDetail = 131; public const int GetAllLogItemsByFilterText = 1000; } diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor index 7c0000c1..e7001912 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor @@ -12,6 +12,7 @@ @using AyCode.Services.Loggers @using AyCode.Core @using AyCode.Core.Consts +@using AyCode.Core.Extensions @using AyCode.Core.Helpers @using TIAMWebApp.Shared.Application.Services @layout AdminLayout @@ -123,19 +124,19 @@ - + @{ - var transfer2 = (UserModelDtoDetail)EditFormContext.EditModel; + var transfer2 = (UserModelDtoDetail)editFormContext.EditModel; } - @EditFormContext.GetEditor("UserDto.EmailAddress") + @editFormContext.GetEditor("UserDto.EmailAddress") - @EditFormContext.GetEditor("UserDto.EmailConfirmed") + @editFormContext.GetEditor("UserDto.EmailConfirmed") - @EditFormContext.GetEditor("UserDto.PhoneNumber") + @editFormContext.GetEditor("UserDto.PhoneNumber") @@ -160,7 +161,7 @@ private LoggerClient _logger; //public UserModelDtoDetail UserModelDtoDetail = new(); - public List UserData { get; set; } + public List UserData { get; set; } = null!; bool PopupVisible { get; set; } = false; @@ -269,50 +270,38 @@ async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) { - var userModelDtoDetail = ((UserModelDtoDetail)e.EditModel); + var userModelDtoDetailEditModel = ((UserModelDtoDetail)e.EditModel); if (e.IsNew) { var registration = new RegistrationModel(); //TODO: Refractor to userDataService - - + + // var random = new Random(); // const string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; // var password = new string(Enumerable.Repeat(chars, 10) // .Select(s => s[random.Next(s.Length)]).ToArray()); - - registration.Email = userModelDtoDetail.UserDto.EmailAddress; - registration.PhoneNumber = userModelDtoDetail.UserDto.PhoneNumber; + + registration.Email = userModelDtoDetailEditModel.UserDto.EmailAddress; + registration.PhoneNumber = userModelDtoDetailEditModel.UserDto.PhoneNumber; //registration.Password = password; registration.Password = AcCharsGenerator.NewPassword(AcConst.MinPasswordLength, 16); registration.ReferralId = null; await UserDataService.CreateGuestUser(registration); _logger.Info("New user created added"); + + return; } - else - { - _logger.Info("UserData updated at id " + userModelDtoDetail.Id); - //await transferDataService.UpdateTransferAsync((TransferWizardModel)e.EditModel); - //modify transferData where transferData.Id == e.EditModel.Id - } - //get transfer from TransferData by Id + _logger.Info("UserData updated at id " + userModelDtoDetailEditModel.Id); - // foreach (var transferToModify in (List)TransferData) - // { - // myModel = (Transfer)e.EditModel; + var updateUserModelDtoDetail = await AdminSignalRClient.PostDataAsync(SignalRTags.UpdateUserModelDtoDetail, userModelDtoDetailEditModel); + if (updateUserModelDtoDetail == null) return; - // 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(); + UserData.UpdateCollection(updateUserModelDtoDetail, false); } async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) diff --git a/TIAMWebApp/Server/Controllers/UserAPIController.cs b/TIAMWebApp/Server/Controllers/UserAPIController.cs index e1cf5dbc..8b74d42c 100644 --- a/TIAMWebApp/Server/Controllers/UserAPIController.cs +++ b/TIAMWebApp/Server/Controllers/UserAPIController.cs @@ -15,6 +15,7 @@ using TIAM.Entities.Addresses; using TIAM.Services.Server.Logins; using ILogger = TIAM.Core.Loggers.ILogger; using AyCode.Core.Helpers; +using AyCode.Entities; using AyCode.Services.SignalRs; using TIAM.Services; @@ -233,40 +234,42 @@ namespace TIAMWebApp.Server.Controllers [AllowAnonymous] [HttpPost] [Route(APIUrls.UpdateUser)] - public async Task UpdateUser([FromBody] JsonElement SerializedUserModel) + [SignalR(SignalRTags.UpdateUser)] + public async Task UpdateUser([FromBody] User user) { _logger.Info("UpdateUser called"); - if (string.IsNullOrEmpty(SerializedUserModel.GetRawText())) - { - return BadRequest("SerializedUserModel is required"); - } - else - { - var user = JObject.Parse(SerializedUserModel.GetRawText()).ToObject(); + return await userDal.UpdateUserAsync(user); + //if (string.IsNullOrEmpty(serializedUserModel.GetRawText())) + //{ + // return BadRequest("SerializedUserModel is required"); + //} + //else + //{ + // var user = JObject.Parse(serializedUserModel.GetRawText()).ToObject(); - if (user != null) - { - var userId = user.Id; - var email = user.UserDto.EmailAddress; - var phoneNumber = user.UserDto.PhoneNumber; + // if (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}"); + // 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)); - } - } + // await userDal.UpdateUserAsync(new User(userId, email, phoneNumber)); + // } + // } - return Ok("yes"); - } + // return Ok("yes"); + //} } @@ -383,6 +386,16 @@ namespace TIAMWebApp.Server.Controllers return await userDal.GetUserModelDtoEmailsAsync(); } + [NonAction] + [SignalR(SignalRTags.UpdateUserModelDtoDetail)] + public async Task UpdateUserModelDtoDetail(UserModelDtoDetail userModelDtoDetail) + { + _logger.Info("UpdateUserModelDtoDetail called"); + + var result = await userDal.UpdateUserModelDtoDetailAsync(userModelDtoDetail); + return result; + } + [AllowAnonymous] [HttpGet] [Route(APIUrls.GetUserByEmailRouteName + "/{email}")]