Sistema de gerenciamento de salas de reunião e agendamentos, desenvolvido com React.js, Express, Node.js, PostgreSQL e TailwindCSS, totalmente containerizado com Docker.
- Docker (versão 20.10 ou superior)
- Docker Compose (versão 2.0 ou superior)
-
Clone esse repositório
-
Execute o seguinte comando na raiz do projeto:
docker compose up --buildApós executar o comando acima irá:
- Construir as imagens Docker do backend e frontend
- Iniciar o banco de dados PostgreSQL
- Executar o script de criação do banco e tabelas
- Ligar todos os serviços
- Acesse http://localhost:3000
Você pode parar todos os containers utilizando o comando:
docker compose downSe quiser remover os volumes (incluindo banco de dados), você pode executar o comando:
docker compose down -v- Criar, editar e listar salas
- Cada sala possui nome único e capacidade
- Validações:
- Capacidade deve ser um número inteiro maior que zero
- Não permite remover sala com agendamentos futuros
- Criar, editar e listar agendamentos
- Cada agendamento possui: data, horário de início, horário de término, título e descrição opcional
- Validações:
- Não permite agendamentos no passado
- Horário de término deve ser maior que o de início
- Não permite conflitos de horário na mesma sala e data
- Todos os campos obrigatórios validados
- Filtros por sala e/ou data
- Agendamentos exibidos em ordem cronológica
- Aviso quando não há agendamentos
.
├── backend/ # API Express/Node.js
│ ├── src/
│ │ ├── models/ # Modelo de banco de dados
│ │ ├── routes/ # Rotas da API
│ │ ├── middleware/ # Validação
│ │ └── server.js # Servidor principal
│ ├── Dockerfile
│ └── package.json
├── frontend/ # Aplicação React
│ ├── src/
│ │ ├── components/
│ │ ├── App.jsx
│ │ └── index.js
│ ├── Dockerfile
│ ├── tailwind.config.js
│ └── package.json
├── docker/ # Scripts SQL
│ └── banco.sql # Script de inicialização do banco
├── docker-compose.yml
└── README.md
- Node.js 18
- Express.js 4.18
- PostgreSQL 15
- pg
- React 18.2
- TailwindCSS 3.3
- Axios
- Docker
GET /api/salas- Lista todas as salasGET /api/salas/:id- Busca sala por IDPOST /api/salas- Cria uma nova salaPUT /api/salas/:id- Atualiza a salaDELETE /api/salas/:id- Remove a sala
GET /api/agendamentos- Lista agendamentos (query params:sala_id,data)GET /api/agendamentos/:id- Busca agendamento por IDPOST /api/agendamentos- Cria novo agendamentoPUT /api/agendamentos/:id- Atualiza agendamentoDELETE /api/agendamentos/:id- Remove agendamento
GET /api/health- Verifica o status do servidor e banco de dados
As variáveis de ambiente do backend estão configuradas no docker-compose.yml com os seguintes dados para teste:
NODE_ENV: ambiente (production)PORT: porta do servidor (5000 dentro do container, mapeado para 5001 no host)DB_HOST: host do banco (postgres)DB_PORT: porta do banco (5432)DB_NAME: nome do banco (sala_reuniao)DB_USER: usuário do banco (postgres)DB_PASSWORD: senha do banco (postgres)
REACT_APP_API_URL: URL da API backend (http://localhost:5001)
id(SERIAL PRIMARY KEY)nome(VARCHAR(100) UNIQUE)capacidade(INTEGER > 0)created_at,updated_at(TIMESTAMP)
id(SERIAL PRIMARY KEY)sala_id(INTEGER, FOREIGN KEY)data(DATE)horario_inicio(TIME)horario_fim(TIME)titulo(VARCHAR(255))descricao(TEXT)created_at,updated_at(TIMESTAMP)
Este projeto foi desenvolvido como teste prático.
Desenvolvi para complementar esse projeto testes automatizados cobrindo todas as regras de negócio.
Ao executar docker compose up --build, todas as dependências (incluindo Jest e outras ferramentas de teste) são instaladas automaticamente nos containers.
Todos os testes de uma só vez com o script:
./scripts/run-tests-docker.shou
Apenas backend:
docker compose --profile test run --rm backend-testApenas frontend:
docker compose --profile test run --rm frontend-testBackend:
- 65 testes passaram com sucesso
- 4 suites de teste executadas:
agendamentos.test.js: 30 testes (regras de negócio e CRUD)salas.test.js: 17 testes (regras de negócio e CRUD)integration.test.js: 5 testes (fluxo completo)validation.test.js: 8 testes (middleware de validação)
- Cobertura de código: 78.66% de statements, 70.58% de branches, 92.3% de funções
- Todos os testes executados em 1.278 segundos
Frontend:
- Testes executados com sucesso
- Cobertura de código gerada para componentes React