Пример #1
0
        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;
            }
        }
Пример #2
0
        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));
        }
Пример #3
0
        public async Task <ActionResult <int> > Create(CreateAudioCommand command)
        {
            command.UserId = _currentUserService.UserId;

            return(await Mediator.Send(command));
        }