Skip to content

rafaelladuarte/booktrack-fastapi

Repository files navigation

BookTrack API – Gerenciamento de Livros com FastAPI

Python PostgreSQL Docker

FastAPI Alembic SQLAlchemy

alt text

Descrição

BookTrack API é uma aplicação backend desenvolvida em FastAPI para o gerenciamento e análise de uma biblioteca pessoal. O sistema permite cadastrar livros, acompanhar o progresso de leitura, importar coleções via CSV e gerar análises literárias por gênero, autor e status de leitura.

Além de servir como ferramenta pessoal, o projeto oferece uma view pública limitada, possibilitando que terceiros explorem parte do acervo de forma segura.

A modelagem segue o padrão Star Schema, integrando conceitos de engenharia de dados e boas práticas de APIs REST. Este projeto foi idealizado como um estudo prático de POO em Python, FastAPI, modelagem de dados e deploy em nuvem.

🗂 Estrutura do Projeto

booktrack_api/
  ├── booktrack_fastapi/
  │   ├── core/              # Configurações gerais
  │   ├── models/            # Modelos SQLAlchemy
  │   ├── schemas/           # Schemas Pydantic
  │   ├── repositories/      # Acesso ao banco
  │   ├── services/          # Regras de negócio
  │   ├── routers/           # Rotas da API
  │   ├── utils/             # Funções auxiliares
  │   └── main.py            # Ponto de entrada
  ├── alembic/               # Migrações
  ├── requirements.txt
  ├── README.md
  └── .env.example

📚 Exemplos de Endpoints

➕ Criar um livro

POST /books/

{
  "title": "1984",
  "original_publication_year": 1949,
  "total_pages": 328,
  "publisher_id": 1,
  "author_id": 3,
  "format_id": 1,
  "category_id": 6
}

🔍 Filtrar livros

GET /books/?author_id=3&year=1949


📘 Exemplo de retorno expandido

{
  "id": 1,
  "title": "1984",
  "publisher": {
    "id": 1,
    "name": "Penguin Books"
  },
  "format": {
    "id": 1,
    "name": "Físico"
  },
  "author": {
    "id": 3,
    "name": "George Orwell"
  }
}

🎯 Objetivos do Projeto

  • Criar uma API robusta em FastAPI
  • Organizar tudo em camadas (Routers → Service → Repository → DB)
  • Implementar consultas complexas
  • Criar leitura expandida (view SQL)
  • Proteger dados sensíveis com versão pública
  • Desenvolver habilidades em backend moderno

Checklist de Desenvolvimento da API BookTrack

  • Planejar funcionalidades
  • Criar diagrama ER
  • Implementar models SQLAlchemy
  • Criar rotas CRUD de Livros
  • Escrever testes
  • Configurar deploy no Render

Diagrama ER – Modelo Estrela

erDiagram
    %% ========== 1. BASIC DIMENSIONS ==========
    AUTHORS {
        int id PK
        varchar name
        varchar gender "M/F"
        varchar country_of_origin
    }

    PUBLISHERS {
        int id PK
        varchar name UK
    }

    COLLECTIONS {
        int id PK
        varchar name
    }

    SHELVES {
        int id PK
        varchar name UK
    }

    FORMATS {
        int id PK
        varchar name UK
    }

    READING_STATUS {
        int id PK
        varchar name UK
    }

    TAGS {
        int id PK
        varchar name UK
    }

    %% ========== 2. HIERARCHICAL CATEGORIES ==========
    CATEGORIES {
        int id PK
        varchar name
        int parent_id FK "NULL = root category"
    }

    %% ========== 3. BOOKS ==========
    BOOKS {
        int id PK
        int publisher_id FK
        int collection_id FK
        int format_id FK
        int category_id FK 
        int authors FK
        varchar title
        int original_publication_year
        int total_pages
        text cover_url
        
    }

    %% ========== 5. READINGS ==========
    READINGS {
        int id PK
        int book_id FK
        int status_id FK
        date start_date
        date end_date
        int pages_read
        varchar personal_goal
        date club_date
        varchar club_name
    }

    %% ========== RELATIONSHIPS ==========
    %% Book → Publishers (1:N)
    PUBLISHERS ||--o{ BOOKS : "publishes"

    %% Book → Collections (1:N)
    COLLECTIONS ||--o{ BOOKS : "contains"

    %% Book → Formats (1:N)
    FORMATS ||--o{ BOOKS : "has"

    %% Book → Authors (N:N)
    BOOKS }o--o{ AUTHORS : "written by"

    %% Book → Categories (N:N)
    BOOKS }o--o{ CATEGORIES : "classified as"

    %% Category → Category (self-relationship)
    CATEGORIES }o--o{ CATEGORIES : "sub-category of"

    %% Reading → Book (N:1)
    BOOKS ||--o{ READINGS : "has readings"

    %% Reading → ReadingStatus (N:1)
    READING_STATUS ||--o{ READINGS : "defines"

    %% Reading → Tags (N:N)
    READINGS }o--o{ TAGS : "tagged with"

    %% Reading → Shelves (N:N)
    READINGS }o--o{ SHELVES : "stored in"
Loading

About

API em FastAPI para gerenciamento e análise de biblioteca pessoal, inspirada no curso FastAPI do Zero.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors