using FlexJobApi.Core; using Furion.DatabaseAccessor; using Furion.LinqBuilder; 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.User.Application { /// /// 获取资源列表 /// public class GetResourcesQueryHandler( IRepository rep ) : IRequestHandler> { private readonly IRepository rep = rep; /// public async Task> Handle(GetResourcesQuery request, CancellationToken cancellationToken) { var q = rep.AsQueryable().AsNoTracking() .OrderBy(it => it.Route) .Where(it => !it.IsExpired); if (request.Service.IsNotNull()) q = q.Where(it => it.Service == request.Service); if (request.Method.HasValue) q = q.Where(it => it.Method == request.Method); if (request.Keywords.IsNotNull()) q = q.Where(it => it.Code.Contains(request.Keywords) || it.Name.Contains(request.Keywords) || it.Route.Contains(request.Keywords) || it.RequestTypeName.Contains(request.Keywords) || it.ResponseTypeName.Contains(request.Keywords)); var items = await q.ProjectToType().ToListAsync(); if (request.RoleId.HasValue) { var roleResourceIds = await rep.Change().Where(it => it.RoleId == request.RoleId).Select(it => it.ResourceId).ToListAsync(); foreach (var item in items) { item.IsChecked = roleResourceIds.Contains(item.Id); } } return items; } } }