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
erDiagram
users {
integer id PK
string username
string email
string password
}
news {
integer id PK
string title
string content
string category
string source_url
string social_media_url
string likes
datetime created_at
datetime updated_at
integer user_id FK
integer library_id FK
}
libraries {
integer id PK
string library_name
string releases_url
string logo
string fixed_release_url
string releases_urls_list
integer user_id FK
}
tags {
integer id PK
string name
}
Subscription {
integer id PK
string email
}
users ||--o{ news : publishes
users ||--o{ libraries : manages
news }o--|| libraries : relates_to
news }o--o{ tags : covers
Subscription }o--o{ libraries : follows
Subscription }o--o{ tags : tracks
[TBD]
[Opinion based fastapi best practices](https://github.com/zhanymkanov/fastapi-best-practices)