using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.FriendlyException; using Mapster; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.UserServer.Application { /// /// 用户简历命令处理器 /// public class UserResumeCommandHandler( IRepository rep, IRepository repEnterpriseUserCollect ) : IRequestHandler, IRequestHandler, IRequestHandler, IRequestHandler, IRequestHandler, IRequestHandler, IRequestHandler, IRequestHandler { private readonly IRepository rep = rep; private readonly IRepository repEnterpriseUserCollect = repEnterpriseUserCollect; /// /// 保存用户简历-个人信息 /// /// /// /// public Task Handle(SaveUserResumePersonalCommand request, CancellationToken cancellationToken) { return rep.GetPersonalQueryable(false) .UpdateData(request, cancellationToken: cancellationToken); } /// /// 保存用户简历-求职意向 /// /// /// /// public Task Handle(SaveUserResumeJobSeekingCommand request, CancellationToken cancellationToken) { return rep.GetPersonalQueryable(false) .Include(it => it.UserExpectJobs) .UpdateData( request, null, cancellationToken: cancellationToken); } /// /// 保存用户简历-资格证书 /// /// /// /// public async Task Handle(SaveUserResumeCredentialCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var entity = await request.SaveData( 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; } /// /// 删除用户简历-资格证书 /// /// /// /// public Task Handle(DeleteUserResumeCredentialCommand request, CancellationToken cancellationToken) { return request.DeleteData( q => rep.GetPersonalQueryable(false).SelectMany(it => it.UserCredentials), cancellationToken); } /// /// 保存用户简历-工作经验 /// /// /// /// public Task Handle(SaveUserResumeWorkExperienceCommand request, CancellationToken cancellationToken) { return rep.GetPersonalQueryable(false) .UpdateData(request, cancellationToken: cancellationToken); } /// /// 保存用户简历-详细信息 /// /// /// /// public Task Handle(SaveUserResumeDetailCommand request, CancellationToken cancellationToken) { return rep.GetPersonalQueryable(false) .Include(it => it.Photos) .UpdateData(request, cancellationToken: cancellationToken); } /// /// 收藏灵工 /// /// /// /// public async Task 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; } /// /// 联系灵工 /// /// /// /// public async Task 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; } } }