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
|
{
|
/// <summary>
|
/// 用户简历命令处理器
|
/// </summary>
|
public class UserResumeCommandHandler(
|
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<CollectUserResumeCommand, Guid>,
|
IRequestHandler<ContactUserResumeCommand, Guid>
|
{
|
private readonly IRepository<User> rep = rep;
|
private readonly IRepository<EnterpriseUserCollect> repEnterpriseUserCollect = repEnterpriseUserCollect;
|
|
/// <summary>
|
/// 保存用户简历-个人信息
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public Task<Guid> Handle(SaveUserResumePersonalCommand request, CancellationToken cancellationToken)
|
{
|
return rep.GetPersonalQueryable(false)
|
.UpdateData(request, cancellationToken: cancellationToken);
|
}
|
|
/// <summary>
|
/// 保存用户简历-求职意向
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public Task<Guid> Handle(SaveUserResumeJobSeekingCommand request, CancellationToken cancellationToken)
|
{
|
return rep.GetPersonalQueryable(false)
|
.Include(it => it.UserExpectJobs)
|
.UpdateData(
|
request,
|
null,
|
cancellationToken: cancellationToken);
|
}
|
|
/// <summary>
|
/// 保存用户简历-资格证书
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public Task<Guid> Handle(SaveUserResumeCredentialCommand request, CancellationToken cancellationToken)
|
{
|
var logier = JwtUtils.GetCurrentLogier();
|
return 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);
|
}
|
|
/// <summary>
|
/// 删除用户简历-资格证书
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public Task<int> Handle(DeleteUserResumeCredentialCommand request, CancellationToken cancellationToken)
|
{
|
return request.DeleteData<UserCredential>(
|
q => rep.GetPersonalQueryable(false).SelectMany(it => it.UserCredentials),
|
cancellationToken);
|
}
|
|
/// <summary>
|
/// 保存用户简历-工作经验
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public Task<Guid> Handle(SaveUserResumeWorkExperienceCommand request, CancellationToken cancellationToken)
|
{
|
return rep.GetPersonalQueryable(false)
|
.UpdateData(request, cancellationToken: cancellationToken);
|
}
|
|
/// <summary>
|
/// 保存用户简历-详细信息
|
/// </summary>
|
/// <param name="request"></param>
|
/// <param name="cancellationToken"></param>
|
/// <returns></returns>
|
public Task<Guid> Handle(SaveUserResumeDetailCommand request, CancellationToken cancellationToken)
|
{
|
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;
|
}
|
}
|
}
|