Skip to content

Evento de 4h como parte da Mentoria em Teste de Software 2.0 do Júlio de Lima, no qual formamos uma equipe real composta por Product Owner, Scrum Master, Testadores (QA) e Desenvolvedores para solucionar um problema real de um cliente, rodando todas as cerimônias ágeis de refinamento, planejamento, desenvolvimento, revisão e contato com stakeholder

Notifications You must be signed in to change notification settings

caiobberiba/Simulacao-Sprint-Agil

 
 

Repository files navigation

Time B - Sistema de Agendamento de Reuniões

API REST para gerenciamento de salas de reunião da empresa Time B

📋 Descrição

Sistema interno para agendamento e gerenciamento de salas de reunião, desenvolvido para resolver conflitos de uso e otimizar a utilização dos espaços da empresa Time B.

✨ Funcionalidades Principais

  • Autenticação Segura: Acesso restrito apenas a funcionários com email @timeb.com
  • Gestão de Salas: Listagem e consulta de disponibilidade de salas
  • Agendamento Inteligente: Sistema de reservas com validação de conflitos
  • Check-in/Check-out: Controle de presença nas reuniões
  • No-Show Automático: Cancelamento automático após 10 minutos de tolerância
  • API RESTful: Endpoints bem estruturados seguindo padrões REST

🚀 Instalação e Execução

Pré-requisitos

  • Node.js (versão 16 ou superior)
  • npm ou yarn

Instalação

  1. Clone o repositório

    git clone <url-do-repositorio>
    cd SprintAgilTimeb
  2. Instale as dependências

    npm install
  3. Execute o projeto

    # Desenvolvimento (com nodemon)
    npm run dev
    
    # Produção
    npm start
  4. Acesse a aplicação

🏗️ Arquitetura

O projeto segue o padrão MVC (Model-View-Controller):

src/
├── controllers/     # Lógica de negócio
├── models/         # Modelos de dados
├── routes/         # Definição das rotas
├── middleware/     # Middlewares (auth, errors)
└── utils/          # Utilitários (JWT, validações, scheduler)

🔐 Autenticação

Login

POST /api/v1/auth/login

{
  "email": "joao.silva@timeb.com",
  "password": "senha123"
}

Resposta:

{
  "success": true,
  "message": "Login realizado com sucesso",
  "data": {
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "user": {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "name": "João Silva",
      "email": "joao.silva@timeb.com"
    },
    "expiresIn": "8h"
  }
}

Usando o Token

Inclua o token em todas as requisições:

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

📚 Endpoints da API

🏢 Salas

Método Endpoint Descrição
GET /api/v1/rooms Listar salas (com filtros)
GET /api/v1/rooms/{id} Detalhes de uma sala
GET /api/v1/rooms/{id}/availability Verificar disponibilidade

Exemplo - Listar salas:

GET /api/v1/rooms?minCapacity=15&maxCapacity=25

Exemplo - Verificar disponibilidade:

GET /api/v1/rooms/{roomId}/availability?start=2024-01-15T09:00:00.000Z&end=2024-01-15T11:00:00.000Z

📅 Reservas

Método Endpoint Descrição
POST /api/v1/bookings Criar reserva
GET /api/v1/bookings Listar reservas (com filtros)
GET /api/v1/bookings/{id} Detalhes de uma reserva
DELETE /api/v1/bookings/{id} Cancelar reserva

Exemplo - Criar reserva:

POST /api/v1/bookings
{
  "roomId": "123e4567-e89b-12d3-a456-426614174000",
  "start": "2024-01-15T09:00:00.000Z",
  "end": "2024-01-15T11:00:00.000Z",
  "title": "Reunião de Planejamento",
  "attendees": ["maria.santos@timeb.com", "pedro.oliveira@timeb.com"]
}

✅ Check-in/Check-out

Método Endpoint Descrição
POST /api/v1/bookings/{id}/checkin Fazer check-in
POST /api/v1/bookings/{id}/checkout Fazer check-out

Exemplo - Check-in:

POST /api/v1/bookings/{bookingId}/checkin
{
  "token": "check-in-token-fornecido-na-criacao"
}

🔧 Regras de Negócio

👥 Usuários e Permissões

  • ✅ Acesso apenas para emails @timeb.com
  • ✅ Todos os funcionários têm as mesmas permissões
  • ✅ Apenas o organizador pode gerenciar sua reserva

🏢 Salas

  • ✅ Capacidade entre 10 e 30 pessoas
  • ✅ Total de salas entre 3 e 19
  • ✅ Apenas salas ativas são listadas

📅 Reservas

  • ✅ Duração máxima de 2 horas
  • ✅ Verificação de conflitos (sala e organizador)
  • ✅ Apenas datas futuras
  • ✅ Check-in durante o horário da reunião
  • ✅ Tolerância de 10 minutos (no-show automático)
  • ✅ Check-out antecipado libera a sala

📊 Códigos de Resposta HTTP

