sunpengfei
2025-08-20 a9ee8bf270eb8a3315808b24b41417be4b1a8a9a
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>
        /// 保存用户简历-个人信息
@@ -114,5 +118,73 @@
                .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;
        }
    }
}