From 33094ef9585fd742689607621d8bbf0cd8e60da6 Mon Sep 17 00:00:00 2001 From: sunpengfei <i@angelzzz.com> Date: 星期五, 05 九月 2025 10:25:21 +0800 Subject: [PATCH] feat:开发 --- FlexJobApi.UserServer.Application/UserResumes/Commands/UserResumeCommandHandler.cs | 110 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 92 insertions(+), 18 deletions(-) diff --git a/FlexJobApi.UserServer.Application/UserResumes/Commands/UserResumeCommandHandler.cs b/FlexJobApi.UserServer.Application/UserResumes/Commands/UserResumeCommandHandler.cs index 4c65431..9e4c2a6 100644 --- a/FlexJobApi.UserServer.Application/UserResumes/Commands/UserResumeCommandHandler.cs +++ b/FlexJobApi.UserServer.Application/UserResumes/Commands/UserResumeCommandHandler.cs @@ -16,16 +16,20 @@ /// 鐢ㄦ埛绠�鍘嗗懡浠ゅ鐞嗗櫒 /// </summary> public class UserResumeCommandHandler( - IRepository<User> rep + IRepository<User> rep, + IRepository<EnterpriseUserCollect> repEnterpriseUserCollect ) : IRequestHandler<SaveUserResumePersonalCommand, Guid>, IRequestHandler<SaveUserResumeJobSeekingCommand, Guid>, IRequestHandler<SaveUserResumeCredentialCommand, Guid>, IRequestHandler<DeleteUserResumeCredentialCommand, int>, IRequestHandler<SaveUserResumeWorkExperienceCommand, Guid>, - IRequestHandler<SaveUserResumeDetailCommand, Guid> + IRequestHandler<SaveUserResumeDetailCommand, Guid>, + IRequestHandler<CollectUserResumeCommand, Guid>, + IRequestHandler<ContactUserResumeCommand, Guid> { private readonly IRepository<User> rep = rep; + private readonly IRepository<EnterpriseUserCollect> repEnterpriseUserCollect = repEnterpriseUserCollect; /// <summary> /// 淇濆瓨鐢ㄦ埛绠�鍘�-涓汉淇℃伅 @@ -35,7 +39,7 @@ /// <returns></returns> public Task<Guid> Handle(SaveUserResumePersonalCommand request, CancellationToken cancellationToken) { - return rep.GetPersonalQueryable(true) + return rep.GetPersonalQueryable(false) .UpdateData(request, cancellationToken: cancellationToken); } @@ -47,18 +51,11 @@ /// <returns></returns> public Task<Guid> Handle(SaveUserResumeJobSeekingCommand request, CancellationToken cancellationToken) { - return rep.GetPersonalQueryable(true) + return rep.GetPersonalQueryable(false) .Include(it => it.UserExpectJobs) .UpdateData( request, - (entity) => - { - request.Adapt(entity); - entity.UserExpectJobs = request.UserExpectJobs.Select(it => new UserExpectJob - { - ExpectJobCode = it - }).ToList(); - }, + null, cancellationToken: cancellationToken); } @@ -68,12 +65,21 @@ /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> - public Task<Guid> Handle(SaveUserResumeCredentialCommand request, CancellationToken cancellationToken) + public async Task<Guid> Handle(SaveUserResumeCredentialCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); - return request.SaveData<UserCredential, SaveUserResumeCredentialCommand>( - q => rep.GetPersonalQueryable(true).SelectMany(it => it.UserCredentials), + var entity = await request.SaveData<UserCredential, SaveUserResumeCredentialCommand>( + q => rep.GetPersonalQueryable(false).SelectMany(it => it.UserCredentials), + update: (entity) => + { + request.Adapt(entity); + if (request.Id == null) + { + entity.UserId = logier.Id; + } + }, cancellationToken: cancellationToken); + return entity.Id; } /// <summary> @@ -85,7 +91,7 @@ public Task<int> Handle(DeleteUserResumeCredentialCommand request, CancellationToken cancellationToken) { return request.DeleteData<UserCredential>( - q => rep.GetPersonalQueryable(true).SelectMany(it => it.UserCredentials), + q => rep.GetPersonalQueryable(false).SelectMany(it => it.UserCredentials), cancellationToken); } @@ -97,7 +103,7 @@ /// <returns></returns> public Task<Guid> Handle(SaveUserResumeWorkExperienceCommand request, CancellationToken cancellationToken) { - return rep.GetPersonalQueryable(true) + return rep.GetPersonalQueryable(false) .UpdateData(request, cancellationToken: cancellationToken); } @@ -109,9 +115,77 @@ /// <returns></returns> public Task<Guid> Handle(SaveUserResumeDetailCommand request, CancellationToken cancellationToken) { - return rep.GetPersonalQueryable(true) + return rep.GetPersonalQueryable(false) .Include(it => it.Photos) .UpdateData(request, cancellationToken: cancellationToken); } + + /// <summary> + /// 鏀惰棌鐏靛伐 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<Guid> Handle(CollectUserResumeCommand request, CancellationToken cancellationToken) + { + var logier = JwtUtils.GetCurrentLogier(); + if (logier.Type != EnumUserType.Enterprise) throw Oops.Oh(EnumErrorCodeType.s400, "闇�浼佷笟鐢ㄦ埛鏂瑰彲鑱旂郴"); + var entity = await repEnterpriseUserCollect.AsQueryable() + .FirstOrDefaultAsync(it => it.EnterpriseId == logier.EnterpriseId && it.UserId == request.Id); + if (entity == null) + { + entity = new EnterpriseUserCollect + { + EnterpriseId = logier.EnterpriseId!.Value, + UserId = request.Id, + IsCollected = true, + CollectedTime = request.IsCollected + ? DateTime.Now + : null + }; + await repEnterpriseUserCollect.InsertAsync(entity); + } + else if (entity.IsCollected != request.IsCollected) + { + entity.IsCollected = request.IsCollected; + entity.CollectedTime = request.IsCollected + ? DateTime.Now + : null; + await repEnterpriseUserCollect.UpdateAsync(entity); + } + return entity.Id; + } + + /// <summary> + /// 鑱旂郴鐏靛伐 + /// </summary> + /// <param name="request"></param> + /// <param name="cancellationToken"></param> + /// <returns></returns> + public async Task<Guid> Handle(ContactUserResumeCommand request, CancellationToken cancellationToken) + { + var logier = JwtUtils.GetCurrentLogier(); + if (logier.Type != EnumUserType.Enterprise) throw Oops.Oh(EnumErrorCodeType.s400, "闇�浼佷笟鐢ㄦ埛鏂瑰彲鑱旂郴"); + var entity = await repEnterpriseUserCollect.AsQueryable() + .FirstOrDefaultAsync(it => it.EnterpriseId == logier.EnterpriseId && it.UserId == request.Id); + if (entity == null) + { + entity = new EnterpriseUserCollect + { + EnterpriseId = logier.EnterpriseId!.Value, + UserId = request.Id, + IsContacted = true, + ContactedTime = DateTime.Now + }; + await repEnterpriseUserCollect.InsertAsync(entity); + } + else if (entity.IsContacted == false) + { + entity.IsContacted = true; + entity.ContactedTime = DateTime.Now; + await repEnterpriseUserCollect.UpdateAsync(entity); + } + return entity.Id; + } } } -- Gitblit v1.9.1