Skip to content

gabrieladnz/web-booking

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

24 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🏨 JalaBooking

Sistema completo de reservas de hotΓ©is com arquitetura moderna e escalΓ‘vel

Node.js Version NestJS Angular TypeScript


πŸ“‹ Índice


🎯 Sobre o projeto

O JalaBooking Γ© uma plataforma moderna de reservas hoteleiras que oferece uma experiΓͺncia completa tanto para hΓ³spedes quanto para gestores de hotΓ©is. O sistema foi projetado com foco em escalabilidade, seguranΓ§a e performance, implementando as melhores prΓ‘ticas de desenvolvimento de software.

Diferenciais

  • GestΓ£o Precisa de InventΓ‘rio: DistinΓ§Γ£o clara entre tipos de quarto e quartos fΓ­sicos individuais.
  • Sistema Anti-Overbooking: TransaΓ§Γ΅es atΓ΄micas com bloqueios pessimistas.
  • SeguranΓ§a Robusta: AutenticaΓ§Γ£o JWT com rotaΓ§Γ£o de refresh tokens.
  • Arquitetura ExtensΓ­vel: Preparado para funcionalidades futuras (RBAC, painel admin).
  • PolΓ­tica de Cancelamento Inteligente: Regras de negΓ³cio aplicadas no backend.

✨ Funcionalidades

Para hΓ³spedes

  • βœ… Cadastro e autenticaΓ§Γ£o segura de usuΓ‘rios.
  • πŸ” Busca avanΓ§ada de hotΓ©is por localizaΓ§Γ£o, datas e capacidade.
  • 🏷️ Filtros de preΓ§o e ordenaΓ§Γ£o de resultados.
  • πŸ“… CriaΓ§Γ£o de reservas com verificaΓ§Γ£o de disponibilidade em tempo real.
  • πŸ“‹ VisualizaΓ§Γ£o do histΓ³rico de reservas (futuras e passadas).
  • ❌ Cancelamento de reservas com polΓ­tica automΓ‘tica (gratuito atΓ© 3 dias antes).
  • πŸ‘€ GestΓ£o de perfil pessoal.

Para o sistema

  • πŸ” Controle de acesso baseado em funΓ§Γ΅es (RBAC ready).
  • πŸ›‘οΈ ProteΓ§Γ£o contra race conditions na criaΓ§Γ£o de reservas.
  • πŸ”„ Refresh token rotation para seguranΓ§a aprimorada.
  • πŸ“Š Sistema de disponibilidade computada dinamicamente.
  • πŸ—„οΈ Modelo de dados normalizado e otimizado.

πŸ—οΈ Arquitetura

Arquitetura em camadas

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      Frontend (Angular + Viun)     β”‚
β”‚  - Components  - Services  - Guards β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
			  β”‚ REST API
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         NestJS Backend              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚      Controllers Layer              β”‚
β”‚  - Decorators  - DTOs  - Pipes      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚      Services Layer                 β”‚
β”‚  - Business Logic  - Validators     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚      Repository Layer               β”‚
β”‚  - Prisma ORM  - Entities           β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚         Database Layer              β”‚
β”‚  PostgreSQL / MySQL                 β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Modelo de dados (MER)

User (1) ──────< (N) Booking
					 β”‚
Hotel (1) ───< (N) RoomType (1) ───< (N) Room
										  β”‚
										  └──< (1) Booking

DecisΓ£o ArquitetΓ΄nica crΓ­tica: A separaΓ§Γ£o entre RoomType (categoria abstrata) e Room (unidade fΓ­sica) permite gestΓ£o precisa de inventΓ‘rio e previne overbooking.


πŸ› οΈ Tecnologias

