From a2efd6c3bdbea77ef13205f4102cae774a233041 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期五, 05 九月 2025 13:06:02 +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