From aa1589a4274b1a6bcb7d064df57a968aeabefcab Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 4 Sep 2025 13:25:20 +0000 Subject: [PATCH 1/2] Initial plan From 31804bc847af4531506421db5af9908cb8674b8d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 4 Sep 2025 13:40:29 +0000 Subject: [PATCH 2/2] Update documentation to reflect current application state Co-authored-by: juliannaPaz <90342866+juliannaPaz@users.noreply.github.com> --- docs/README.md | 208 +++++++++++++++++++++-- docs/architecture/component-diagram.puml | 2 +- 2 files changed, 193 insertions(+), 17 deletions(-) diff --git a/docs/README.md b/docs/README.md index a5b4754..1260bfe 100644 --- a/docs/README.md +++ b/docs/README.md @@ -27,15 +27,19 @@ src/main/java/com/mergingtonhigh/schoolmanagement/ │ │ ├── ActivityRepository.java │ │ └── TeacherRepository.java │ └── valueobjects/ # Objetos de valor +│ ├── ActivityType.java # Enum de tipos de atividade │ ├── Email.java # Validação de email │ └── ScheduleDetails.java # Detalhes de horário ├── application/ # 🔧 Camada de Aplicação │ ├── dtos/ # Data Transfer Objects │ │ ├── ActivityDTO.java +│ │ ├── ActivityTypeDTO.java +│ │ ├── LoginRequestDTO.java │ │ ├── StudentRegistrationDTO.java │ │ └── TeacherDTO.java │ └── usecases/ # Casos de uso │ ├── ActivityUseCase.java +│ ├── AuthenticationUseCase.java │ └── StudentRegistrationUseCase.java ├── infrastructure/ # 🏭 Camada de Infraestrutura │ ├── config/ # Configurações @@ -48,7 +52,9 @@ src/main/java/com/mergingtonhigh/schoolmanagement/ │ └── TeacherRepositoryImpl.java └── presentation/ # 🎨 Camada de Apresentação ├── controllers/ # Controllers REST - │ └── ActivityController.java + │ ├── ActivityController.java + │ ├── AuthController.java + │ └── StaticController.java └── mappers/ # Mapeadores DTO ↔ Entity ├── ActivityMapper.java └── TeacherMapper.java @@ -69,8 +75,15 @@ src/main/java/com/mergingtonhigh/schoolmanagement/ ### Frontend -- **HTML5/CSS3/JavaScript** - Interface web -- **Vanilla JavaScript** - Interatividade do frontend +- **HTML5/CSS3/JavaScript** - Interface web responsiva +- **Vanilla JavaScript** - Interatividade sem frameworks externos +- **Design português/brasileiro** - Interface totalmente localizada +- **Componentes principais**: + - Sistema de filtros por categoria e busca textual + - Modal de autenticação integrado + - Cartões de atividade com informações visuais + - Gerenciamento de estado de sessão + - Feedback visual para ações do usuário ### Banco de Dados @@ -103,6 +116,8 @@ src/main/java/com/mergingtonhigh/schoolmanagement/ - **Login de professores** com username/senha - **Controle de acesso** baseado em roles (TEACHER/ADMIN) - **Autenticação requerida** para inscrições +- **Verificação de sessão** para manter estado de login +- **Logout** para encerrar sessão do usuário ### 📝 Gestão de Inscrições @@ -116,9 +131,86 @@ src/main/java/com/mergingtonhigh/schoolmanagement/ ### 🎨 Interface Web - **Design responsivo** e intuitivo -- **Filtros dinâmicos** para busca de atividades -- **Modais** para login e inscrições +- **Filtros dinâmicos** para busca de atividades por: + - Categoria (Esportes, Artes, Acadêmico, Comunidade, Tecnologia) + - Busca por texto + - Dia da semana +- **Sistema de autenticação** integrado com modais +- **Categorização automática** de atividades por tipo - **Feedback visual** para ações do usuário +- **Gerenciamento de sessão** com persistência de login + +### 🏷️ Sistema de Categorização + +As atividades são automaticamente categorizadas por tipo usando a enum `ActivityType`: + +- **SPORTS** (Esportes) - `#e8f5e9` / `#2e7d32` +- **ARTS** (Artes) - `#f3e5f5` / `#7b1fa2` +- **ACADEMIC** (Acadêmico) - `#e3f2fd` / `#1565c0` +- **COMMUNITY** (Comunidade) - `#fff3e0` / `#e65100` +- **TECHNOLOGY** (Tecnologia) - `#e8eaf6` / `#3949ab` + +A categorização é baseada em palavras-chave no nome e descrição da atividade, com algoritmo automático que identifica o tipo mais apropriado. + +## 📋 Estrutura de Dados + +### DTOs (Data Transfer Objects) + +#### ActivityDTO +Representa uma atividade completa com todos os dados necessários para o frontend: +```java +public record ActivityDTO( + String name, // Nome da atividade + String description, // Descrição detalhada + String schedule, // Horário formatado para exibição + ScheduleDetailsDTO scheduleDetails, // Detalhes estruturados do horário + int maxParticipants, // Capacidade máxima + List participants, // Lista de emails dos participantes + int currentParticipantCount, // Número atual de participantes + ActivityTypeDTO type // Categoria com informações visuais +) +``` + +#### TeacherDTO +Dados do professor para autenticação: +```java +public record TeacherDTO( + String username, // Nome de usuário único + String displayName, // Nome para exibição + String role // Função (teacher/admin) +) +``` + +#### ActivityTypeDTO +Informações de categoria para interface: +```java +public record ActivityTypeDTO( + String name, // Nome interno da categoria + String label, // Rótulo para exibição + String color, // Cor de fundo + String textColor // Cor do texto +) +``` + +#### LoginRequestDTO & StudentRegistrationDTO +DTOs para operações específicas de login e inscrição de estudantes. + +### Value Objects + +#### ActivityType (Enum) +Define os tipos de atividade com categorização automática baseada em palavras-chave: +- Detecta automaticamente o tipo analisando nome e descrição +- Fornece cores consistentes para interface +- Suporta português e inglês + +#### ScheduleDetails +Encapsula horários estruturados: +- Lista de dias da semana +- Horários de início e fim +- Validação de consistência + +#### Email +Value object para validação de endereços de email com regex pattern. ## 🔧 Configuração e Execução @@ -130,7 +222,21 @@ src/main/java/com/mergingtonhigh/schoolmanagement/ ### Variáveis de Ambiente -Crie um arquivo `.env` baseado no `.env.example` +Crie um arquivo `.env` baseado no `.env.example`: + +```bash +# Configuração de Segurança +SECURITY_ADMIN_USERNAME=admin +SECURITY_ADMIN_PASSWORD=admin123 +SECURITY_ADMIN_ROLES=ADMIN + +# Senhas dos Professores (para seed do banco) +PRINCIPAL_PASSWORD=admin123 +TEACHER_RODRIGUEZ_PASSWORD=art123 +TEACHER_CHEN_PASSWORD=chess456 +``` + +**Importante**: Use senhas fortes em produção. As senhas padrão são apenas para desenvolvimento. ### Executando o Projeto @@ -160,6 +266,8 @@ Crie um arquivo `.env` baseado no `.env.example` 3. **Acessar a aplicação**: - Frontend: - API REST: + - Autenticação: + - Health Check: ### Tasks Maven Disponíveis @@ -175,25 +283,81 @@ Crie um arquivo `.env` baseado no `.env.example` #### Atividades ```http +# Listar todas as atividades GET /activities + +# Listar atividades com filtros opcionais GET /activities?day=Monday&start_time=15:00&end_time=17:00 + +# Obter dias disponíveis para atividades GET /activities/days ``` +**Resposta de `/activities`**: Retorna um objeto com atividades onde cada chave é o nome da atividade e o valor contém: +- `name` - Nome da atividade +- `description` - Descrição detalhada +- `schedule` - Horário formatado para exibição +- `scheduleDetails` - Objeto com `days[]`, `startTime`, `endTime` +- `maxParticipants` - Capacidade máxima +- `participants[]` - Lista de emails dos participantes +- `currentParticipantCount` - Número atual de participantes +- `type` - Objeto com informações de categoria (`name`, `label`, `color`, `textColor`) + +#### Autenticação + +```http +# Login de professor +POST /auth/login +Content-Type: application/x-www-form-urlencoded + +username=mrodriguez&password=password123 + +# Verificar sessão ativa +GET /auth/check-session?username=mrodriguez +``` + +**Resposta de `/auth/login`**: Retorna dados do professor logado: +```json +{ + "username": "mrodriguez", + "displayName": "Sr. Rodriguez", + "role": "teacher" +} +``` + +**Resposta de erro**: `401` com `{"detail": "Invalid username or password"}` + #### Inscrições ```http +# Inscrever estudante em atividade POST /activities/{activityName}/signup Content-Type: application/x-www-form-urlencoded -email=student@mergington.edu&teacher_username=teacher1 +email=student@mergington.edu&teacher_username=mrodriguez -POST /activities/{activityName}/unregister +# Cancelar inscrição de estudante +POST /activities/{activityName}/unregister Content-Type: application/x-www-form-urlencoded -email=student@mergington.edu&teacher_username=teacher1 +email=student@mergington.edu&teacher_username=mrodriguez +``` + +**Respostas**: +- `200` - `{"message": "Sucesso na operação"}` +- `400` - `{"detail": "Erro de validação"}` +- `401` - `{"detail": "Authentication required for this action"}` +- `404` - `{"detail": "Activity/Student not found"}` + +#### Interface Web + +```http +# Página principal da aplicação +GET / ``` +Serve a interface web estática localizada em `/static/index.html`. + ## 🧪 Testes ### Estrutura de Testes @@ -225,15 +389,22 @@ O sistema utiliza **Mongock** para realizar migrações automáticas do banco de ### Professores Padrão -- **admin** - Administrador principal -- **teacher.rodriguez** - Professor de artes -- **teacher.chen** - Professor de xadrez +- **admin** - Administrador principal (senha configurável via `ADMIN_PASSWORD`) +- **mrodriguez** - Sr. Rodriguez, Professor de artes (senha via `TEACHER_RODRIGUEZ_PASSWORD`) +- **mchen** - Sra. Chen, Professora de xadrez (senha via `TEACHER_CHEN_PASSWORD`) +- **principal** - Diretor da escola (senha via `PRINCIPAL_PASSWORD`) ### Atividades Exemplo -- **Art Club** - Terças e quintas, 15:30-17:00 -- **Chess Club** - Segundas e quartas, 15:30-17:00 -- **Drama Club** - Quartas e sextas, 16:00-18:00 +O sistema inclui 14 atividades pré-configuradas categorizadas por tipo: + +**Esportes**: Time de Futebol, Time de Basquete, Fitness Matinal +**Artes**: Clube de Arte, Clube de Teatro, Manga Maniacs +**Acadêmico**: Clube de Xadrez, Torneio de Xadrez, Clube de Matemática, Equipe de Debates, Olimpíada de Ciências +**Tecnologia**: Aula de Programação, Oficina de Robótica +**Comunidade**: Serviço Comunitário + +Cada atividade possui horários específicos, capacidade limitada e alguns participantes pré-inscritos para demonstração. ## 🔒 Segurança @@ -252,4 +423,9 @@ O sistema utiliza **Mongock** para realizar migrações automáticas do banco de ### Perfis de Ambiente -- **dev** - Ambiente de desenvolvimento +- **dev** - Ambiente de desenvolvimento com: + - CORS habilitado para todos os origins (`*`) + - Logs em nível DEBUG + - MongoDB local (localhost:27017) + - DevTools habilitado com LiveReload +- **prod** - Ambiente de produção (configurar conforme necessário) diff --git a/docs/architecture/component-diagram.puml b/docs/architecture/component-diagram.puml index 7f56921..ca1b62f 100644 --- a/docs/architecture/component-diagram.puml +++ b/docs/architecture/component-diagram.puml @@ -9,7 +9,7 @@ Container_Boundary(webApp, "Spring Boot Web Application") { Component(staticController, "Static Controller", "Spring Controller", "Serves static web content") Component(activityUseCase, "Activity Use Case", "Application Service", "Orchestrates activity business logic") - Component(authUseCase, "Authentication Use Case", "Application Service", "Orchestrates authentication logic") + Component(authUseCase, "Authentication Use Case", "Application Service", "Handles teacher authentication and session management") Component(registrationUseCase, "Student Registration Use Case", "Application Service", "Handles student registrations") Component(activityEntity, "Activity Entity", "Domain Model", "Core activity business logic")