/
softailor
/
gridient
Обзор
Документация
Войти
/
softailor
/
gridient
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/Gridient.Core/Features/Views/Queries/GetViewsQueryHandler.cs
83 строки
3 KB
Jenkins
Auto add
18 фев 2026, 10:19
18 фев 2026, 10:19
1e6c4f8
Код
Авторство
О чём код?
using Gridient.Core.Constants; using Gridient.Core.Models; using Gridient.Core.Repositories; using MediatR; using Field = Gridient.Core.Models.Field; namespace Gridient.Core.Features.Views.Queries { /// <summary> /// Обработчик запроса для получения представлений списка /// Авторизация выполняется в AuthorizationBehavior /// </summary> public class GetViewsQueryHandler : IRequestHandler<GetViewsQuery, View[]> { private readonly ListsRepositoryFactory _factory; public GetViewsQueryHandler(ListsRepositoryFactory factory) { _factory = factory; } public async Task<View[]> Handle(GetViewsQuery request, CancellationToken cancellationToken) { // Авторизация уже проверена в AuthorizationBehavior через IRequiresListAuthorization // Получаем поля с ViewOrder > 0 для представления по умолчанию var defaultViewFieldEntities = await _factory.FieldsRepository .GetFields(request.ListId, cancellationToken, f => f.ViewOrder > 0); var defaultView = new View { Id = 0, ListId = request.ListId, Fields = defaultViewFieldEntities.Select(ToViewField).ToArray(), Title = DefaultNames.DefaultViewTitle }; // Получаем пользовательские представления var customViews = await _factory.ViewsRepository .GetEntitiesByQueryAsync(e => e.ListId == request.ListId, cancellationToken); // Загружаем все поля списка для использования в представлениях var allFields = await _factory.FieldsRepository .GetFields(request.ListId, cancellationToken); var fieldsLookup = allFields.ToDictionary(f => f.Id); foreach (var view in customViews) { if (view.ViewFields == null || view.ViewFields.Length == 0) { view.Fields = Array.Empty<ViewField>(); continue; } view.Fields = view.ViewFields .Where(vf => fieldsLookup.ContainsKey(vf.FieldId)) .Select(vf => { var field = fieldsLookup[vf.FieldId]; var viewField = ToViewField(field); viewField.ViewOrder = vf.FieldOrder; return viewField; }) .OrderBy(f => f.ViewOrder) .ToArray(); } return [defaultView, .. customViews]; } private static ViewField ToViewField(Field field) => new ViewField { Id = field.Id, Name = field.Name, Title = field.Title, FieldType = field.FieldType, IsDecimal = field.IsDecimal, IsTimeAdded = field.IsTimeAdded, Options = field.Options, ViewOrder = field.ViewOrder }; } }