/
softailor
/
gridient
Обзор
Документация
Войти
/
softailor
/
gridient
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/Gridient.Core/Features/Views/Commands/UpdateViewCommandHandler.cs
76 строк
3 KB
Jenkins
Auto add
18 фев 2026, 10:19
18 фев 2026, 10:19
1e6c4f8
Код
Авторство
О чём код?
using Gridient.Core.Exceptions; using Gridient.Core.Models; using Gridient.Core.Repositories; using MediatR; namespace Gridient.Core.Features.Views.Commands { /// <summary> /// Обработчик команды для обновления представления /// </summary> public class UpdateViewCommandHandler : IRequestHandler<UpdateViewCommand> { private readonly ListsRepositoryFactory _factory; public UpdateViewCommandHandler(ListsRepositoryFactory factory) { _factory = factory; } public async Task Handle(UpdateViewCommand request, CancellationToken cancellationToken) { var viewRequest = request.Request; viewRequest.ListId = request.ListId; viewRequest.ViewId = request.ViewId; if (string.IsNullOrEmpty(viewRequest.Title)) throw ListsException.RequiredField(nameof(CreateViewRequest.Title)); if (viewRequest.ViewId != 0) { await ValidateViewBelongsToList(viewRequest.ListId, viewRequest.ViewId, cancellationToken); } if (viewRequest.ViewId == 0) { // Обновление представления по умолчанию - обновляем ViewOrder полей var defaultViewFields = await _factory.FieldsRepository .GetFields(viewRequest.ListId, cancellationToken); foreach (var field in defaultViewFields.Where(f => f.ViewOrder > 0)) field.ViewOrder = null; for (int i = 0; i < viewRequest.FieldIds.Length; i++) { var field = defaultViewFields.Where(f => f.Id == viewRequest.FieldIds[i]).FirstOrDefault(); if (field is not null) field.ViewOrder = i + 1; } await _factory.FieldsRepository.UpdateRangeAsync(defaultViewFields, cancellationToken); } else { await _factory.ViewsRepository.UpdateView(viewRequest.ViewId, viewRequest.Title, viewRequest.FieldIds, cancellationToken); } } private async Task ValidateViewBelongsToList(int listId, int viewId, CancellationToken cancellationToken) { var actualListId = await GetViewListId(viewId, cancellationToken); if (actualListId != listId) { throw ListsException.Error($"Представление с ID {viewId} не принадлежит списку с ID {listId}"); } } private async Task<int> GetViewListId(int viewId, CancellationToken cancellationToken) { var views = await _factory.ViewsRepository.GetEntitiesByQueryAsync(e => e.Id == viewId, cancellationToken); var view = views.FirstOrDefault(); if (view == null) throw ListsException.EntityNotFound(viewId); return view.ListId; } } }