Código Descrição
200 Sucesso em listagens e ações
201 Reserva criada
204 Cancelamento concluído
400 Dados inválidos
401 Não autenticado
403 Acesso negado (domínio)
404 Recurso não encontrado
409 Conflito de horário
422 Capacidade fora do intervalo
500 Erro interno

👤 Usuários de Teste

O sistema vem com 5 usuários pré-cadastrados:

Nome Email Senha
João Silva joao.silva@timeb.com senha123
Maria Santos maria.santos@timeb.com senha123
Pedro Oliveira pedro.oliveira@timeb.com senha123
Ana Costa ana.costa@timeb.com senha123
Carlos Ferreira carlos.ferreira@timeb.com senha123

🏢 Salas Disponíveis

  • Sala Alpha - 15 pessoas (1º Andar - Ala Norte)
  • Sala Beta - 20 pessoas (1º Andar - Ala Sul)
  • Sala Gamma - 12 pessoas (2º Andar - Ala Norte)
  • Sala Delta - 25 pessoas (2º Andar - Ala Sul)
  • Sala Epsilon - 10 pessoas (3º Andar - Centro)
  • Sala Zeta - 30 pessoas (3º Andar - Ala Norte)
  • Sala Eta - 18 pessoas (1º Andar - Centro)
  • Sala Theta - 14 pessoas (2º Andar - Centro)

📖 Documentação Interativa

Acesse a documentação completa da API em: http://localhost:3000/api-docs

A documentação Swagger inclui:

  • Todos os endpoints disponíveis
  • Exemplos de requisições e respostas
  • Teste interativo dos endpoints
  • Schemas dos modelos de dados

🧪 Testando a API

1. Fazer Login

curl -X POST http://localhost:3000/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"joao.silva@timeb.com","password":"senha123"}'

2. Listar Salas (use o token recebido)

curl -X GET http://localhost:3000/api/v1/rooms \
  -H "Authorization: Bearer SEU_TOKEN_AQUI"

3. Criar Reserva

curl -X POST http://localhost:3000/api/v1/bookings \
  -H "Authorization: Bearer SEU_TOKEN_AQUI" \
  -H "Content-Type: application/json" \
  -d '{
    "roomId": "ID_DA_SALA",
    "start": "2024-12-20T09:00:00.000Z",
    "end": "2024-12-20T11:00:00.000Z",
    "title": "Reunião de Teste",
    "attendees": ["maria.santos@timeb.com"]
  }'

⚙️ Recursos Automáticos

No-Show Detection

  • Sistema verifica reservas a cada minuto
  • Cancela automaticamente após 10 minutos de tolerância
  • Libera a sala para novos agendamentos

Limpeza Automática

  • Remove reservas antigas (30+ dias) automaticamente
  • Mantém performance da aplicação

Logs e Monitoramento

  • Logs detalhados de ações importantes
  • Estatísticas do sistema a cada 30 minutos
  • Health check endpoint para monitoramento

🛠️ Desenvolvimento

Scripts Disponíveis

# Desenvolvimento com hot-reload
npm run dev

# Produção
npm start

# Reinicializar dados
npm run seed

Estrutura de Dados

Os dados são armazenados em memória usando variáveis globais:

  • global.users - Usuários do sistema
  • global.rooms - Salas disponíveis
  • global.bookings - Reservas realizadas

Tecnologias Utilizadas

  • Node.js - Runtime JavaScript
  • Express.js - Framework web
  • JWT - Autenticação
  • bcryptjs - Criptografia de senhas
  • Swagger - Documentação da API
  • UUID - Geração de IDs únicos

🔒 Segurança

  • Tokens JWT com expiração (8h)
  • Rate limiting (100 req/15min por IP)
  • Validação rigorosa de domínio de email
  • Sanitização de dados de entrada
  • Headers de segurança (Helmet.js)

📝 Logs

O sistema gera logs para:

  • ✅ Inicialização do servidor
  • ✅ Processamento de no-shows
  • ✅ Estatísticas periódicas
  • ✅ Limpeza de dados antigos

🚨 Troubleshooting

Problemas Comuns

  1. Erro 403 - Acesso negado

    • Verifique se o email termina com @timeb.com
  2. Erro 401 - Token inválido

    • Token pode ter expirado (8h de validade)
    • Faça login novamente
  3. Erro 409 - Conflito de horário

    • Sala ou organizador já possui reserva no horário
    • Verifique disponibilidade antes de agendar
  4. Servidor não inicia

    • Verifique se a porta 3000 está livre
    • Execute npm install novamente

📞 Suporte

Para dúvidas ou problemas:

  1. Consulte a documentação Swagger
  2. Verifique os logs do servidor
  3. Entre em contato com a equipe de desenvolvimento

Desenvolvido para Time B | Versão 1.0.0 | 2024

About

Evento de 4h como parte da Mentoria em Teste de Software 2.0 do Júlio de Lima, no qual formamos uma equipe real composta por Product Owner, Scrum Master, Testadores (QA) e Desenvolvedores para solucionar um problema real de um cliente, rodando todas as cerimônias ágeis de refinamento, planejamento, desenvolvimento, revisão e contato com stakeholder

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 99.3%
  • Batchfile 0.7%