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.