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)); } diff --git a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs index 9a11a2b..71bd558 100644 --- a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs +++ b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs @@ -55,8 +55,11 @@ 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 virtual Task UpdateUserAsync(TUser user) => UpdateSafeAsync(user); + public Task AddUserAsync(TUser user) { return TransactionAsync(ctx => ctx.AddUser(user)); 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/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..145e89a 100644 --- a/AyCode.Models/Users/AcUserModelDtoDetailBase.cs +++ b/AyCode.Models/Users/AcUserModelDtoDetailBase.cs @@ -39,6 +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; @@ -47,10 +58,19 @@ 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; } }