Ejemplo n.º 1
0
        public async Task <ActionResult <ImageUploadResponse> > AddPicture(long audioId, [FromBody] ImageUploadRequest request,
                                                                           CancellationToken cancellationToken)
        {
            var command = new UpdateAudioPictureCommand(audioId, request.Data);
            var result  = await _mediator.Send(command, cancellationToken);

            return(result.IsSuccess
                ? Ok(result.Data)
                : result.ReturnErrorResponse());
        }
        public async Task <Result <ImageUploadResponse> > Handle(UpdateAudioPictureCommand command,
                                                                 CancellationToken cancellationToken)
        {
            _currentUserService.User.TryGetUserId(out var currentUserId);

            var audio = await _unitOfWork.Audios.FindAsync(command.AudioId, cancellationToken);

            if (audio == null)
            {
                return(Result <ImageUploadResponse> .NotFound <Audio>());
            }

            if (audio.UserId != currentUserId)
            {
                return(Result <ImageUploadResponse> .Forbidden());
            }

            var blobName = string.Empty;

            if (string.IsNullOrEmpty(command.Data))
            {
                await RemoveOriginalPicture(audio.Picture, cancellationToken);

                audio.Picture = null;
            }
            else
            {
                blobName = $"{await _randomIdGenerator.GenerateAsync(size: 15)}.jpg";
                await _imageService.UploadImage(command.Data, AssetContainerConstants.AUDIO_PICTURES, blobName, cancellationToken);
                await RemoveOriginalPicture(audio.Picture, cancellationToken);

                audio.Picture = blobName;
            }

            await _unitOfWork.SaveChangesAsync(cancellationToken);

            await _cache.RemoveAsync(CacheKeys.Audio.GetAudio(command.AudioId), cancellationToken);

            return(Result <ImageUploadResponse> .Success(new ImageUploadResponse
            {
                Url = MediaLinkConstants.AUDIO_PICTURE + blobName
            }));
        }