Sistema de reserva de salas universitárias desenvolvido para a disciplina de Engenharia de Software e Sistemas.
O GradLock é uma aplicação web que permite o gerenciamento e reserva de salas dentro de uma universidade, oferecendo funcionalidades para:
- ✅ Cadastro de usuários (Alunos, Professores)
- ✅ Autenticação por CPF e senha
- ✅ Cadastro e gerenciamento de salas
- ✅ Sistema de reservas com aprovação/negação
- ✅ Verificação de disponibilidade
GradLock/
├── features/ # Arquivos de especificação BDD
├── gradlock-back/ # Backend API (Node.js + TypeScript)
└── README.md # Este arquivo
- Node.js - Runtime JavaScript
- TypeScript - Tipagem estática
- Express.js - Framework web
- Prisma - ORM e gerenciamento do banco
- SQLite - Banco de dados
- Swagger - Documentação da API
- Zod - Validação de dados
- ESLint + Prettier - Qualidade de código
gradlock-back/
├── prisma/
│ ├── migrations/ # Histórico de migrações
│ ├── schema.prisma # Schema do banco de dados
│ ├── seeds/ # Scripts para popular o db
│ └── dev.db # Banco SQLite (desenvolvimento)
├── src/
│ ├── config/
│ │ ├── baseConfig.ts # Configurações gerais
│ │ ├── prismaClient.ts # Cliente do Prisma
│ │ └── swaggerConfig.ts # Configuração do Swagger
│ ├── controllers/
│ │ └── roomsController.ts # Controlador de salas
│ ├── errors/
│ │ └── httpErrors.ts # Classes de erro customizadas
│ ├── routes/
│ │ └── routes.ts # Definição das rotas
│ ├── app.ts # Configuração do Express
│ └── server.ts # Ponto de entrada da aplicação
├── generated/ # Cliente Prisma gerado
├── dist/ # Código TypeScript compilado
├── package.json # Dependências e scripts
└── tsconfig.json # Configuração TypeScript
id: Identificador únicocpf: CPF único (usado para login)name: Nome completopassword: Senha (hasheada)userType: Tipo (STUDENT, TEACHER, ADMIN)course: Curso (apenas para alunos)enrollment: Matrícula (apenas para alunos)
id: Identificador úniconame: Nome único da saladescription: Descrição da salacapacity: Capacidade máximahasComputers: Possui computadoreshasProjector: Possui projetor
id: Identificador únicouserId: Usuário que fez a reservaroomId: Sala reservadadate: Data da reservastartTime: Horário de inícioendTime: Horário de fimstatus: Status (PENDING, APPROVED, REJECTED)reason: Motivo da solicitação
- Node.js v20.9.0 ou superior
- npm ou yarn
# Clonar o repositório
git clone <url-do-repositorio>
cd GradLock/gradlock-back
# Instalar dependências
npm install
# Configurar banco de dados
npm run dev # Primeira execução (gera cliente Prisma)# Desenvolvimento (com geração automática do Prisma)
npm run dev
# Desenvolvimento contínuo (sem regenerar Prisma)
npm run dev:watch
# Compilar para produção
npm run build
# Executar versão compilada
npm start
# Popular banco com dados de teste
npm run seed
# Linting e formatação
npm run lint
npm run formatCrie um arquivo .env na pasta gradlock-back/:
# Database
DATABASE_URL="file:./dev.db"
# Server
PORT=3000
BASE_PATH="http://localhost:3000"# Aplicar migrações
npx prisma migrate dev
# Gerar cliente
npx prisma generate
# Popular com dados de teste
npm run seed# Visualizar dados (Prisma Studio)
npx prisma studio
# Reset completo do banco
npx prisma migrate reset
# Nova migração
npx prisma migrate dev --name nome_da_migracao- Prisma Generate: Sempre que modificar
schema.prisma, executenpx prisma generate - Migrações: Use
npx prisma migrate devapós mudanças no schema - Ambiente: O arquivo
.envnão deve ser commitado (já está no .gitignore) - Desenvolvimento: Use
npm run devna primeira execução, depoisnpm run dev:watch
Arthur Pompilio Ennaly Carol Julio César Leonardo Moreira Rodrigo Rossiter
Este projeto é desenvolvido para fins acadêmicos. Projeto desenvolvido para a disciplina de Engenharia de Software e Sistemas.