{"id":27217268,"url":"https://github.com/silva4dev/meeting-scheduler-clean-architecture-project","last_synced_at":"2025-04-10T05:27:50.211Z","repository":{"id":253697613,"uuid":"843931850","full_name":"silva4dev/meeting-scheduler-clean-architecture-project","owner":"silva4dev","description":"💥  Building a meeting room reservation management system with Ruby and Deno Fresh using TDD, DDD, Clean Architecture, Design Patterns and SOLID principles 🎯✨.","archived":false,"fork":false,"pushed_at":"2025-04-10T02:51:08.000Z","size":167,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-10T03:35:49.179Z","etag":null,"topics":["deno","design-patterns","domain-driven-design","fresh","hanami","rails","rspec","ruby","ruby-on-rails","solid-principles","test-driven-development","typescript"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/silva4dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-17T21:17:51.000Z","updated_at":"2025-04-10T03:24:32.000Z","dependencies_parsed_at":"2025-04-10T03:35:54.919Z","dependency_job_id":"9967a015-caa0-4b95-a236-e33dd172481d","html_url":"https://github.com/silva4dev/meeting-scheduler-clean-architecture-project","commit_stats":{"total_commits":208,"total_committers":1,"mean_commits":208.0,"dds":0.0,"last_synced_commit":"bd889dd8a4815d2563230cf8381fae7329619919"},"previous_names":["silva4dev/inter-reservations-rooms-project","silva4dev/meeting-room-scheduler-project","silva4dev/ruby-meeting-scheduler-clean-api-project","silva4dev/ruby-meeting-scheduler-clean-project","silva4dev/meeting-scheduler-clean-architecture-project"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/silva4dev%2Fmeeting-scheduler-clean-architecture-project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/silva4dev%2Fmeeting-scheduler-clean-architecture-project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/silva4dev%2Fmeeting-scheduler-clean-architecture-project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/silva4dev%2Fmeeting-scheduler-clean-architecture-project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/silva4dev","download_url":"https://codeload.github.com/silva4dev/meeting-scheduler-clean-architecture-project/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248162435,"owners_count":21057750,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deno","design-patterns","domain-driven-design","fresh","hanami","rails","rspec","ruby","ruby-on-rails","solid-principles","test-driven-development","typescript"],"created_at":"2025-04-10T05:27:49.693Z","updated_at":"2025-04-10T05:27:50.184Z","avatar_url":"https://github.com/silva4dev.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Aplicação de Gestão de Reservas de Salas de Reunião\n\n## Requisitos Funcionais\n\n1. **Criação de Salas de Reunião**\n   - O usuário deve ser capaz de criar novas salas de reunião com título, capacidade e localização.\n\n2. **Atualização de Salas de Reunião**\n   - O usuário deve ser capaz de atualizar as informações de uma sala de reunião existente.\n\n3. **Visualização de Salas de Reunião**\n   - O usuário deve visualizar uma lista de todas as salas de reunião e detalhes de uma sala específica.\n\n4. **Criação de Reservas**\n   - 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.\n\n5. **Atualização de Reservas**\n   - O usuário deve ser capaz de atualizar as informações de uma reserva existente.\n\n6. **Visualização de Reservas**\n   - O usuário deve visualizar todas as reservas para uma sala de reunião e detalhes de cada reserva.\n\n7. **Exclusão de Reservas**\n   - O usuário deve ser capaz de cancelar reservas existentes.\n\n8. **Filtragem e Busca**\n   - O usuário deve poder filtrar reservas por sala, data e status (confirmada, pendente, cancelada).\n   - O usuário deve poder buscar reservas e salas pelo nome.\n\n## Requisitos Não Funcionais\n\n1. **Performance**\n   - A aplicação deve responder a consultas e buscas em menos de 2 segundos.\n\n2. **Escalabilidade**\n   - A aplicação deve ser capaz de escalar horizontalmente para suportar um aumento no número de salas e reservas.\n\n3. **Segurança**\n   - Dados das reservas e salas devem ser protegidos contra acesso não autorizado.\n   - Autenticação e autorização devem ser implementadas para garantir que apenas usuários autorizados possam criar, atualizar ou cancelar reservas.\n\n4. **Usabilidade**\n   - A interface do usuário deve ser intuitiva e responsiva para dispositivos móveis e desktop.\n\n5. **Manutenibilidade**\n   - O código deve ser modular e seguir princípios de Clean Code para facilitar a manutenção e extensibilidade.\n\n## Regras de Negócio\n\n1. **Disponibilidade da Sala**\n   - Uma sala de reunião não pode ser reservada para mais de um evento ao mesmo tempo.\n\n2. **Validação de Dados**\n   - O nome da sala deve ter entre 1 e 100 caracteres.\n   - A capacidade da sala deve ser um número positivo.\n   - A data e hora da reserva devem estar no futuro.\n\n3. **Cancelamento de Reserva**\n   - Reservas podem ser canceladas com pelo menos 24 horas de antecedência.\n\n## Estrutura das Tabelas do Banco de Dados\n\n### Tabela `rooms`\n\n| Coluna       | Tipo          | Descrição                                     |\n|--------------|---------------|-----------------------------------------------|\n| `id`         | INT           | Identificador único da sala (chave primária)  |\n| `name`       | VARCHAR(100)  | Nome da sala                                 |\n| `capacity`   | INT           | Capacidade da sala                           |\n| `location`   | VARCHAR(255)  | Localização da sala                          |\n\n### Tabela `reservations`\n\n| Coluna         | Tipo                                      | Descrição                                     |\n|----------------|-------------------------------------------|-----------------------------------------------|\n| `id`           | INT                                       | Identificador único da reserva (chave primária) |\n| `room_id`      | INT                                       | Identificador da sala (chave estrangeira)    |\n| `start_time`   | DATETIME                                  | Data e hora de início da reserva              |\n| `end_time`     | DATETIME                                  | Data e hora de término da reserva             |\n| `description`  | TEXT                                      | Descrição da reserva                         |\n| `responsible`  | VARCHAR(100)                              | Nome do responsável pela reserva              |\n| `status`       | ENUM('confirmed', 'pending', 'cancelled') | Status da reserva                            |\n\n## Endpoints da API\n\n### Salas de Reunião\n\n- **GET /rooms**\n  - **Descrição:** Lista todas as salas de reunião.\n  - **Parâmetros:** Nenhum\n\n- **POST /rooms**\n  - **Descrição:** Cria uma nova sala de reunião.\n  - **Parâmetros:** `name`, `capacity`, `location`\n\n- **GET /rooms/{id}**\n  - **Descrição:** Obtém detalhes de uma sala de reunião específica.\n  - **Parâmetros:** Nenhum\n\n- **PUT /rooms/{id}**\n  - **Descrição:** Atualiza uma sala de reunião existente.\n  - **Parâmetros:** `name`, `capacity`, `location`\n\n- **DELETE /rooms/{id}**\n  - **Descrição:** Exclui uma sala de reunião específica.\n  - **Parâmetros:** Nenhum\n\n### Reservas\n\n- **GET /rooms/{room_id}/reservations**\n  - **Descrição:** Lista todas as reservas para uma sala de reunião específica.\n  - **Parâmetros:** `status`, `start_time`, `end_time`\n\n- **POST /rooms/{room_id}/reservations**\n  - **Descrição:** Cria uma nova reserva para uma sala de reunião.\n  - **Parâmetros:** `start_time`, `end_time`, `description`, `responsible`\n\n- **GET /rooms/{room_id}/reservations/{id}**\n  - **Descrição:** Obtém detalhes de uma reserva específica.\n  - **Parâmetros:** Nenhum\n\n- **PUT /rooms/{room_id}/reservations/{id}**\n  - **Descrição:** Atualiza uma reserva existente.\n  - **Parâmetros:** `start_time`, `end_time`, `description`, `responsible`, `status`\n\n- **DELETE /rooms/{room_id}/reservations/{id}**\n  - **Descrição:** Cancela uma reserva específica.\n  - **Parâmetros:** Nenhum\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsilva4dev%2Fmeeting-scheduler-clean-architecture-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsilva4dev%2Fmeeting-scheduler-clean-architecture-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsilva4dev%2Fmeeting-scheduler-clean-architecture-project/lists"}