Universidade: Universidade do Vale do Itajaí (UNIVALI)
Curso: Análise e Desenvolvimento de Sistemas
Disciplina: Software Design
Professor: Maurício Pasetto de Freitas, MSc.
O EasyRent é um sistema completo de gestão para locadora de veículos, desenvolvido como projeto acadêmico da disciplina Software Design. O sistema foi migrado de HTML/CSS/JS para uma arquitetura moderna com React + TypeScript no frontend e Node.js + Express + Prisma no backend.
- Vite + React + TypeScript
- TailwindCSS para estilização
- Shadcn UI para componentes
- Axios para requisições HTTP
- React Router para roteamento
- Node.js + Express + TypeScript
- Prisma ORM para gerenciamento do banco
- PostgreSQL (Railway) como banco de dados
- JWT para autenticação
- bcryptjs para criptografia de senhas
- ✅ Página Inicial com design moderno
- ✅ Sistema de Login/Cadastro com validação
- ✅ Catálogo de Veículos com busca e filtros
- ✅ Painel Administrativo para gestão completa
- ✅ Componentes Reutilizáveis (Button, Input, Card, etc.)
- ✅ Design Responsivo para mobile e desktop
- ✅ Navegação com Header dinâmico
- ✅ Autenticação JWT completa
- ✅ CRUD de Usuários com senhas criptografadas
- ✅ CRUD de Marcas com validações
- ✅ CRUD de Modelos relacionados às marcas
- ✅ CRUD de Carros com dados completos
- ✅ Middleware de Autenticação para rotas protegidas
- ✅ Validações e Tratamento de Erros
- ✅ Relacionamentos entre entidades
- ✅ Modelo Relacional implementado com Prisma
- ✅ Entidades: Usuario, Marca, Modelo, Carro, Locacao
- ✅ Relacionamentos 1:N entre as entidades
- ✅ Constraints e validações de integridade
EasyRent/
├── frontend/ # Frontend React + TypeScript
│ ├── src/
│ │ ├── components/ # Componentes reutilizáveis
│ │ │ ├── ui/ # Componentes base (Button, Input, Card)
│ │ │ └── Header.tsx # Header da aplicação
│ │ ├── pages/ # Páginas da aplicação
│ │ │ ├── Home.tsx # Página inicial
│ │ │ ├── Login.tsx # Página de login
│ │ │ ├── Cadastro.tsx # Página de cadastro
│ │ │ ├── Locacao.tsx # Catálogo de veículos
│ │ │ └── Admin.tsx # Painel administrativo
│ │ ├── services/ # Serviços de API
│ │ ├── types/ # Tipos TypeScript
│ │ └── utils/ # Utilitários
│ ├── public/assets/ # Assets estáticos
│ ├── Dockerfile
│ └── nginx.conf
├── backend/ # Backend Node.js + Express
│ ├── src/
│ │ ├── routes/ # Rotas da API
│ │ │ ├── auth.ts # Autenticação
│ │ │ ├── usuario.ts # CRUD Usuários
│ │ │ ├── marca.ts # CRUD Marcas
│ │ │ ├── modelo.ts # CRUD Modelos
│ │ │ └── carro.ts # CRUD Carros
│ │ ├── middleware/ # Middlewares
│ │ │ └── auth.ts # Middleware JWT
│ │ ├── services/ # Serviços
│ │ │ └── prisma.ts # Cliente Prisma
│ │ └── index.ts # Servidor principal
│ ├── prisma/
│ │ └── schema.prisma # Esquema do banco
│ ├── Dockerfile
│ └── .env.example
├── docker-compose.yml # Orquestração dos serviços
├── .env.example # Variáveis de ambiente
└── README.md # Documentação
- Node.js 18+
- Docker e Docker Compose
- Git
git clone <url-do-repositorio>
cd EasyRent# Copiar arquivos de exemplo
cp .env.example .env
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.env
# Editar as variáveis conforme necessário# Ver todos os comandos disponíveis
./dev.sh help
# Iniciar apenas backend
./dev.sh start
# Testar endpoints do backend
./dev.sh test
# Iniciar frontend
./dev.sh frontend
# Iniciar backend + frontend
./dev.sh full
# Parar todos os serviços
./dev.sh stop
# Deploy para Railway
./dev.sh deploy# Entrar no diretório do backend
cd backend
# Iniciar em desenvolvimento
./start.dev.sh
# Testar endpoints
./test.dev.sh# Construir e executar todos os serviços
docker-compose up --build
# Em background
docker-compose up -d --buildBackend:
cd backend
npm install
npm run db:generate
npm run devFrontend:
cd frontend
npm install
npm run devPOST /auth/login- Login de usuário
POST /usuarios- Criar usuárioGET /usuarios/profile- Perfil do usuário autenticadoGET /usuarios- Listar usuários (protegido)
GET /marcas- Listar marcasPOST /marcas- Criar marca (protegido)PUT /marcas/:id- Atualizar marca (protegido)DELETE /marcas/:id- Deletar marca (protegido)
GET /modelos- Listar modelosGET /modelos/marca/:marcaId- Modelos por marcaPOST /modelos- Criar modelo (protegido)PUT /modelos/:id- Atualizar modelo (protegido)DELETE /modelos/:id- Deletar modelo (protegido)
GET /carros- Listar carrosGET /carros/:id- Buscar carro por IDPOST /carros- Criar carro (protegido)PUT /carros/:id- Atualizar carro (protegido)DELETE /carros/:id- Deletar carro (protegido)
- Azul:
#2563eb(Primary) - Verde:
#16a34a(Success) - Vermelho:
#dc2626(Danger) - Cinza:
#6b7280(Neutral)
- Button: Variantes (default, outline, destructive, ghost)
- Input: Com validação e estados
- Card: Container padrão para conteúdo
- Header: Navegação responsiva
- JWT para autenticação de sessões
- bcryptjs para hash de senhas
- Helmet.js para headers de segurança
- CORS configurado adequadamente
- Validação de entrada em todas as rotas
- Usuario - Dados dos usuários do sistema
- Marca - Marcas dos veículos (Toyota, Honda, etc.)
- Modelo - Modelos específicos (Corolla, Civic, etc.)
- Carro - Veículos individuais para locação
- Locacao - Registros de locações realizadas
Marca1:NModeloModelo1:NCarroUsuario1:NLocacaoCarro1:NLocacao
O sistema está preparado para deploy no Railway com:
- Frontend: Servido via Nginx em container
- Backend: API Node.js em container
- Banco: PostgreSQL gerenciado pelo Railway
Este é um projeto acadêmico, mas sugestões e melhorias são bem-vindas através de issues e pull requests.
Projeto desenvolvido para fins acadêmicos - UNIVALI 2025