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
# 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
# Setup completo do projeto
make setup
# Ambiente de desenvolvimento
make dev
# Construir e iniciar
make build
make up
# Ver logs
make logs
# Executar testes
make test
make test-cov
# Linting e formatação
make lint
make format
# Verificar saúde da API
make health
# Parar serviços
make down
# Limpeza completa
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.py
# 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)