using FlexJobApi.Core; using Furion.DatabaseAccessor; using MediatR; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.FlexJobServer.Application { /// /// 任务雇佣命令处理器 /// public class TaskUserCommandHandler( IRepository rep, IRepository repUserTaskCollect ) : IRequestHandler, IRequestHandler { private readonly IRepository rep = rep; private readonly IRepository repUserTaskCollect = repUserTaskCollect; /// /// 收藏任务 /// /// /// /// public async Task Handle(CollectTaskCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var collects = await repUserTaskCollect.AsQueryable().AsNoTracking() .Where(it => request.Ids.Contains(it.TaskInfoId) && it.UserId == logier.Id) .ToListAsync(cancellationToken); if (request.IsCollect) { var addIds = request.Ids.Where(it => !collects.Any(c => c.TaskInfoId == it)).ToList(); foreach (var addId in addIds) { var entity = new UserTaskCollect { TaskInfoId = addId, UserId = logier.Id }; await repUserTaskCollect.InsertAsync(entity); } return addIds.Count; } else { await repUserTaskCollect.DeleteAsync(collects); return collects.Count; } } /// /// 报名任务 /// /// /// /// public async Task Handle(ApplyTaskCommand request, CancellationToken cancellationToken) { var logier = JwtUtils.GetCurrentLogier(); var applyIds = await rep.AsQueryable().AsNoTracking() .Where(it => request.Ids.Contains(it.TaskInfoId) && it.UserId == logier.Id) .Select(it => it.TaskInfoId) .ToListAsync(cancellationToken); var addIds = request.Ids.Where(it => !applyIds.Contains(it)).ToList(); foreach (var addId in addIds) { var entity = new TaskInfoUser { TaskInfoId = addId, UserId = logier.Id, HireStatus = EnumTaskUserHireStatus.Wait }; await rep.InsertAsync(entity); } return addIds.Count; } } }