From 8e8ec873b2d05a91002c5b4e267134d46e1cbb2c Mon Sep 17 00:00:00 2001 From: Loretta Date: Fri, 5 Jul 2024 15:39:01 +0200 Subject: [PATCH 1/5] etc --- AyCode.Database/DataLayers/Users/AcUserDalBase.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs index 9a11a2b..56051db 100644 --- a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs +++ b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs @@ -55,8 +55,10 @@ namespace AyCode.Database.DataLayers.Users => GetAllModelDtoAsync(); public Task> GetUsersAsync() => SessionAsync(ctx => ctx.Users.ToList()); + //public Task> GetUserEmails() => SessionAsync(ctx => ctx.Users.Select(x => new UserModelDtoEmail(x)).ToList()); + public Task AddUserAsync(TUser user) { return TransactionAsync(ctx => ctx.AddUser(user)); From de2c345b46dcc7aa913531f4c40f7af22490c5b6 Mon Sep 17 00:00:00 2001 From: Loretta Date: Sat, 6 Jul 2024 07:22:26 +0200 Subject: [PATCH 2/5] AcCharsGenerator.NewPassword improvements --- AyCode.Core/Consts/AcConst.cs | 2 +- .../Helpers/{AcCharGenerator.cs => AcCharsGenerator.cs} | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) rename AyCode.Core/Helpers/{AcCharGenerator.cs => AcCharsGenerator.cs} (81%) diff --git a/AyCode.Core/Consts/AcConst.cs b/AyCode.Core/Consts/AcConst.cs index 9d7a685..4851db8 100644 --- a/AyCode.Core/Consts/AcConst.cs +++ b/AyCode.Core/Consts/AcConst.cs @@ -25,7 +25,7 @@ namespace AyCode.Core.Consts public const int MinPlayerNameLength = MinUserNameLength; public const int MaxPlayerNameLength = MaxUserNameLength; - public const int MinPasswordLength = 6; + public const int MinPasswordLength = 8; public const int MaxPasswordLength = 32; public const int MinUserTokenLength = 8; public const int MaxUserTokenLength = 12; diff --git a/AyCode.Core/Helpers/AcCharGenerator.cs b/AyCode.Core/Helpers/AcCharsGenerator.cs similarity index 81% rename from AyCode.Core/Helpers/AcCharGenerator.cs rename to AyCode.Core/Helpers/AcCharsGenerator.cs index 8062a50..4acb704 100644 --- a/AyCode.Core/Helpers/AcCharGenerator.cs +++ b/AyCode.Core/Helpers/AcCharsGenerator.cs @@ -2,13 +2,13 @@ namespace AyCode.Core.Helpers { - public static class AcCharGenerator + public static class AcCharsGenerator { public static readonly char[] Letters; public static readonly char[] Numbers; public static readonly char[] LettersAndNumbers; - static AcCharGenerator() + static AcCharsGenerator() { //"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" @@ -23,6 +23,7 @@ namespace AyCode.Core.Helpers private static char[] GetRandomChars(int minLength, int maxLength) => GetRandomChars(LettersAndNumbers, minLength, maxLength); private static char[] GetRandomChars(char[] sourceChars, int minLength, int maxLength) { + if (minLength < 1) throw new ArgumentOutOfRangeException(nameof(minLength), "must have length greater than or equal to 1"); var random = new Random(); return Enumerable.Repeat(sourceChars, random.Next(minLength, maxLength)).Select(s => s[random.Next(s.Length)]).ToArray(); } @@ -32,7 +33,7 @@ namespace AyCode.Core.Helpers return new string(GetRandomChars(AcConst.MinUserTokenLength, AcConst.MaxUserTokenLength)); } - public static string NewPassword() + public static string NewPassword(int minLength = AcConst.MinPasswordLength, int maxLength = AcConst.MaxPasswordLength) { return new string(GetRandomChars(AcConst.MinPasswordLength, AcConst.MaxPasswordLength)); } From 732918de53dfe749e0715f25bd78edb86c74b112 Mon Sep 17 00:00:00 2001 From: Loretta Date: Sat, 6 Jul 2024 07:27:15 +0200 Subject: [PATCH 3/5] fix --- AyCode.Core/Consts/AcConst.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AyCode.Core/Consts/AcConst.cs b/AyCode.Core/Consts/AcConst.cs index 4851db8..9d7a685 100644 --- a/AyCode.Core/Consts/AcConst.cs +++ b/AyCode.Core/Consts/AcConst.cs @@ -25,7 +25,7 @@ namespace AyCode.Core.Consts public const int MinPlayerNameLength = MinUserNameLength; public const int MaxPlayerNameLength = MaxUserNameLength; - public const int MinPasswordLength = 8; + public const int MinPasswordLength = 6; public const int MaxPasswordLength = 32; public const int MinUserTokenLength = 8; public const int MaxUserTokenLength = 12; From 70ad51e5df15ccb844223cce92be1cc9aa8a51a8 Mon Sep 17 00:00:00 2001 From: Loretta Date: Sat, 6 Jul 2024 15:05:16 +0200 Subject: [PATCH 4/5] UserDal improvements; --- AyCode.Database/DataLayers/Users/AcUserDalBase.cs | 1 + AyCode.Models/Users/AcUserModelDtoBase.cs | 3 +-- AyCode.Models/Users/AcUserModelDtoDetailBase.cs | 11 ++++++----- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs index 56051db..71bd558 100644 --- a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs +++ b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs @@ -58,6 +58,7 @@ namespace AyCode.Database.DataLayers.Users //public Task> GetUserEmails() => SessionAsync(ctx => ctx.Users.Select(x => new UserModelDtoEmail(x)).ToList()); + public virtual Task UpdateUserAsync(TUser user) => UpdateSafeAsync(user); public Task AddUserAsync(TUser user) { diff --git a/AyCode.Models/Users/AcUserModelDtoBase.cs b/AyCode.Models/Users/AcUserModelDtoBase.cs index 6be7453..7842a46 100644 --- a/AyCode.Models/Users/AcUserModelDtoBase.cs +++ b/AyCode.Models/Users/AcUserModelDtoBase.cs @@ -28,8 +28,7 @@ public abstract class AcUserModelDtoBase user) : base(user) { ProfileDto.AddressId = user.Profile.AddressId; - UserDto.AffiliateId = user.AffiliateId; - + if (user.ServiceProviders.Count == 0) return; //így proxy error lesz... - J. diff --git a/AyCode.Models/Users/AcUserModelDtoDetailBase.cs b/AyCode.Models/Users/AcUserModelDtoDetailBase.cs index a477f7b..dd8622c 100644 --- a/AyCode.Models/Users/AcUserModelDtoDetailBase.cs +++ b/AyCode.Models/Users/AcUserModelDtoDetailBase.cs @@ -39,6 +39,12 @@ public abstract class AcUserModelDtoDetailBase user) : base(user) { + UserDto.EmailAddress = user.EmailAddress; + UserDto.EmailConfirmed = user.EmailConfirmed; + UserDto.PhoneNumber = user.PhoneNumber; + UserDto.Created = user.Created; + UserDto.Modified = user.Modified; + var address = Activator.CreateInstance(); address.Id = user.Profile.AddressId; @@ -47,10 +53,5 @@ public abstract class AcUserModelDtoDetailBase Date: Sun, 7 Jul 2024 08:32:19 +0200 Subject: [PATCH 5/5] improvements, fixes, etc... --- .../Logins/IAcLoginServiceCommon.cs | 8 +++--- .../Users/AcUserModelDtoDetailBase.cs | 21 ++++++++++++++- AyCode.Models/Users/AcUserModelDtoMinBase.cs | 6 +++++ .../Logins/AcLoginServiceServer.cs | 16 ++++++----- .../Logins/AcLoginServiceClient.cs | 8 +++--- .../SignalRs/IAcSignalRHubClient.cs | 27 ++++++++++--------- 6 files changed, 58 insertions(+), 28 deletions(-) diff --git a/AyCode.Interfaces/Logins/IAcLoginServiceCommon.cs b/AyCode.Interfaces/Logins/IAcLoginServiceCommon.cs index fbd939e..235256b 100644 --- a/AyCode.Interfaces/Logins/IAcLoginServiceCommon.cs +++ b/AyCode.Interfaces/Logins/IAcLoginServiceCommon.cs @@ -16,8 +16,8 @@ public interface IAcLoginServiceCommon LogoutAsync(); - public AcErrorCode Registration(string email, string password, string? phoneNumber = null); - public AcErrorCode Registration(Guid userId, string email, string password, string? phoneNumber = null); - public Task RegistrationAsync(string email, string password, string? phoneNumber = null); - public Task RegistrationAsync(Guid userId, string email, string password, string? phoneNumber = null); + public AcErrorCode Registration(string email, string password, string? phoneNumber = null, Guid? referralId = null); + public AcErrorCode Registration(Guid userId, string email, string password, string? phoneNumber = null, Guid? referralId = null); + public Task RegistrationAsync(string email, string password, string? phoneNumber = null, Guid? referralId = null); + public Task RegistrationAsync(Guid userId, string email, string password, string? phoneNumber = null, Guid? referralId = null); } \ No newline at end of file diff --git a/AyCode.Models/Users/AcUserModelDtoDetailBase.cs b/AyCode.Models/Users/AcUserModelDtoDetailBase.cs index dd8622c..145e89a 100644 --- a/AyCode.Models/Users/AcUserModelDtoDetailBase.cs +++ b/AyCode.Models/Users/AcUserModelDtoDetailBase.cs @@ -39,12 +39,17 @@ public abstract class AcUserModelDtoDetailBase user) : base(user) { + UserDto.Id = user.Id; + UserDto.ProfileId = user.ProfileId; UserDto.EmailAddress = user.EmailAddress; UserDto.EmailConfirmed = user.EmailConfirmed; UserDto.PhoneNumber = user.PhoneNumber; + UserDto.RefferalId = user.RefferalId; + UserDto.AffiliateId = user.AffiliateId; + UserDto.RefreshToken = user.RefreshToken; UserDto.Created = user.Created; UserDto.Modified = user.Modified; - + var address = Activator.CreateInstance(); address.Id = user.Profile.AddressId; @@ -54,4 +59,18 @@ public abstract class AcUserModelDtoDetailBase user) + { + base.CopyUserDtoValuesToUser(user); + + user.ProfileId = UserDto.ProfileId; + user.EmailAddress = UserDto.EmailAddress; + user.EmailConfirmed = UserDto.EmailConfirmed; + user.PhoneNumber = UserDto.PhoneNumber; + user.RefferalId = UserDto.RefferalId; + //user.RefreshToken = UserDto.RefreshToken; //Ezzel mi legyen?! - J. + user.Created = UserDto.Created; + user.Modified = UserDto.Modified; + } } \ No newline at end of file diff --git a/AyCode.Models/Users/AcUserModelDtoMinBase.cs b/AyCode.Models/Users/AcUserModelDtoMinBase.cs index 5142dcc..6c13f7b 100644 --- a/AyCode.Models/Users/AcUserModelDtoMinBase.cs +++ b/AyCode.Models/Users/AcUserModelDtoMinBase.cs @@ -34,6 +34,12 @@ public abstract class AcUserModelDtoMinBase : AcModelD //Profile.NickName = user.Profile.NickName; } + public void CopyUserDtoValuesToUser(IAcUserDtoMinBase user) + { + user.Id = UserDto.Id; + user.AffiliateId = UserDto.AffiliateId; + } + //public virtual TUserDtoMin CreateMainEntity() //{ // var user = base.CreateMainEntity(); diff --git a/AyCode.Services.Server/Logins/AcLoginServiceServer.cs b/AyCode.Services.Server/Logins/AcLoginServiceServer.cs index f8f4b22..e41a3fe 100644 --- a/AyCode.Services.Server/Logins/AcLoginServiceServer.cs +++ b/AyCode.Services.Server/Logins/AcLoginServiceServer.cs @@ -83,11 +83,13 @@ public class AcLoginServiceServer Registration(Guid.NewGuid(), email, password, phoneNumber); + public virtual AcErrorCode Registration(string email, string password, string? phoneNumber = null, Guid? referralId = null) + => Registration(Guid.NewGuid(), email, password, phoneNumber, referralId); - public virtual AcErrorCode Registration(Guid userId, string email, string password, string? phoneNumber = null) + public virtual AcErrorCode Registration(Guid userId, string email, string password, string? phoneNumber = null, Guid? referralId = null) { + email = email.ToLower(); + if ((phoneNumber != null && !AcValidate.IsValidPhoneNumberFormat(phoneNumber, out var errorCode)) || !AcValidate.IsValidEmailAndPasswordFormat(email, password, out errorCode)) return errorCode; @@ -108,11 +110,11 @@ public class AcLoginServiceServer RegistrationAsync(string email, string password, string? phoneNumber = null) - => RegistrationAsync(Guid.NewGuid(), email, password, phoneNumber); + public virtual Task RegistrationAsync(string email, string password, string? phoneNumber = null, Guid? referralId = null) + => RegistrationAsync(Guid.NewGuid(), email, password, phoneNumber, referralId); - public virtual Task RegistrationAsync(Guid userId, string email, string password, string? phoneNumber = null) - => TaskHelper.ToThreadPoolTask(() => Registration(userId, email, password, phoneNumber)); + public virtual Task RegistrationAsync(Guid userId, string email, string password, string? phoneNumber = null, Guid? referralId = null) + => TaskHelper.ToThreadPoolTask(() => Registration(userId, email, password, phoneNumber, referralId)); public virtual bool SendConfirmationToken(string? email, string confirmationToken) { diff --git a/AyCode.Services/Logins/AcLoginServiceClient.cs b/AyCode.Services/Logins/AcLoginServiceClient.cs index f0e74ac..5e82ae4 100644 --- a/AyCode.Services/Logins/AcLoginServiceClient.cs +++ b/AyCode.Services/Logins/AcLoginServiceClient.cs @@ -37,22 +37,22 @@ public class AcLoginServiceClient RegistrationAsync(string email, string password, string? phoneNumber = null) + public virtual Task RegistrationAsync(string email, string password, string? phoneNumber = null, Guid? referralId = null) { return TaskHelper.ToThreadPoolTask(() => Registration(email, password, phoneNumber)); } - public Task RegistrationAsync(Guid userId, string email, string password, string? phoneNumber = null) + public Task RegistrationAsync(Guid userId, string email, string password, string? phoneNumber = null, Guid? referralId = null) { throw new NotImplementedException(); } diff --git a/AyCode.Services/SignalRs/IAcSignalRHubClient.cs b/AyCode.Services/SignalRs/IAcSignalRHubClient.cs index 601a486..1b25839 100644 --- a/AyCode.Services/SignalRs/IAcSignalRHubClient.cs +++ b/AyCode.Services/SignalRs/IAcSignalRHubClient.cs @@ -127,37 +127,39 @@ public interface ISignalRMessage [MessagePackObject] public sealed class SignalResponseJsonMessage : ISignalResponseMessage { - [Key(0)] public SignalResponseStatus Status { get; set; } + [Key(0)] public int MessageTag { get; set; } - [Key(1)] public string? ResponseData { get; set; } = null; + [Key(1)] public SignalResponseStatus Status { get; set; } + + [Key(2)] public string? ResponseData { get; set; } = null; public SignalResponseJsonMessage(){} - public SignalResponseJsonMessage(SignalResponseStatus status) + public SignalResponseJsonMessage(int messageTag, SignalResponseStatus status) { Status = status; + MessageTag = messageTag; } - public SignalResponseJsonMessage(SignalResponseStatus status, object? responseData) : this(status) + public SignalResponseJsonMessage(int messageTag, SignalResponseStatus status, object? responseData) : this(messageTag, status) { - if (responseData is string) - ResponseData = responseData as string; + if (responseData is string stringdata) + ResponseData = stringdata; else ResponseData = responseData.ToJson(); } - public SignalResponseJsonMessage(SignalResponseStatus status, string? responseDataJson) : this(status) + public SignalResponseJsonMessage(int messageTag, SignalResponseStatus status, string? responseDataJson) : this(messageTag, status) { ResponseData = responseDataJson; } } [MessagePackObject] -public sealed class SignalResponseMessage(SignalResponseStatus status, TResponseData? responseData) : ISignalResponseMessage +public sealed class SignalResponseMessage(int messageTag, SignalResponseStatus status, TResponseData? responseData) : ISignalResponseMessage { - [Key(0)] - public SignalResponseStatus Status { get; set; } = status; - [Key(1)] - public TResponseData? ResponseData { get; set; } = responseData; + [Key(0)] public int MessageTag { get; set; } + [Key(1)] public SignalResponseStatus Status { get; set; } = status; + [Key(2)] public TResponseData? ResponseData { get; set; } = responseData; } public sealed class SignalResponseStatusMessage(SignalResponseStatus status) : ISignalRMessage @@ -179,6 +181,7 @@ public interface ISignalResponseMessage : ISignalResponseMessage public interface ISignalResponseMessage : ISignalRMessage { + int MessageTag { get; set; } SignalResponseStatus Status { get; set; } }