/
softailor
/
gridient
Обзор
Документация
Войти
/
softailor
/
gridient
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/Gridient.Core/Features/FieldValues/Queries/GetElementsQueryHandler.cs
63 строки
3 KB
Jenkins
Auto add
18 фев 2026, 10:19
18 фев 2026, 10:19
1e6c4f8
Код
Авторство
О чём код?
using Gridient.Core.Authorization; using Gridient.Core.Authorization.Exceptions; using Gridient.Core.Models; using Gridient.Core.Repositories; using Gridient.Core.Services.Interfaces; using MediatR; using System.Linq; namespace Gridient.Core.Features.FieldValues.Queries { /// <summary> /// Обработчик запроса для получения элементов списка /// Авторизация списка выполняется в AuthorizationBehavior /// </summary> public class GetElementsQueryHandler : IRequestHandler<GetElementsQuery, ElementsResponse<ViewFieldValue>?> { private readonly ListsRepositoryFactory _factory; private readonly IListItemFilterProvider _listItemFilterProvider; private readonly ICurrentUserContext _currentUserContext; public GetElementsQueryHandler( ListsRepositoryFactory factory, IListItemFilterProvider listItemFilterProvider, ICurrentUserContext currentUserContext) { _factory = factory; _listItemFilterProvider = listItemFilterProvider; _currentUserContext = currentUserContext; } public async Task<ElementsResponse<ViewFieldValue>?> Handle(GetElementsQuery request, CancellationToken cancellationToken) { // Получаем фильтры авторизации на основе настроек списка через IListItemFilterProvider var currentPrincipal = _currentUserContext.GetCurrentPrincipal(); var authorizationFilters = await _listItemFilterProvider.GetListItemFiltersAsync( request.UserLogin, request.Request.ListId, "read", currentPrincipal, cancellationToken); // Объединяем пользовательские фильтры с фильтрами авторизации var allFilters = request.Request.Filters != null && authorizationFilters != null ? request.Request.Filters.Concat(authorizationFilters).ToArray() : request.Request.Filters ?? authorizationFilters; var entities = await _factory.FieldValuesRepository.GetElementsAsync( request.Request.ListId, request.Request.Skip, request.Request.Take, allFilters, request.Request.Sorting, cancellationToken); var total = await _factory.FieldValuesRepository.GetElementsCountAsync( request.Request.ListId, allFilters, cancellationToken); return new ElementsResponse<ViewFieldValue> { Values = entities, Total = total }; } } }