public async Task <Result <long> > Handle(CreateAudioCommand command, CancellationToken cancellationToken) { _currentUserService.User.TryGetUserId(out var currentUserId); if (!await ExistsInTempStorage(command.BlobName, cancellationToken)) { return(Result <long> .BadRequest("Cannot find upload. Please upload and try again.")); } Audio?audio = null; try { await _unitOfWork.BeginTransactionAsync(); audio = new Audio { UserId = currentUserId, Size = command.FileSize, Duration = command.Duration, Title = command.Title, Description = command.Description, File = command.BlobName, }; // Create tags if (command.Tags.Count > 0) { audio.Tags = _slugGenerator.GenerateSlugs(command.Tags).ToList(); } await _unitOfWork.Audios.AddAsync(audio, cancellationToken); await _unitOfWork.SaveChangesAsync(cancellationToken); await MoveTempAudioToPublic(audio.File, cancellationToken); await _unitOfWork.CommitTransactionAsync(cancellationToken); return(Result <long> .Success(audio.Id)); } catch (Exception) { // Remove audio that was moved to public bucket if (!string.IsNullOrEmpty(audio?.File)) { await _storageService.RemoveAsync(_audioStorageSettings.Bucket, audio.File, cancellationToken); } await _unitOfWork.RollbackTransactionAsync(); throw; } }
public async Task <ActionResult <AudioDto> > Create([FromBody] CreateAudioCommand command, CancellationToken cancellationToken) { var result = await _mediator.Send(command, cancellationToken); if (!result.IsSuccess) { return(result.ReturnErrorResponse()); } // Fetch the newly created audio var response = await _mediator.Send(new GetAudioQuery(result.Data), cancellationToken); return(Created($"/audios/{response!.Slug}", response)); }
public async Task <ActionResult <int> > Create(CreateAudioCommand command) { command.UserId = _currentUserService.UserId; return(await Mediator.Send(command)); }