From 91bebd62f70a33c20a0a8880cfc0b2e99a9cc487 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期一, 11 八月 2025 14:16:00 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.Core/Models/UserServer/Auths/Commands/ChangePhoneNumberCommand.cs | 7 + FlexJobApi.Core/Models/UserServer/Auths/Commands/UpdatePhoneNumberVerifyCodeCommand.cs | 24 ++++++++ FlexJobApi.Core/Models/UserServer/Auths/Commands/RegisterPersonalUserCommand.cs | 9 ++- FlexJobApi.Core/Models/UserServer/Auths/Commands/PasswordLoginCommand.cs | 5 + FlexJobApi.UserServer.Application/Auths/Commands/VerifyCodeCommandHandler.cs | 20 ++++++ FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs | 62 +++++++++++++++----- FlexJobApi.UserServer.Application/EnumUserErrorCodeType.cs | 5 + 7 files changed, 108 insertions(+), 24 deletions(-) diff --git a/FlexJobApi.Core/Models/UserServer/Auths/Commands/BindPhoneNumberCommand.cs b/FlexJobApi.Core/Models/UserServer/Auths/Commands/ChangePhoneNumberCommand.cs similarity index 74% rename from FlexJobApi.Core/Models/UserServer/Auths/Commands/BindPhoneNumberCommand.cs rename to FlexJobApi.Core/Models/UserServer/Auths/Commands/ChangePhoneNumberCommand.cs index edb04bd..7c4d34a 100644 --- a/FlexJobApi.Core/Models/UserServer/Auths/Commands/BindPhoneNumberCommand.cs +++ b/FlexJobApi.Core/Models/UserServer/Auths/Commands/ChangePhoneNumberCommand.cs @@ -1,6 +1,7 @@ 锘縰sing MediatR; using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -8,19 +9,21 @@ namespace FlexJobApi.Core { /// <summary> - /// 缁戝畾鎵嬫満鍙� + /// 鏇存崲鎵嬫満鍙� /// </summary> [Resource([EnumResourceController.Auth])] - public class BindPhoneNumberCommand : IRequest<bool> + public class ChangePhoneNumberCommand : IRequest<bool> { /// <summary> /// 鎵嬫満鍙风爜 /// </summary> + [Required] public string PhoneNumber { get; set; } /// <summary> /// 楠岃瘉鐮� /// </summary> + [Required] public string VerifyCode { get; set; } } } diff --git a/FlexJobApi.Core/Models/UserServer/Auths/Commands/PasswordLoginCommand.cs b/FlexJobApi.Core/Models/UserServer/Auths/Commands/PasswordLoginCommand.cs index feef68c..46aa238 100644 --- a/FlexJobApi.Core/Models/UserServer/Auths/Commands/PasswordLoginCommand.cs +++ b/FlexJobApi.Core/Models/UserServer/Auths/Commands/PasswordLoginCommand.cs @@ -57,5 +57,10 @@ /// 鍒锋柊浠ょ墝 /// </summary> public string RefreshToken { get; set; } + + /// <summary> + /// 鏄惁宸茬粦瀹氭墜鏈哄彿 + /// </summary> + public bool IsBindPhoneNumber { get; set; } } } diff --git a/FlexJobApi.Core/Models/UserServer/Auths/Commands/BindPhoneNumberCommand.cs b/FlexJobApi.Core/Models/UserServer/Auths/Commands/RegisterPersonalUserCommand.cs similarity index 65% copy from FlexJobApi.Core/Models/UserServer/Auths/Commands/BindPhoneNumberCommand.cs copy to FlexJobApi.Core/Models/UserServer/Auths/Commands/RegisterPersonalUserCommand.cs index edb04bd..8fb0eea 100644 --- a/FlexJobApi.Core/Models/UserServer/Auths/Commands/BindPhoneNumberCommand.cs +++ b/FlexJobApi.Core/Models/UserServer/Auths/Commands/RegisterPersonalUserCommand.cs @@ -1,6 +1,7 @@ 锘縰sing MediatR; using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -8,19 +9,21 @@ namespace FlexJobApi.Core { /// <summary> - /// 缁戝畾鎵嬫満鍙� + /// 娉ㄥ唽涓汉璐﹀彿 /// </summary> - [Resource([EnumResourceController.Auth])] - public class BindPhoneNumberCommand : IRequest<bool> + [Resource([EnumResourceController.Auth], AllowAnonymous = true)] + public class RegisterPersonalUserCommand : IRequest<bool> { /// <summary> /// 鎵嬫満鍙风爜 /// </summary> + [Required] public string PhoneNumber { get; set; } /// <summary> /// 楠岃瘉鐮� /// </summary> + [Required] public string VerifyCode { get; set; } } } diff --git a/FlexJobApi.Core/Models/UserServer/Auths/Commands/UpdatePhoneNumberVerifyCodeCommand.cs b/FlexJobApi.Core/Models/UserServer/Auths/Commands/UpdatePhoneNumberVerifyCodeCommand.cs new file mode 100644 index 0000000..6fba1e1 --- /dev/null +++ b/FlexJobApi.Core/Models/UserServer/Auths/Commands/UpdatePhoneNumberVerifyCodeCommand.cs @@ -0,0 +1,24 @@ +锘縰sing Furion.DataValidation; +using MediatR; +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlexJobApi.Core +{ + /// <summary> + /// 鍙戦�佹洿鎹㈡墜鏈哄彿鐭俊 + /// </summary> + [Resource([EnumResourceController.Auth])] + public class UpdatePhoneNumberVerifyCodeCommand : IRequest<Guid> + { + /// <summary> + /// 鎵嬫満鍙风爜 + /// </summary> + [Required, DataValidation(ValidationTypes.PhoneNumber)] + public string PhoneNumber { get; set; } + } +} diff --git a/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs b/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs index 71a666a..6319fcd 100644 --- a/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/Auths/Commands/LoginCommandHandler.cs @@ -26,7 +26,8 @@ IRequestHandler<SmsLoginCommand, LoginCommandCallback>, IRequestHandler<WxmpLoginCommand, LoginCommandCallback>, IRequestHandler<BindWxmpUserInfoCommand, LoginCommandCallback>, - IRequestHandler<BindPhoneNumberCommand, bool> + IRequestHandler<ChangePhoneNumberCommand, bool>, + IRequestHandler<RegisterPersonalUserCommand, bool> { private readonly IRepository<User> rep = rep; private readonly SmsUtils smsUtils = smsUtils; @@ -68,19 +69,6 @@ var user = await rep.AsQueryable().AsNoTracking() .Where(it => it.UserName == request.PhoneNumber && it.Type == request.Type) .FirstOrDefaultAsync(cancellationToken); - if (user == null && request.Type == EnumUserType.Personal) - { - user = new User - { - Type = request.Type, - UserName = request.PhoneNumber, - PhoneNumber = request.PhoneNumber, - IsCheckPhoneNumber = true, - Level = 1, - Status = EnumUserStatus.Normal - }; - await rep.InsertAsync(user); - } if (user == null) throw Oops.Oh(EnumUserErrorCodeType.u1000); if (user.Status == EnumUserStatus.Disabled) @@ -120,24 +108,30 @@ } /// <summary> - /// 缁戝畾鎵嬫満鍙� + /// 鏇存崲鎵嬫満鍙� /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> - public async Task<bool> Handle(BindPhoneNumberCommand request, CancellationToken cancellationToken) + public async Task<bool> Handle(ChangePhoneNumberCommand request, CancellationToken cancellationToken) { await smsUtils.CheckVerifyCode(new CheckVerifyCodeModel { PhoneNumber = request.PhoneNumber, VerifyCode = request.VerifyCode, - TemplateCode = EnumSmsTemplateCode.LoginOrRegister + TemplateCode = EnumSmsTemplateCode.UpdateUserPhoneNumber }); var logier = JwtUtils.GetCurrentLogier(); var user = await rep.AsQueryable() .FirstOrDefaultAsync(it => it.Id == logier.Id); if (user == null) throw Oops.Oh(EnumErrorCodeType.s404, "褰撳墠璐﹀彿涓嶅瓨鍦�"); + + var exist = await rep.AsQueryable() + .Where(it => it.Type == logier.Type && it.PhoneNumber == request.PhoneNumber && it.Id != user.Id) + .AnyAsync(cancellationToken); + if (exist) throw Oops.Oh(EnumUserErrorCodeType.u1010); + user.UserName = request.PhoneNumber; user.PhoneNumber = request.PhoneNumber; user.IsCheckPhoneNumber = true; @@ -216,6 +210,39 @@ } /// <summary> + /// 娉ㄥ唽涓汉璐﹀彿 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<bool> Handle(RegisterPersonalUserCommand request, CancellationToken cancellationToken) + { + await smsUtils.CheckVerifyCode(new CheckVerifyCodeModel + { + PhoneNumber = request.PhoneNumber, + VerifyCode = request.VerifyCode, + TemplateCode = EnumSmsTemplateCode.LoginOrRegister + }); + var user = await rep.AsQueryable() + .FirstOrDefaultAsync(it => it.Type == EnumUserType.Personal && it.UserName == request.PhoneNumber); + if (user != null) + throw Oops.Oh(EnumUserErrorCodeType.u1010); + + user = new User + { + Type = EnumUserType.Personal, + UserName = request.PhoneNumber, + PhoneNumber = request.PhoneNumber, + IsCheckPhoneNumber = true, + Level = 1, + Status = EnumUserStatus.Normal + }; + await rep.InsertAsync(user); + + return true; + } + + /// <summary> /// 鑾峰彇褰撳墠鐧诲綍鐢ㄦ埛 /// </summary> /// <param name="user"></param> @@ -242,6 +269,7 @@ Id = logier.Id, AccessToken = logier.AccessToken, RefreshToken = logier.RefreshToken, + IsBindPhoneNumber = logier.PhoneNumber.IsNotNull() }; } } diff --git a/FlexJobApi.UserServer.Application/Auths/Commands/VerifyCodeCommandHandler.cs b/FlexJobApi.UserServer.Application/Auths/Commands/VerifyCodeCommandHandler.cs index 4831a8d..e9a5d26 100644 --- a/FlexJobApi.UserServer.Application/Auths/Commands/VerifyCodeCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/Auths/Commands/VerifyCodeCommandHandler.cs @@ -15,8 +15,9 @@ /// </summary> public class VerifyCodeCommandHandler( SmsUtils smsUtils - ) - : IRequestHandler<SendLoginOrRegisterVerifyCodeCommand, Guid> + ) : + IRequestHandler<SendLoginOrRegisterVerifyCodeCommand, Guid>, + IRequestHandler<UpdatePhoneNumberVerifyCodeCommand, Guid> { private readonly SmsUtils smsUtils = smsUtils; @@ -34,5 +35,20 @@ TemplateCode = EnumSmsTemplateCode.LoginOrRegister }); } + + /// <summary> + /// 鍙戦�佹洿鎹㈡墜鏈哄彿鐭俊 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public Task<Guid> Handle(UpdatePhoneNumberVerifyCodeCommand request, CancellationToken cancellationToken) + { + return smsUtils.SendVerifyCode(new SendVerifyCodeModel + { + PhoneNumber = request.PhoneNumber, + TemplateCode = EnumSmsTemplateCode.UpdateUserPhoneNumber + }); + } } } diff --git a/FlexJobApi.UserServer.Application/EnumUserErrorCodeType.cs b/FlexJobApi.UserServer.Application/EnumUserErrorCodeType.cs index 09bc54c..77000b2 100644 --- a/FlexJobApi.UserServer.Application/EnumUserErrorCodeType.cs +++ b/FlexJobApi.UserServer.Application/EnumUserErrorCodeType.cs @@ -21,6 +21,11 @@ [ErrorCodeItemMetadata("璐﹀彿宸茬鐢�")] u1001 = 1001, /// <summary> + /// 璇ユ墜鏈哄彿宸茶娉ㄥ唽 + /// </summary> + [ErrorCodeItemMetadata("璇ユ墜鏈哄彿宸茶娉ㄥ唽")] + u1010 = 1010, + /// <summary> /// 褰撳墠璐﹀彿鏈粦瀹氬井淇″皬绋嬪簭 /// </summary> [ErrorCodeItemMetadata("褰撳墠璐﹀彿鏈粦瀹氬井淇″皬绋嬪簭")] -- Gitblit v1.9.1