Sistema de download de vídeos do YouTube.
- ✅ Clean Architecture - Separação clara de responsabilidades em camadas
- ✅ SOLID Principles - Código manutenível e extensível
- ✅ Type Hints - Tipagem estática para melhor autocomplete e validação
- ✅ Dependency Injection - Baixo acoplamento entre componentes
- ✅ Exception Handling - Tratamento robusto de erros
- ✅ Logging - Sistema completo de rastreamento
- ✅ Unit Tests - Cobertura de testes > 80%
- ✅ Cross-platform - Funciona em Windows, Linux e macOS
- ✅ CI/CD - Pipeline completo com GitHub Actions
- ✅ Security Scanning - CodeQL para análise de vulnerabilidades
- ✅ Auto-updates - Dependabot para manter dependências atualizadas
src/
├── domain/ # Regras de negócio e abstrações
│ ├── entities.py # Entidades do domínio
│ ├── repositories.py # Interfaces de repositórios
│ ├── services.py # Interfaces de serviços
│ └── exceptions.py # Exceções customizadas
├── usecases/ # Casos de uso da aplicação
│ └── download_video.py
├── infrastructure/ # Implementações concretas
│ ├── sqlite_repo.py # Repositório SQLite
│ └── yt_dlp_service.py # Serviço de download
└── presentation/ # Interface com usuário
└── cli.py # Interface CLI
graph TD
A[CLI<br/>Presentation Layer] --> B[DownloadVideo<br/>Use Case]
B --> C[Domain Layer<br/>Entities & Interfaces]
D[SQLite Repository<br/>Infrastructure] --> C
E[yt-dlp Service<br/>Infrastructure] --> C
style A fill:#e1f5ff
style B fill:#fff4e1
style C fill:#e8f5e9
style D fill:#fce4ec
style E fill:#fce4ec
- Python 3.10 ou superior
- pip
- Clone o repositório:
git clone https://github.com/rafaelmachadobr/video-download-youtube.git
cd video-download-youtube- Instale as dependências:
pip install -r requirements.txtpython main.pypytestpytest --cov=src --cov-report=htmlpytest tests/usecases/test_download_video.py# Gera relatório HTML
pytest --cov=src --cov-report=html
# Abra htmlcov/index.html no navegadorflake8 src/black src/ tests/mypy src/yt-dlp- Download de vídeos
pytest- Framework de testespytest-cov- Cobertura de códigoflake8- Linterblack- Formatador de códigomypy- Type checker
O projeto utiliza GitHub Actions para automação completa:
- ✅ Executa em: Push e Pull Requests
- ✅ Testa em múltiplos ambientes:
- OS: Ubuntu, Windows, macOS
- Python: 3.8, 3.9, 3.10, 3.11, 3.12
- ✅ Validações:
- Linting com flake8
- Testes com pytest
- Cobertura mínima de 80%
- Formatação com black
- Type checking com mypy
- ✅ Upload de cobertura para Codecov
- ✅ Dispara ao criar tags
v*(ex:v1.0.0) - ✅ Cria releases automaticamente no GitHub
- ✅ Roda todos os testes antes da release
- ✅ Análise de segurança com CodeQL
- ✅ Executa semanalmente e em PRs
- ✅ Detecta vulnerabilidades automaticamente
- Cada classe tem uma única responsabilidade
DownloadVideo- apenas orquestra o downloadSQLiteVideoRepository- apenas persiste dadosYTDLPService- apenas faz download
- Aberto para extensão, fechado para modificação
- Novas implementações de
VideoRepositorypodem ser criadas sem alterar código existente
- Implementações podem ser substituídas pelas interfaces
SQLiteVideoRepositorypode ser substituído por qualquer implementação deVideoRepository
- Interfaces específicas e coesas
VideoRepositoryeVideoDownloaderServicetêm métodos bem definidos
- Dependências apontam para abstrações
DownloadVideodepende deVideoRepositoryeVideoDownloaderService(abstrações), não de implementações concretas
Os logs são salvos automaticamente em arquivos separados por data:
- Formato:
logs/YYYY-MM-DD.log(ex:2026-02-09.log) - Conteúdo: Informações de execução, erros, exceções e timestamps
- Console: Logs não são exibidos no terminal (apenas salvos em arquivo)
- Organização: Um arquivo por dia para facilitar análise histórica
Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para detalhes.