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.UserServer.Application
{
///
/// 设置角色用户
///
public class SetRoleUserInfosCommandHandler(
IRepository rep
) : IRequestHandler
{
private readonly IRepository rep = rep;
///
public async Task Handle(SetRoleUserInfosCommand request, CancellationToken cancellationToken)
{
var entities = await rep.AsQueryable()
.Where(it =>
it.RoleId == request.RoleId
&& request.UserInfoIds.Contains(it.UserId))
.ToListAsync(cancellationToken);
var removes = entities.Where(it => !request.UserInfoIds.Contains(it.UserId)).ToList();
if (removes.Any()) await rep.DeleteAsync(removes, cancellationToken);
var adds = request.UserInfoIds
.Where(it => !entities.Any(e => e.UserId == it))
.Select(it => new UserRole
{
RoleId = request.RoleId,
UserId = it
})
.ToList();
if (adds.Any()) await rep.InsertAsync(adds, cancellationToken);
return removes.Count + adds.Count;
}
}
}