Skip to content

LivrariumProject/back-end

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

13 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“š Livrarium Project - Backend API

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.

πŸš€ Funcionalidades

πŸ“š GestΓ£o de Livros

  • 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

πŸ‘€ GestΓ£o de UsuΓ‘rios

  • CRUD completo de usuΓ‘rios
  • Busca por nome e email
  • ValidaΓ§Γ£o de dados (email, senha)
  • EstatΓ­sticas de usuΓ‘rios

πŸ›’ Sistema de Compras

  • 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

πŸ“– Sistema de AluguΓ©is

  • 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

πŸ› οΈ Tecnologias Utilizadas

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

πŸ—οΈ Arquitetura

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)                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“ Estrutura do Projeto

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

πŸš€ Como Executar

PrΓ©-requisitos

  • Node.js 18+
  • PostgreSQL 14+
  • npm ou yarn

1. Clonar o repositΓ³rio

git clone https://github.com/LivrariumProject/back-end.git
cd back-end

2. Instalar dependΓͺncias

npm install

3. Configurar variΓ‘veis de ambiente

Crie 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=3000

4. Criar o banco de dados

createdb livrarium

5. Iniciar o servidor

npm run dev

O servidor estarΓ‘ disponΓ­vel em http://localhost:3000

πŸ“‘ API Endpoints

πŸ“š Livros (/books)

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

πŸ‘€ UsuΓ‘rios (/users)

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

πŸ›’ Compras (/purchases)

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

πŸ“– AluguΓ©is (/rentals)

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

πŸ’³ MΓ©todos de Pagamento

  • credit_card - CartΓ£o de crΓ©dito
  • debit_card - CartΓ£o de dΓ©bito
  • pix - PIX
  • boleto - Boleto bancΓ‘rio

πŸ“Š Status

Status de Pagamento

Status DescriΓ§Γ£o
pending Aguardando pagamento
completed Pagamento confirmado
failed Pagamento falhou
refunded Pagamento reembolsado

Status de Aluguel

Status DescriΓ§Γ£o
active Aluguel ativo, livro com o usuΓ‘rio
returned Livro devolvido
overdue Aluguel atrasado

πŸ§ͺ Testes

Consulte o arquivo COMO_TESTAR_POSTMAN.md para instruΓ§Γ΅es detalhadas de como testar a API usando o Postman.

⚠️ Observaçáes

  • O projeto estΓ‘ configurado com sync({ force: true }), que recria as tabelas a cada reinicializaΓ§Γ£o
  • Para produΓ§Γ£o, altere para sync({ alter: true }) ou sync()
  • As senhas dos usuΓ‘rios nΓ£o sΓ£o retornadas nas respostas por seguranΓ§a

πŸ‘¨β€πŸ’» Autores

Desenvolvido para a disciplina de ProgramaΓ§Γ£o Web - CiΓͺncia da ComputaΓ§Γ£o.

πŸ“„ LicenΓ§a

Este projeto estΓ‘ sob a licenΓ§a ISC.

About

Back-end da biblioteca Livrarium.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •