public async Task <AddAttachmentCommandResult> Execute(AddAttachmentCommandArgs args) { var mapObject = await _repository.AsQueryable <MapObject>() .WithId(args.ObjectId) .OfMap(args.MapId, args.ActionExecutorId) .WithAttachments() .FirstOrDefaultAsync(); if (mapObject == null) { throw new ArgumentNullException(nameof(mapObject), "Map object not found"); } var fileReference = _fileReferencesFactory.GenerateMapObjectAttachment(args.SourceFileName, args.MimeType); mapObject.AddAttachment(fileReference); _repository.Create(fileReference); var uploadUrl = _fileStorageClient.GenerateUploadPreSignedUrl(fileReference.ObjectKey, fileReference.MimeType); await _repository.SaveAsync(); return(new AddAttachmentCommandResult { Id = fileReference.Id, UploadUrl = uploadUrl }); }