O Livrarium Project é uma plataforma de livraria digital desenvolvida para facilitar a compra e aluguel de livros digitais. O sistema oferece uma API RESTful completa para gerenciamento de usuários, catálogo de livros, transações de compra e controle de aluguéis.
Este projeto está sendo desenvolvido como parte da disciplina Princípios de Desenvolvimento Web, do curso de Ciência da Computação.
- CRUD completo de livros
- Busca por título, autor, gênero e ISBN
- Filtros avançados (preço, disponibilidade, ano)
- Controle de disponibilidade
- Estatísticas do catálogo
- CRUD completo de usuários
- Busca por nome e email
- Validação de dados (email, senha)
- Estatísticas de usuários
- Compra de livros digitais
- Múltiplos métodos de pagamento
- Controle de status de pagamento
- Reembolso de compras
- Histórico de compras por usuário
- Verificação de compras anteriores
- Aluguel de livros por período (1-30 dias)
- Controle de devolução
- Detecção automática de atrasos
- Renovação de aluguéis
- Estatísticas de aluguéis
| Tecnologia | Descrição |
|---|---|
| Node.js | Plataforma JavaScript |
| TypeScript | Tipagem estática |
| Express | Framework web |
| Sequelize | ORM para banco de dados |
| PostgreSQL | Banco de dados relacional |
O projeto segue uma arquitetura em camadas (Layered Architecture):
┌─────────────────────────────────────────────────────────────┐
│ ROUTES │
│ (Define endpoints e mapeia para controllers) │
└─────────────────────────┬───────────────────────────────────┘
│
┌─────────────────────────▼───────────────────────────────────┐
│ CONTROLLERS │
│ (Manipula HTTP requests/responses) │
└─────────────────────────┬───────────────────────────────────┘
│
┌─────────────────────────▼───────────────────────────────────┐
│ SERVICES │
│ (Lógica de negócio e validações) │
└─────────────────────────┬───────────────────────────────────┘
│
┌─────────────────────────▼───────────────────────────────────┐
│ REPOSITORIES │
│ (Acesso ao banco de dados) │
└─────────────────────────┬───────────────────────────────────┘
│
┌─────────────────────────▼───────────────────────────────────┐
│ MODELS │
│ (Definição das entidades/tabelas) │
└─────────────────────────────────────────────────────────────┘
back-end/
├── src/
│ ├── config/
│ │ └── database.ts # Configuração do Sequelize
│ ├── controllers/
│ │ ├── BookController.ts # Controller de Livros
│ │ ├── UserController.ts # Controller de Usuários
│ │ ├── PurchaseController.ts # Controller de Compras
│ │ └── RentalController.ts # Controller de Aluguéis
│ ├── dtos/
│ │ ├── BookDTO.ts # DTOs de Livros
│ │ ├── UserDTO.ts # DTOs de Usuários
│ │ ├── PurchaseDTO.ts # DTOs de Compras
│ │ └── RentalDTO.ts # DTOs de Aluguéis
│ ├── errors/
│ │ └── AppError.ts # Classes de erros customizados
│ ├── middlewares/
│ │ └── errorHandler.ts # Middleware de tratamento de erros
│ ├── models/
│ │ ├── Book.ts # Modelo de Livro
│ │ ├── User.ts # Modelo de Usuário
│ │ ├── Purchase.ts # Modelo de Compra
│ │ └── Rental.ts # Modelo de Aluguel
│ ├── repository/
│ │ ├── BookRepository.ts # Repositório de Livros
│ │ ├── UserRepository.ts # Repositório de Usuários
│ │ ├── PurchaseRepository.ts # Repositório de Compras
│ │ └── RentalRepository.ts # Repositório de Aluguéis
│ ├── routes/
│ │ ├── bookRoutes.ts # Rotas de Livros
│ │ ├── userRoutes.ts # Rotas de Usuários
│ │ ├── purchaseRoutes.ts # Rotas de Compras
│ │ └── rentalRoutes.ts # Rotas de Aluguéis
│ ├── services/
│ │ ├── BookService.ts # Service de Livros
│ │ ├── UserService.ts # Service de Usuários
│ │ ├── PurchaseService.ts # Service de Compras
│ │ └── RentalService.ts # Service de Aluguéis
│ └── index.ts # Arquivo principal
├── .env # Variáveis de ambiente
├── package.json
├── tsconfig.json
├── COMO_TESTAR_POSTMAN.md # Guia de testes no Postman
└── README.md
- Node.js 18+
- PostgreSQL 14+
- npm ou yarn
git clone https://github.com/LivrariumProject/back-end.git
cd back-endnpm installCrie um arquivo .env na raiz:
DB_DIALECT=postgres
DB_HOST=localhost
DB_PORT=5432
DB_USER=seu_usuario
DB_PASS=sua_senha
DB_NAME=livrarium
PORT=3000createdb livrariumnpm run devO servidor estará disponível em http://localhost:3000
| Método | Rota | Descrição |
|---|---|---|
GET |
/books |
Listar todos |
GET |
/books/search |
Buscar com filtros |
GET |
/books/available |
Listar disponíveis |
GET |
/books/stats |
Estatísticas |
GET |
/books/isbn/:isbn |
Buscar por ISBN |
GET |
/books/author/:author |
Buscar por autor |
GET |
/books/genre/:genre |
Buscar por gênero |
GET |
/books/:id |
Buscar por ID |
POST |
/books |
Criar livro |
PUT |
/books/:id |
Atualizar livro |
PATCH |
/books/:id/available |
Marcar como disponível |
PATCH |
/books/:id/unavailable |
Marcar como indisponível |
DELETE |
/books/:id |
Deletar livro |
| Método | Rota | Descrição |
|---|---|---|
GET |
/users |
Listar todos |
GET |
/users/search |
Buscar com filtros |
GET |
/users/stats |
Estatísticas |
GET |
/users/email/:email |
Buscar por email |
GET |
/users/name/:name |
Buscar por nome |
GET |
/users/:id |
Buscar por ID |
POST |
/users |
Criar usuário |
PUT |
/users/:id |
Atualizar usuário |
DELETE |
/users/:id |
Deletar usuário |
| Método | Rota | Descrição |
|---|---|---|
GET |
/purchases |
Listar todas |
GET |
/purchases/search |
Buscar com filtros |
GET |
/purchases/stats |
Estatísticas |
GET |
/purchases/user/:userId |
Compras de um usuário |
GET |
/purchases/book/:bookId |
Compras de um livro |
GET |
/purchases/check/:userId/:bookId |
Verificar se já comprou |
GET |
/purchases/:id |
Buscar por ID |
POST |
/purchases |
Criar compra |
PATCH |
/purchases/:id/confirm |
Confirmar pagamento |
PATCH |
/purchases/:id/fail |
Marcar como falho |
PATCH |
/purchases/:id/refund |
Reembolsar |
DELETE |
/purchases/:id |
Deletar compra |
| Método | Rota | Descrição |
|---|---|---|
GET |
/rentals |
Listar todos |
GET |
/rentals/search |
Buscar com filtros |
GET |
/rentals/stats |
Estatísticas |
GET |
/rentals/active |
Listar ativos |
GET |
/rentals/overdue |
Listar atrasados |
GET |
/rentals/user/:userId |
Aluguéis de um usuário |
GET |
/rentals/user/:userId/active |
Ativos de um usuário |
GET |
/rentals/book/:bookId |
Aluguéis de um livro |
GET |
/rentals/:id |
Buscar por ID |
POST |
/rentals |
Criar aluguel |
PATCH |
/rentals/:id/return |
Devolver livro |
PATCH |
/rentals/:id/confirm |
Confirmar pagamento |
PATCH |
/rentals/:id/renew |
Renovar aluguel |
DELETE |
/rentals/:id |
Deletar aluguel |
credit_card- Cartão de créditodebit_card- Cartão de débitopix- PIXboleto- Boleto bancário
| Status | Descrição |
|---|---|
pending |
Aguardando pagamento |
completed |
Pagamento confirmado |
failed |
Pagamento falhou |
refunded |
Pagamento reembolsado |
| Status | Descrição |
|---|---|
active |
Aluguel ativo, livro com o usuário |
returned |
Livro devolvido |
overdue |
Aluguel atrasado |
Consulte o arquivo COMO_TESTAR_POSTMAN.md para instruções detalhadas de como testar a API usando o Postman.
- O projeto está configurado com
sync({ force: true }), que recria as tabelas a cada reinicialização - Para produção, altere para
sync({ alter: true })ousync() - As senhas dos usuários não são retornadas nas respostas por segurança
Desenvolvido para a disciplina de Programação Web - Ciência da Computação.
Este projeto está sob a licença ISC.