예제 #1
0
        public async Task <DeleteVideoCommandResponse> Handle(DeleteVideoCommand request, CancellationToken cancellationToken)
        {
            var server = await _serverRepository.GetAsync(request.ServerId);

            if (server is null)
            {
                _logger.LogInformation($"Não foi encontrado servidor com id {request.ServerId}.");

                return(new DeleteVideoCommandResponse(false, new ServerNotFoundException(request.ServerId)));
            }

            var currentVideo = server.Videos.FirstOrDefault(x => x.Id == request.VideoId);

            if (currentVideo is null)
            {
                _logger.LogInformation($"Não foi encontrado video com id {request.ServerId}.");

                return(new DeleteVideoCommandResponse(false, new VideoNotFoundException(request.VideoId)));
            }

            await _videoRepository.RemoveContent(currentVideo.Path);

            _serverRepository.RemoveVideo(currentVideo);

            await _serverRepository.SaveChangesAsync();

            return(new DeleteVideoCommandResponse(true, null));
        }
예제 #2
0
        public async Task <UpdateServerCommandResponse> Handle(UpdateServerCommand request, CancellationToken cancellationToken)
        {
            var validationResult = await _validator.ValidateAsync(request);

            if (!validationResult.IsValid)
            {
                var errors = validationResult.Errors
                             .Select(x => x.ErrorMessage);

                return(new UpdateServerCommandResponse(null, errors));
            }

            Server currentServer = await _serverRepository.GetAsync(request.Id);

            if (currentServer is null)
            {
                var errors = new List <string> {
                    $"Servidor com identificador {request.Id} não encontrado."
                };

                return(new UpdateServerCommandResponse(null, errors));
            }

            _logger.LogInformation("Atualizando servidor com id {0}", currentServer.Id);

            currentServer.ChangeInfo(request.Name, request.IP, request.Port);

            _serverRepository.Update(currentServer);

            await _serverRepository.SaveChangesAsync();

            _logger.LogInformation("Servidor com id {0} atualizado.", currentServer.Id);

            return(new UpdateServerCommandResponse(currentServer, null));
        }
예제 #3
0
        public async Task <CreateVideoCommandResponse> Handle(CreateVideoCommand request, CancellationToken cancellationToken)
        {
            var server = await _serverRepository.GetAsync(request.ServerId);

            if (server is null)
            {
                var message = $"Não foi encontrado servidor com id {request.ServerId}.";

                return(FormatResponse(message, null));
            }

            try
            {
                String path = await _videoRepository.SaveContent(request.Content);

                var newVideo = server.AddVideo(path, request.Description);

                _serverRepository.Update(server);

                await _serverRepository.SaveChangesAsync();

                return(new CreateVideoCommandResponse(newVideo, null));
            }
            catch (Exception ex)
            {
                var message = $"Não foi possível salvar o conteúdo do vídeo {request.Description}.";

                return(FormatResponse(message, ex));
            }
        }
예제 #4
0
        public async Task <String> Handle(GetVideoContentQuery request, CancellationToken cancellationToken)
        {
            var server = await _serverRepository.GetAsync(request.ServerId);

            var video = server?.Videos?.FirstOrDefault(x => x.Id == request.VideoId);

            return(_videoRepository.GetContent(video?.Path));
        }
예제 #5
0
        public async Task <List <Video> > Handle(ListVideosQuery request, CancellationToken cancellationToken)
        {
            var server = await _serverRepository.GetAsync(request.ServerId);

            if (server is null || server.Videos is null)
            {
                return(new List <Video>(0));
            }

            return(server.Videos.ToList());
        }
예제 #6
0
        public async Task <bool> Handle(CheckServerStatusCommand request, CancellationToken cancellationToken)
        {
            var server = await _serverRepository.GetAsync(request.ServerId);

            if (server is null)
            {
                _logger.LogInformation($"Não foi encontrado servidor com id {request.ServerId}.");

                return(false);
            }

            _logger.LogInformation("Tentativa de chamar o servidor {0} com o endereço {1}:{2}", server.Id, server.IP, server.Port);

            try
            {
                return(server.IsAvailable());
            }
            catch (Exception e)
            {
                _logger.LogError("Ocorreu um erro ao tentar chamar o servidor {0}. Erro: {1}. Stacktrace: {2}", server.Name, e.Message, e.StackTrace);

                return(false);
            }
        }
예제 #7
0
        public async Task <RecoverVideoCommandResponse> Handle(RecoverVideoCommand request, CancellationToken cancellationToken)
        {
            var server = await _serverRepository.GetAsync(request.ServerId, true);

            if (server is null)
            {
                return(FormatResponse($"Não foi encontrado servidor com id {request.ServerId}."));
            }

            var currentVideo = server.Videos.FirstOrDefault(x => x.Id == request.VideoId);

            if (currentVideo is null)
            {
                return(FormatResponse($"Não foi encontrado video com id {request.VideoId}."));
            }

            //TODO: recuperar dados de arquivo não é possível após exclusão, teria que mover para uma "lixeira lógica" por exemplo

            _serverRepository.RecoverVideo(currentVideo);

            await _serverRepository.SaveChangesAsync();

            return(new RecoverVideoCommandResponse(true, null));
        }
예제 #8
0
        public async Task <Video> Handle(GetVideoQuery request, CancellationToken cancellationToken)
        {
            var server = await _serverRepository.GetAsync(request.ServerId);

            return(server?.Videos?.FirstOrDefault(x => x.Id == request.VideoId));
        }