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
|
{
|
/// <summary>
|
/// 设置角色用户
|
/// </summary>
|
public class SetRoleUserInfosCommandHandler(
|
IRepository<UserRole> rep
|
) : IRequestHandler<SetRoleUserInfosCommand, int>
|
{
|
private readonly IRepository<UserRole> rep = rep;
|
|
/// <inheritdoc/>
|
public async Task<int> 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;
|
}
|
}
|
}
|