Serviço de Noticas e Bibliotecas PyNews
- Python
- FastAPI
- Pydantic
- Poetry
- Sqlite3
- Orjson
- ruff (linter)
Endpoints para CRUD de noticias selecionadas pela comunidade.
[Documentação de referencia API Dog](https://apidog.com/apidoc/shared/70418cab-ddba-4c7d-97a4-8b70b43a7946/)
fastapi_news_service/
│
├── app/
│ ├── __init__.py # Marca 'app' como um pacote Python
│ ├── main.py # Ponto de entrada principal da aplicação FastAPI e inclusão dos routers
│ ├── schemas.py # Definições dos modelos Pydantic para todas as entidades (User, News, Library, Subscription)
│ │
│ ├── services/
│ │ ├── __init__.py # Marca 'services' como um pacote Python
│ │ ├── database.py # Lógica de conexão e gerenciamento de sessão com o banco de dados (SQLAlchemy/SQLModel)
│ │ ├── auth.py # Lógica de negócio para autenticação (hashing de senhas, geração/validação de JWT)
│ │
│ └── routers/
│ ├── __init__.py # Marca 'routers' como um pacote Python
│ ├── news.py # Definição dos endpoints da API para o módulo de Notícias (/news)
│ ├── libraries.py # Definição dos endpoints da API para o módulo de Libraries (/libraries)
│ └── authentication.py # Definição dos endpoints da API para o módulo de Autenticação (/auth)
│
├── test/ # Diretório para testes unitários
│ └── __init__.py
│ └── test_auth.py
│ └── test_news.py
│ └── test_libraries.py
│
├── .env # Arquivo para variáveis de ambiente (ex: credenciais do banco de dados, chave secreta JWT)
├── .gitignore # Regras para ignorar arquivos e diretórios no controle de versão (Git)
├── requirements.txt # Lista das dependências Python do projeto
├── Dockerfile # Definição para construir a imagem Docker da aplicação
├── docker-compose.yaml # Configuração para orquestrar serviços Docker (API, banco de dados)
├── Makefile # Utilitário para automação de tarefas (build, deploy, etc., incluindo scripts para Kubernetes)
├── pyproject.toml # Configuração de projeto Python (Poetry)
├── README.md # Este arquivo: Visão geral do projeto, instruções de configuração e uso
└── .vscode/ # Configurações específicas para o ambiente de desenvolvimento VS Code
├── settings.json # Configurações de formatação, linting, etc.
└── launch.json # Configurações para depuração da aplicação
sequenceDiagram
participant Cliente as Cliente
participant ServicoAutenticacao as Serviço de Autenticação
participant ServicoNoticias as Serviço de Notícias
activate Cliente
Cliente->>ServicoAutenticacao: Solicitar Login (credenciais)
activate ServicoAutenticacao
ServicoAutenticacao-->>Cliente: Retornar JWT (Token de Acesso)
deactivate ServicoAutenticacao
Cliente->>ServicoNoticias: Solicitar Criação de Notícia (dados da notícia, JWT)
activate ServicoNoticias
ServicoNoticias-->>Cliente: Notícia Criada (201 Created)
deactivate ServicoNoticias
deactivate Cliente
- Docker e Docker Compose instalados
- Git (para clonar o repositório)
-
Clone o repositório:
git clone <repository-url> cd PyNewsServer
-
Configure as variáveis de ambiente (opcional):
cp .env.example .env # Edite o arquivo .env conforme necessário -
Inicie o serviço:
docker-compose up -d
-
Acesse a aplicação:
- API: http://localhost:8000
- Documentação Swagger: http://localhost:8000/docs
- Health Check: http://localhost:8000/api/healthcheck
O projeto utiliza SQLite como banco de dados com as seguintes características:
- Persistência: Dados armazenados em
./data/pynewsdb.db - Async Support: Utiliza
aiosqlitepara operações assíncronas - ORM: SQLModel para mapeamento objeto-relacional
- Auto-inicialização: Banco e tabelas criados automaticamente na primeira execução
Para mais detalhes sobre configuração do SQLite, consulte: docs/sqlite-setup.md
# Construir e iniciar em modo desenvolvimento
docker-compose up --build
# Ver logs em tempo real
docker-compose logs -f pynews-api
# Parar o serviço
docker-compose down# Instalar dependências
poetry install
# Ativar ambiente virtual
poetry shell
# Rodar a aplicação
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
# Rodar testes
poetry run pytest
# Linting
poetry run ruff check .
poetry run ruff format .# Construir imagem para produção
docker-compose build --target production
# Iniciar em modo produção
docker-compose up -d
# Verificar status dos containers
docker-compose ps
# Ver logs
docker-compose logs pynews-api
# Atualizar aplicação
docker-compose pull
docker-compose up -d --force-recreate# Ver todos os comandos disponíveis
make help
# Instalar dependências com Poetry
make install
# Setup completo do projeto (instala, constrói e sobe containers)
make setup
# Construir imagens Docker
make build
# Iniciar serviços
make up
# Parar serviços
make down
# Reiniciar serviços
make restart
# Ver logs da API
make logs
# Acessar shell dentro do container da API
make shell
# Executar testes locais
make test
# Executar testes com coverage
make test-cov
# Executar testes dentro do container Docker
make docker-test
# Executar testes com ScanAPI e gerar report que pode ser acessado na porta 8080 no path {url}/scanapi-report.html
make scanapi-test
# Verificar código com Ruff
make lint
# Formatar código com Ruff
make format
# Verificar saúde da API
make health
# Ambiente de desenvolvimento completo
make dev
# Iniciar em modo produção
make prod
# Limpeza completa de containers, volumes e imagens
make clean# Entrar no container
docker-compose exec pynews-api bash
# Reiniciar apenas o serviço da API
docker-compose restart pynews-api
# Verificar health check
curl http://localhost:8000/api/healthcheck
# Parar e remover todos os containers e volumes
docker-compose down -v# Rodar todos os testes
poetry run pytest
# Rodar testes com coverage
poetry run pytest --cov=app
# Rodar testes específicos
poetry run pytest tests/test_auth.pyRequisitos para utilizar ScanAPI
- Criar .env.test seguindo o exemplo em .env.example com as credenciais necessárias
# Verificar código
poetry run ruff check .
# Formatar código
poetry run ruff format .
# Fix automático de problemas
poetry run ruff check . --fix[Opinion based fastapi best practices](https://github.com/zhanymkanov/fastapi-best-practices)