Skip to content

PythonFloripa/PyNewsServer

Repository files navigation

pynewsserver

Serviço de Noticas e Bibliotecas PyNews

💡 Visão Geral

💻 Tecnologias Utilizadas

- Python 
    - FastAPI 
    - Pydantic
    - Poetry
    - Sqlite3
    - Orjson
    - ruff (linter)

🚀 Recursos e Funcionalidades

Endpoints para CRUD de noticias selecionadas pela comunidade. 

Schema da API

[Documentação de referencia API Dog](https://apidog.com/apidoc/shared/70418cab-ddba-4c7d-97a4-8b70b43a7946/)

Schema do Servidor

    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
 

Loading

⚙️ Como Rodar

📋 Pré-requisitos

  • Docker e Docker Compose instalados
  • Git (para clonar o repositório)

🚀 Início Rápido

  1. Clone o repositório:

    git clone <repository-url>
    cd PyNewsServer
  2. Configure as variáveis de ambiente (opcional):

    cp .env.example .env
    # Edite o arquivo .env conforme necessário
  3. Inicie o serviço:

    docker-compose up -d
  4. Acesse a aplicação:

🧩 Configuração Inicial

▶️ Guia de Execução para Desenvolvimento

Usando Docker (Recomendado)

# 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

Usando Poetry (Local)

# 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 .

▶️ Guia de Execução para Produção

# 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

🔧 Comandos Úteis

Usando Makefile (Recomendado)

# 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

Comandos Docker Diretos

# 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

🛠️ Desenvolvimento

Estrutura de Testes

# 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

Linting e Formatação

# Verificar código
poetry run ruff check .

# Formatar código
poetry run ruff format .

# Fix automático de problemas
poetry run ruff check . --fix

referencias

[Opinion based fastapi best practices](https://github.com/zhanymkanov/fastapi-best-practices)

About

Serviço de Noticas e Bibliotecas Pynwes

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •