https://github.com/lucas4tech/aeon-flow-meeting-system-clean-project
🔖 Building a meeting room reservation management system with Ruby and Deno Fresh using TDD, DDD, Clean Architecture, Design Patterns and SOLID principles 🎯✨.
https://github.com/lucas4tech/aeon-flow-meeting-system-clean-project
deno design-patterns domain-driven-design fresh hanami rails rspec ruby ruby-on-rails solid-principles test-driven-development typescript
Last synced: 2 months ago
JSON representation
🔖 Building a meeting room reservation management system with Ruby and Deno Fresh using TDD, DDD, Clean Architecture, Design Patterns and SOLID principles 🎯✨.
- Host: GitHub
- URL: https://github.com/lucas4tech/aeon-flow-meeting-system-clean-project
- Owner: lucas4tech
- License: mit
- Created: 2024-08-17T21:17:51.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2025-06-20T03:33:26.000Z (12 months ago)
- Last Synced: 2026-04-07T21:39:21.113Z (2 months ago)
- Topics: deno, design-patterns, domain-driven-design, fresh, hanami, rails, rspec, ruby, ruby-on-rails, solid-principles, test-driven-development, typescript
- Language: Ruby
- Homepage:
- Size: 248 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Aplicação de Gestão de Reservas de Salas de Reunião
## Requisitos Funcionais
1. **Criação de Salas de Reunião**
- O usuário deve ser capaz de criar novas salas de reunião com tÃtulo, capacidade e localização.
2. **Atualização de Salas de Reunião**
- O usuário deve ser capaz de atualizar as informações de uma sala de reunião existente.
3. **Visualização de Salas de Reunião**
- O usuário deve visualizar uma lista de todas as salas de reunião e detalhes de uma sala especÃfica.
4. **Criação de Reservas**
- O usuário deve ser capaz de reservar uma sala de reunião para uma data e hora especÃfica, com a possibilidade de adicionar uma descrição e um responsável.
5. **Atualização de Reservas**
- O usuário deve ser capaz de atualizar as informações de uma reserva existente.
6. **Visualização de Reservas**
- O usuário deve visualizar todas as reservas para uma sala de reunião e detalhes de cada reserva.
7. **Exclusão de Reservas**
- O usuário deve ser capaz de cancelar reservas existentes.
8. **Filtragem e Busca**
- O usuário deve poder filtrar reservas por sala, data e status (confirmada, pendente, cancelada).
- O usuário deve poder buscar reservas e salas pelo nome.
## Requisitos Não Funcionais
1. **Performance**
- A aplicação deve responder a consultas e buscas em menos de 2 segundos.
2. **Escalabilidade**
- A aplicação deve ser capaz de escalar horizontalmente para suportar um aumento no número de salas e reservas.
3. **Segurança**
- Dados das reservas e salas devem ser protegidos contra acesso não autorizado.
- Autenticação e autorização devem ser implementadas para garantir que apenas usuários autorizados possam criar, atualizar ou cancelar reservas.
4. **Usabilidade**
- A interface do usuário deve ser intuitiva e responsiva para dispositivos móveis e desktop.
5. **Manutenibilidade**
- O código deve ser modular e seguir princÃpios de Clean Code para facilitar a manutenção e extensibilidade.
## Regras de Negócio
1. **Disponibilidade da Sala**
- Uma sala de reunião não pode ser reservada para mais de um evento ao mesmo tempo.
2. **Validação de Dados**
- O nome da sala deve ter entre 1 e 100 caracteres.
- A capacidade da sala deve ser um número positivo.
- A data e hora da reserva devem estar no futuro.
3. **Cancelamento de Reserva**
- Reservas podem ser canceladas com pelo menos 24 horas de antecedência.
## Estrutura das Tabelas do Banco de Dados
### Tabela `rooms`
| Coluna | Tipo | Descrição |
|--------------|---------------|-----------------------------------------------|
| `id` | INT | Identificador único da sala (chave primária) |
| `name` | VARCHAR(100) | Nome da sala |
| `capacity` | INT | Capacidade da sala |
| `location` | VARCHAR(255) | Localização da sala |
### Tabela `reservations`
| Coluna | Tipo | Descrição |
|----------------|-------------------------------------------|-----------------------------------------------|
| `id` | INT | Identificador único da reserva (chave primária) |
| `room_id` | INT | Identificador da sala (chave estrangeira) |
| `start_time` | DATETIME | Data e hora de inÃcio da reserva |
| `end_time` | DATETIME | Data e hora de término da reserva |
| `description` | TEXT | Descrição da reserva |
| `responsible` | VARCHAR(100) | Nome do responsável pela reserva |
| `status` | ENUM('confirmed', 'pending', 'cancelled') | Status da reserva |
## Endpoints da API
### Salas de Reunião
- **GET /rooms**
- **Descrição:** Lista todas as salas de reunião.
- **Parâmetros:** Nenhum
- **POST /rooms**
- **Descrição:** Cria uma nova sala de reunião.
- **Parâmetros:** `name`, `capacity`, `location`
- **GET /rooms/{id}**
- **Descrição:** Obtém detalhes de uma sala de reunião especÃfica.
- **Parâmetros:** Nenhum
- **PUT /rooms/{id}**
- **Descrição:** Atualiza uma sala de reunião existente.
- **Parâmetros:** `name`, `capacity`, `location`
- **DELETE /rooms/{id}**
- **Descrição:** Exclui uma sala de reunião especÃfica.
- **Parâmetros:** Nenhum
### Reservas
- **GET /rooms/{room_id}/reservations**
- **Descrição:** Lista todas as reservas para uma sala de reunião especÃfica.
- **Parâmetros:** `status`, `start_time`, `end_time`
- **POST /rooms/{room_id}/reservations**
- **Descrição:** Cria uma nova reserva para uma sala de reunião.
- **Parâmetros:** `start_time`, `end_time`, `description`, `responsible`
- **GET /rooms/{room_id}/reservations/{id}**
- **Descrição:** Obtém detalhes de uma reserva especÃfica.
- **Parâmetros:** Nenhum
- **PUT /rooms/{room_id}/reservations/{id}**
- **Descrição:** Atualiza uma reserva existente.
- **Parâmetros:** `start_time`, `end_time`, `description`, `responsible`, `status`
- **DELETE /rooms/{room_id}/reservations/{id}**
- **Descrição:** Cancela uma reserva especÃfica.
- **Parâmetros:** Nenhum