Backend

  • Framework: NestJS 10+
  • Runtime: Node.js (β‰₯18.0.0)
  • Linguagem: TypeScript 5+
  • ORM: Prisma
  • Banco de Dados: PostgreSQL (recomendado) / MySQL
  • AutenticaΓ§Γ£o: @nestjs/jwt + @nestjs/passport
  • Criptografia: bcrypt
  • ValidaΓ§Γ£o: class-validator + class-transformer
  • DocumentaΓ§Γ£o: @nestjs/swagger (OpenAPI)
  • Testes: Jest + Supertest
  • Config Management: @nestjs/config

Frontend

  • Framework: Angular 17+
  • Linguagem: TypeScript 5+
  • State Management: RxJS + Services
  • Roteamento: Angular Router
  • RequisiΓ§Γ΅es HTTP: HttpClient (Angular)
  • FormulΓ‘rios: Reactive Forms
  • ValidaΓ§Γ£o: Validators personalizados
  • EstilizaΓ§Γ£o: SCSS + Angular Material (opcional)
  • Testes: Jasmine + Karma

πŸ—„οΈ Estrutura do banco de dados

Tabela: Users

CREATE TABLE Users (
	id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
	firstName VARCHAR(100) NOT NULL,
	lastName VARCHAR(100) NOT NULL,
	email VARCHAR(255) NOT NULL UNIQUE,
	password VARCHAR(255) NOT NULL,
	birthDate DATE NOT NULL,
	role VARCHAR(50) NOT NULL DEFAULT 'USER',
	createdAt TIMESTAMP NOT NULL DEFAULT NOW(),
	updatedAt TIMESTAMP NOT NULL DEFAULT NOW()
);

Tabela: Hotels

CREATE TABLE Hotels (
	id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
	name VARCHAR(255) NOT NULL,
	address VARCHAR(255) NOT NULL,
	city VARCHAR(100) NOT NULL,
	country VARCHAR(100) NOT NULL,
	description TEXT,
	imageUrl VARCHAR(255),
	rating DECIMAL(2,1)
);

CREATE INDEX idx_hotels_city ON Hotels(city);

Tabela: RoomTypes

CREATE TABLE RoomTypes (
	id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
	hotelId UUID NOT NULL REFERENCES Hotels(id) ON DELETE CASCADE,
	name VARCHAR(100) NOT NULL,
	description TEXT,
	capacity INT NOT NULL,
	basePricePerNight DECIMAL(10,2) NOT NULL
);

Tabela: Rooms

CREATE TABLE Rooms (
	id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
	roomTypeId UUID NOT NULL REFERENCES RoomTypes(id) ON DELETE CASCADE,
	roomNumber VARCHAR(20) NOT NULL,
	status VARCHAR(50) NOT NULL DEFAULT 'AVAILABLE'
);

Tabela: Bookings

CREATE TABLE Bookings (
	id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
	userId UUID NOT NULL REFERENCES Users(id) ON DELETE CASCADE,
	roomId UUID NOT NULL REFERENCES Rooms(id) ON DELETE CASCADE,
	checkInDate DATE NOT NULL,
	checkOutDate DATE NOT NULL,
	totalPrice DECIMAL(10,2) NOT NULL,
	status VARCHAR(50) NOT NULL DEFAULT 'CONFIRMED',
	createdAt TIMESTAMP NOT NULL DEFAULT NOW()
);

CREATE INDEX idx_bookings_dates ON Bookings(checkInDate, checkOutDate);

πŸš€ InstalaΓ§Γ£o

PrΓ©-requisitos

  • Node.js (β‰₯18.0.0)
  • PostgreSQL (β‰₯14.0) ou MySQL (β‰₯8.0)
  • npm ou pnpm
  • Angular CLI (npm install -g @angular/cli)
  • NestJS CLI (npm install -g @nestjs/cli)
  • Git

πŸ‘₯ Equipe

πŸ‘©πŸ»β€πŸ’» Gabriela Diniz Santos;

πŸ‘¨πŸ½β€πŸ’» Leonardo Ferreira Lima.

About

Modern hotel booking system built with NestJS and Angular. Features real-time availability, secure JWT authentication, anti-overbooking protection, and automated cancellation policies.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors