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.User.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.UserInfoId)) .ToListAsync(cancellationToken); var removes = entities.Where(it => !request.UserInfoIds.Contains(it.UserInfoId)).ToList(); if (removes.Any()) await rep.DeleteAsync(removes, cancellationToken); var adds = request.UserInfoIds .Where(it => !entities.Any(e => e.UserInfoId == it)) .Select(it => new UserInfoRole { RoleId = request.RoleId, UserInfoId = it }) .ToList(); if (adds.Any()) await rep.InsertAsync(adds, cancellationToken); return removes.Count + adds.Count; } } }