API REST para gerenciamento de biblioteca com autenticação JWT, controle de livros/autores/clientes e fluxo de empréstimos.
- Python 3.12+
- FastAPI
- SQLAlchemy
- SQLite
- Pydantic
- Uvicorn
.
├── api/ # Rotas HTTP
├── core/ # Configuração de banco e segurança
├── models/ # Modelos SQLAlchemy
├── repository/ # Acesso a dados (CRUD)
├── schemas/ # Schemas Pydantic
├── services/ # Regras de negócio (empréstimo)
├── main.py # Ponto de entrada da aplicação
└── requiriments.txt
- Python 3.12 ou superior
pip
python -m venv .venvNo PowerShell:
.venv\Scripts\Activate.ps1Instalar dependências:
pip install -r requiriments.txtuvicorn main:app --reloadAplicação: http://127.0.0.1:8000
Swagger UI: http://127.0.0.1:8000/docs
ReDoc: http://127.0.0.1:8000/redoc
- O projeto usa SQLite com arquivo local
database.db. - As tabelas são criadas automaticamente ao iniciar (
Base.metadata.create_all(...)emmain.py). - String de conexão atual:
sqlite:///./database.db.
As rotas de domínio (/book, /author, /client, /loan) exigem token Bearer.
POST /auth/register
Exemplo:
{
"name": "Admin",
"email": "admin@biblioteca.com",
"password": "123456"
}POST /auth/login usando application/x-www-form-urlencoded:
username= e-mailpassword= senha
Resposta esperada:
{
"access_token": "jwt-token",
"token_type": "bearer"
}Authorization: Bearer <access_token>POST /auth/registerPOST /auth/login
POST /book/GET /book/GET /book/{book_id}PATCH /book/{book_id}DELETE /book/{book_id}
Payload de criação:
{
"title": "Clean Code",
"pages": 464,
"stock": 5,
"author_ids": [1, 2]
}POST /author/GET /author/GET /author/{author_id}PATCH /author/{author_id}DELETE /author/{author_id}
POST /client/GET /client/PATCH /client/{client_id}DELETE /client/{client_id}
POST /loan/GET /loan/GET /loan/{loan_id}GET /loan/client/{client_id}PATCH /loan/{loan_id}(finaliza empréstimo)DELETE /loan/{loan_id}
Payload de criação:
{
"client_id": 1,
"book_id": 2,
"active": true,
"return_date": "2026-03-20",
"fine_amount": 0
}- Limite de até 10 empréstimos por cliente.
- Não permite empréstimo quando o estoque do livro é
0. - Ao criar empréstimo, o estoque do livro diminui em
1. - Ao finalizar empréstimo, o estoque aumenta em
1. - Se finalizar após
return_date, o empréstimo recebeis_late = true.
- CORS está liberado para qualquer origem (
*). - O arquivo de dependências está nomeado como
requiriments.txt.