Skip to content

diegohat/digital-library-api

Repository files navigation

📚 Digital Library API

API para gerenciamento de livros, usuários e empréstimos, construída com NestJS, Prisma e PostgreSQL.

License: GPL v3
Node.js
PostgreSQL
Swagger Docs

NestJS


📖 Sumário


💡 Sobre o projeto

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

🛠 Tecnologias


📋 Pré-requisitos

  • Node.js >= 18
  • Yarn >= 1.22
  • PostgreSQL >= 14

🚀 Instalação

# Clone o repositório
git clone https://github.com/seu-usuario/digital-library-api.git
cd digital-library-api

# Instale as dependências
yarn install

🗄 Configuração do Banco de Dados

Crie 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

⚡ Uso rápido

# Desenvolvimento (hot reload)
yarn start:dev

# Produção
yarn start

Exemplo de requisição:

curl -X POST http://localhost:3000/books \
  -H "Content-Type: application/json" \
  -d '{"title": "Clean Code", "author": "Robert C. Martin"}'

📑 Documentação com Swagger

Abrir Swagger UI

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

Configuração no main.ts

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);

Anotações nos Endpoints

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);
}

📌 Endpoints principais

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

🧪 Testes

# Executa testes
yarn test

# Gera relatório de cobertura
yarn test:cov

📄 Licença

Este projeto está sob a licença GPL-3.0 — veja o arquivo LICENSE para mais detalhes.


About

Simple digital library Restful API example

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors