API para gerenciamento de livros, usuários e empréstimos, construída com NestJS, Prisma e PostgreSQL.
- Sobre o projeto
- Tecnologias
- Pré-requisitos
- Instalação
- Configuração do Banco de Dados
- Uso rápido
- Documentação com Swagger
- Endpoints principais
- Testes
- Contribuição
- Licença
A Digital Library API é uma solução para controle de bibliotecas, permitindo:
- 📕 Cadastro e listagem de livros (com filtros)
- 👤 Gerenciamento de usuários
- 🔄 Empréstimos e devoluções com atualização de status
- ✅ Validação e testes automatizados com Jest
- NestJS (Node.js + TypeScript)
- Prisma ORM (PostgreSQL)
- Jest (Testes)
- Winston (Logger)
- Class-validator (Validação)
- Swagger (Documentação interativa)
- Node.js >= 18
- Yarn >= 1.22
- PostgreSQL >= 14
# Clone o repositório
git clone https://github.com/seu-usuario/digital-library-api.git
cd digital-library-api
# Instale as dependências
yarn installCrie um arquivo .env baseado no exemplo abaixo:
DATABASE_URL="postgresql://usuario:senha@localhost:5432/digital_library"Depois, execute:
# Aplica migrações
yarn prisma migrate deploy
# Gera o cliente Prisma
yarn prisma generate# Desenvolvimento (hot reload)
yarn start:dev
# Produção
yarn startExemplo de requisição:
curl -X POST http://localhost:3000/books \
-H "Content-Type: application/json" \
-d '{"title": "Clean Code", "author": "Robert C. Martin"}'A API possui documentação interativa via Swagger para facilitar o uso e teste dos endpoints.
📍 Acesse após iniciar o projeto:
http://localhost:3000/api
📍 Especificação em JSON:
http://localhost:3000/api-json
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
const config = new DocumentBuilder()
.setTitle('Digital Library API')
.setDescription('API para gerenciamento de livros, usuários e empréstimos')
.setVersion('1.0')
.addTag('books')
.addTag('users')
.addTag('loans')
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('api', app, document);Uso de decorators como @ApiTags, @ApiOperation e @ApiResponse para descrever as rotas:
@ApiTags('books')
@Post()
@ApiOperation({ summary: 'Create a new book' })
@ApiResponse({ status: 201, description: 'The book has been successfully created.' })
async create(@Body() dto: CreateBookDto) {
return await this.booksService.create(dto);
}| Método | Rota | Descrição | Parâmetros/Corpo |
|---|---|---|---|
| POST | /books |
Cadastra um novo livro | { title, author } |
| GET | /books?status=&title= |
Lista livros com filtros | Query: status, title |
| PATCH | /books/:id/status |
Atualiza status do livro | { status } |
| POST | /users |
Cadastra um novo usuário | { name, email } |
| POST | /loans |
Realiza empréstimo de livro | { userId, bookId } |
| PATCH | /loans/:id/return |
Devolve livro | — |
# Executa testes
yarn test
# Gera relatório de cobertura
yarn test:covEste projeto está sob a licença GPL-3.0 — veja o arquivo LICENSE para mais detalhes.