public async Task Update(Guid paymentFormId, PaymentFormUpdateDto paymentFormUpdateDto)
        {
            var spec        = new PaymentFormIdSpecification(paymentFormId);
            var paymentForm = await paymentFormDataService.Get(spec);

            var existedFiles = paymentForm.Items
                               .SelectMany(i => i.Files)
                               .ToDictionary(f => f.Id);
            var files = paymentFormUpdateDto.Items
                        .SelectMany(i => i.Files, (pfDto, f) => new { Item = pfDto, FileDto = f })
                        .Select(f => new
            {
                f.Item, f.FileDto, File = f.FileDto.Id.HasValue
                        ? existedFiles[f.FileDto.Id.Value]
                        : fileBuilder.Build(f.FileDto.File)
            })
                        .ToArray();

            var newFilesToSave = files.Where(f => !f.FileDto.Id.HasValue)
                                 .Select(f => new
            {
                Bytes = Convert.FromBase64String(f.FileDto.File.FileInBase64), f.File.WayToFile
            });

            await Task.WhenAll(newFilesToSave.Select(f => fileStorageService.Save(
                                                         new MemoryStream(f.Bytes), f.WayToFile)));

            var existedItems = paymentForm.Items.ToDictionary(i => i.Id);
            var items        = paymentFormUpdateDto.Items
                               .GroupJoin(files, p => p, p => p.Item, (dto, fs) => dto.Id.HasValue
                        ? paymentPositionUpdateBuilder.Map(dto, fs.Select(f => f.File).ToArray(),
                                                           existedItems[dto.Id.Value])
                        : paymentPositionUpdateBuilder.Build(dto, fs.Select(f => f.File).ToArray()))
                               .ToArray();

            paymentFormUpdateBuilder.Map(paymentFormUpdateDto, items, paymentForm);
            await paymentFormDataService.Update(paymentForm);

            var resultFileIds =
                new HashSet <Guid>(paymentForm.Items.SelectMany(i => i.Files, (position, file) => file.Id));

            foreach (var file in existedFiles.Values.Where(f => !resultFileIds.Contains(f.Id)))
            {
                await fileStorageService.Delete(file.WayToFile);
            }
        }
 public async Task Update(Guid id, [FromBody] PaymentFormUpdateDto paymentFormUpdateDto)
 {
     await paymentFormAppService.Update(id, paymentFormUpdateDto);
 }