| (32 revisões intermediárias por 3 usuários não estão sendo mostradas) | |||
| Linha 11: | Linha 11: | ||
== Requisitos Funcionais == | == Requisitos Funcionais == | ||
<br> | |||
=== Fase 1 - 2025-1 === | |||
<br> | |||
* RF01 - Cadastro de Usuários | |||
** Permite que novos usuários criem uma conta na plataforma, informando dados como nome, e-mail e senha | |||
<br> | |||
* RF02 - Verificação de Usuários | |||
** Permite confirmar a autenticidade de usuários cadastrados, validando seus dados por meio de envio de código de confirmação por e-mail, garantindo que apenas contas legítimas tenham acesso ao sistema. | |||
<br> | |||
* RF03 - Login de Usuários | |||
** Permite que usuários já cadastrados e verificados acessem o sistema, informando e-mail e senha previamente registrados. | |||
<br> | |||
* RF04 - Cadastro de Matérias | |||
** Permite que o usuário cadastre matérias na plataforma. | |||
<br> | |||
* RF05 - Cadastro de Tarefas | |||
** Permite criar tarefas vinculadas a uma matéria, definindo título, descrição e prazo. | |||
<br> | |||
* RF06 - Cadastro de Resumos | |||
** Permite registrar resumos de conteúdo, associando-os a matérias específicas, com título e conteúdo do resumo. | |||
<br> | |||
* RF07 - Edição de Matérias | |||
** Permite que o usuário altere as informações de matérias cadastradas. | |||
<br> | |||
* RF08 - Edição de Tarefas | |||
** Permite que o usuário edite informações de tarefas existentes, como título, descrição, prazo ou status. | |||
<br> | |||
* RF09 - Edição de Resumos | |||
** Permite que o usuário altere o conteúdo e detalhes de resumos já cadastrados. | |||
<br> | |||
* RF10 - Edição de Perfil de Usuário | |||
** Permite que o usuário edite seus dados pessoais, como nome, e-mail e senha. | |||
<br> | |||
* RF11 - Remoção de Matérias | |||
** Permite que o usuário exclua matérias cadastradas, removendo também as tarefas e resumos vinculados. | |||
<br> | |||
* RF12 - Remoção de Tarefas | |||
** Permite que o usuário exclua tarefas cadastradas no sistema. | |||
<br> | |||
* RF13 - Remoção de Resumos | |||
** Permite que o usuário exclua resumos cadastrados no sistema. | |||
<br> | |||
* RF14 - Encerramento de Conta | |||
** Permite que o usuário encerre sua conta, removendo permanentemente todos os dados associados a ela. | |||
<br> | |||
* RF15 - Gerenciamento de Timer com Técnica Pomodoro | |||
** Permite que o usuário utilize um cronômetro baseado na técnica Pomodoro, com ciclos de foco e descanso para otimizar o estudo. | |||
<br> | |||
* RF16 - Visualização Geral de Desempenho com Dashboard | |||
** Exibe métricas e gráficos sobre tarefas concluídas, tempo de estudo, progresso por matéria e desempenho geral. | |||
<br> | |||
* RF17 - Gerenciamento de Cronograma de Estudos | |||
** Permite que o usuário crie e gerencie um plano de estudos, organizando horários, prazos matérias de forma visual. | |||
<br> | |||
=== Fase 2 - 2025-2 === | |||
<br> | |||
* RF01: Visualizar o desempenho geral do ''Dashboard'' | |||
* RF02: Visualizar as tarefas no modelo ''Kanban'' | |||
<br> | <br> | ||
| Linha 18: | Linha 96: | ||
== Melhores práticas == | == Melhores práticas == | ||
<br> | <br> | ||
<h3> <b> Introdução </b> </h3> | |||
O presente documento tem como objetivo apresentar uma análise formal da aplicação dos princípios SOLID e das práticas de Clean Code no módulo de autenticação e nas principais estruturas do backend do projeto StudyFlow. A avaliação é realizada com base nas classes: <code>AuthController</code>, <code>TaskService</code>, <code>SubjectRepository</code>, <code>Subject</code>, <code>Task</code> e outras entidades relacionadas. | |||
O foco está na arquitetura implementada no padrão Controller–Service–Repository, observando como cada princípio de design orientado a objetos é aplicado no código. | |||
<b>Observação:</b> Todos os exemplos de código incluídos neste documento correspondem exatamente às implementações reais presentes no projeto StudyFlow. | |||
<br> | |||
<h3> <b>1. Single Responsibility Principle – Responsabilidade Única </b> </h3> | |||
O <b>SRP</b> afirma que uma classe deve possuir apenas uma responsabilidade. | |||
<b>Exemplo no projeto:</b> | |||
A classe <code>AuthController</code> apenas controla rotas e delega toda a lógica para <code>AuthService</code>. | |||
Ela não implementa regras de autenticação, validação, ou persistência. | |||
<b>Observação:</b> | |||
O <code>AuthController</code> recebe requisições HTTP e invoca métodos do serviço, sem lógica de negócio adicional. | |||
<br> | |||
<h3> <b> 2. Open/Closed Principle – Aberto para Extensão, Fechado para Modificação </b> </h3> | |||
O <b>OCP</b> determina que classes devem estar abertas para extensão e fechadas para modificação. | |||
<b>Exemplo:</b> | |||
No <code>AuthController</code>: | |||
<pre> | |||
private final AuthService authService; | |||
</pre> | |||
O controlador depende apenas da abstração <code>AuthService</code>. | |||
Isso permite usar diferentes implementações como: | |||
- <code>AuthServiceV2</code> | |||
- <code>FakeAuthService</code> para testes | |||
- <code>ExternalAuthService</code> | |||
Sem modificar o controlador, atendendo ao OCP e ao DIP simultaneamente. | |||
<br> | |||
<h3> <b> 3. Liskov Substitution Principle – Substituição de Liskov </h3> </b> | |||
O <b>LSP</b> garante que subclasses possam substituir suas superclasses sem quebrar o comportamento. | |||
<b>Exemplo:</b> | |||
<pre> | |||
public class User implements UserDetails { | |||
@Override | |||
public String getUsername() { return email; } | |||
@Override | |||
public String getPassword() { return password; } | |||
@Override | |||
public boolean isEnabled() { return isVerified; } | |||
} | |||
</pre> | |||
Onde o Spring espera um <code>UserDetails</code>, pode-se usar <code>User</code> sem problemas — respeitando LSP. | |||
<br> | |||
<h3> <b> 4. Interface Segregation Principle – Segregação de Interfaces </h3> </b> | |||
O <b>ISP</b> recomenda interfaces pequenas e específicas. | |||
<b>Exemplo no projeto:</b> | |||
As interfaces: | |||
- <code>SubjectRepository</code> | |||
- <code>TaskRepository</code> | |||
- <code>UserRepository</code> | |||
têm apenas os métodos necessários e são especializadas para cada entidade. | |||
<br> | |||
<h3> <b> 5. Dependency Inversion Principle – Inversão de Dependência </h3> </b> | |||
O <b>DIP</b> recomenda que módulos de alto nível dependam de abstrações, não implementações concretas. | |||
<b>Exemplo:</b> | |||
O <code>AuthController</code> depende apenas de <code>AuthService</code>, e o Spring injeta a implementação adequada. | |||
<b>Benefícios:</b> | |||
- menor acoplamento | |||
- maior flexibilidade | |||
- facilidade de trocar a lógica de autenticação | |||
<br> | |||
<h3> <b> 6. Clean Code </h3> </b> | |||
O projeto segue princípios de Clean Code como: | |||
<b>1. Métodos curtos e diretos</b> | |||
Ex.: <code>createTask</code>, <code>deleteTask</code>, <code>findByUserId</code> | |||
<b>2. Nomes claros e explicativos</b> | |||
Para classes, métodos e variáveis. | |||
<b>3. Separação de responsabilidades por camadas</b> | |||
1. <b>Controller</b> → trata HTTP | |||
2. <b>Service</b> → regras de negócio | |||
3. <b>Repository</b> → persistência | |||
4. <b>Entities</b> → estrutura dos dados | |||
<b>4. Ausência de duplicação</b> | |||
Nenhum controller repete lógica de outro. | |||
<b>5. Code review</b> | |||
Todo código passou por revisão antes da integração, garantindo consistência e qualidade. | |||
<br> | |||
<h3> <b> Conclusão </h3> </b> | |||
O projeto demonstra aplicação significativa dos princípios SOLID e das práticas de Clean Code. | |||
Essas práticas contribuíram para: | |||
- reduzir acoplamento | |||
- melhorar organização | |||
- aumentar legibilidade | |||
- facilitar testes e manutenção | |||
O backend apresenta boa arquitetura e segue padrões adequados para crescimento futuro. | |||
<br> | |||
<b>Equipe StudyFlow</b> | |||
= CRONOGRAMA = | |||
<br> | |||
{| class="wikitable" | |||
|- | |||
! Item !! Data !! Atividades Study Flow !! Realizado | |||
|- | |||
| 1 || 14/11/2025 || Documentar tópico Investigação || 100% | |||
|- | |||
| 2 || 14/11/2025 || Documentar Visão Geral do sistema || 100% | |||
|- | |||
| 3 || 14/11/2025 || Definir Proposta de Projeto || 100% | |||
|- | |||
| 4 || 14/11/2025 || Validar Visão do Usuário || 0% | |||
|- | |||
| 5 || 17/11/2025 || Especificar RFs e RNFs - Fase 2 || 100% | |||
|- | |||
| 6 || 17/11/2025 || RF01: Visualizar o desempenho geral do Kanban || 100% | |||
|- | |||
| x || 24/11/2025 || TeckWeek || | |||
|- | |||
| 7 || 01/12/2025 || Melhores Práticas || 100% | |||
|- | |||
| 8 || 01/12/2025 || RF02: Visualizar o desempenho geral do Dashboard || 100% | |||
|- | |||
| 9 || 15/12/2025 || 2a. Entrega - Vídeo - 19/12/2025 - Teams - Rfs 1 e 2 || 100% | |||
|- | |||
| 10 || || Desenvolver 3o RF || | |||
|- | |||
| 11 || || Desenvolver 4o RF || | |||
|- | |||
| 12 || || Incrementar diferencial tecnológico || | |||
|- | |||
| 13 || || Vídeo Demo encaminhado para cliente || Aguardando avaliação | |||
|- | |||
|} | |||
{| class="wikitable" | |||
|- | |||
! Item !! Data !! Atividades Study Flow !! Responsável | |||
|- | |||
| 1 || 16/02/2026 || Usabilidade || Pedro | |||
|- | |||
| 2 || 23/02/2026 || Requisitos do Sistema || Mário | |||
|- | |||
| 3 || 23/02/2026 || Projeto de Software || Anna | |||
|- | |||
| 4 || 23/02/2026 || Melhores Práticas || Pedro | |||
|- | |||
| 5 || 02/03/2026 || Versionamento || Renan | |||
|- | |||
| 6 || 02/03/2026 || QA || Paulo | |||
|- | |||
| 7 || — || Processo de Integração || ? | |||
|- | |||
| 8 || — || Segurança de Software || ? | |||
|- | |||
|- | |||
! colspan="4" | IMPLEMENTAÇÃO | |||
|- | |||
| 9 || 23/02/2026 || Protótipo tela do Dashboard || Renan | |||
|- | |||
| 10 || 23/02/2026 || Protótipo tela do Calendário || Anna | |||
|- | |||
| 11 || 23/02/2026 || Back-end Dashboard || Anna | |||
|- | |||
| 12 || 23/02/2026 || Front-end Calendário || Paulo | |||
|- | |||
| 13 || 02/03/2026 || Front-end Dashboard || Renan | |||
|- | |||
| 14 || — || Back-end Calendário || ? | |||
|- | |||
| 15 || 07/03/2026 || Integração Dashboard || Mário | |||
|- | |||
| 16 || 09/03/2026 || Integração Calendário || Paulo | |||
|- | |||
| 17 || 23/03/2026 || Deploy e Ambientes || Renan e Mário | |||
|} | |||
Edição atual tal como às 01h21min de 10 de fevereiro de 2026
Fase 2
Escopo
- Criar uma plataforma que ofereça uma solução eficiente e intuitiva para a organização dos estudos, auxiliando estudantes no planejamento, acompanhamento e otimização de suas rotinas acadêmicas
- A proposta é reunir, em um único ambiente, ferramentas que facilitem a gestão do tempo, o estabelecimento de metas, o monitoramento de desempenho e a priorização de tarefas, promovendo uma experiência personalizada e centrada nas necessidades reais dos alunos
- Com foco na praticidade, a plataforma busca transformar a maneira como os estudantes lidam com seus compromissos acadêmicos, tornando o processo de aprendizagem mais estruturado, produtivo e eficaz.
Requisitos Funcionais
Fase 1 - 2025-1
- RF01 - Cadastro de Usuários
- Permite que novos usuários criem uma conta na plataforma, informando dados como nome, e-mail e senha
- RF02 - Verificação de Usuários
- Permite confirmar a autenticidade de usuários cadastrados, validando seus dados por meio de envio de código de confirmação por e-mail, garantindo que apenas contas legítimas tenham acesso ao sistema.
- RF03 - Login de Usuários
- Permite que usuários já cadastrados e verificados acessem o sistema, informando e-mail e senha previamente registrados.
- RF04 - Cadastro de Matérias
- Permite que o usuário cadastre matérias na plataforma.
- RF05 - Cadastro de Tarefas
- Permite criar tarefas vinculadas a uma matéria, definindo título, descrição e prazo.
- RF06 - Cadastro de Resumos
- Permite registrar resumos de conteúdo, associando-os a matérias específicas, com título e conteúdo do resumo.
- RF07 - Edição de Matérias
- Permite que o usuário altere as informações de matérias cadastradas.
- RF08 - Edição de Tarefas
- Permite que o usuário edite informações de tarefas existentes, como título, descrição, prazo ou status.
- RF09 - Edição de Resumos
- Permite que o usuário altere o conteúdo e detalhes de resumos já cadastrados.
- RF10 - Edição de Perfil de Usuário
- Permite que o usuário edite seus dados pessoais, como nome, e-mail e senha.
- RF11 - Remoção de Matérias
- Permite que o usuário exclua matérias cadastradas, removendo também as tarefas e resumos vinculados.
- RF12 - Remoção de Tarefas
- Permite que o usuário exclua tarefas cadastradas no sistema.
- RF13 - Remoção de Resumos
- Permite que o usuário exclua resumos cadastrados no sistema.
- RF14 - Encerramento de Conta
- Permite que o usuário encerre sua conta, removendo permanentemente todos os dados associados a ela.
- RF15 - Gerenciamento de Timer com Técnica Pomodoro
- Permite que o usuário utilize um cronômetro baseado na técnica Pomodoro, com ciclos de foco e descanso para otimizar o estudo.
- RF16 - Visualização Geral de Desempenho com Dashboard
- Exibe métricas e gráficos sobre tarefas concluídas, tempo de estudo, progresso por matéria e desempenho geral.
- RF17 - Gerenciamento de Cronograma de Estudos
- Permite que o usuário crie e gerencie um plano de estudos, organizando horários, prazos matérias de forma visual.
Fase 2 - 2025-2
- RF01: Visualizar o desempenho geral do Dashboard
- RF02: Visualizar as tarefas no modelo Kanban
Requisitos Não-Funcionais
Melhores práticas
Introdução
O presente documento tem como objetivo apresentar uma análise formal da aplicação dos princípios SOLID e das práticas de Clean Code no módulo de autenticação e nas principais estruturas do backend do projeto StudyFlow. A avaliação é realizada com base nas classes: AuthController, TaskService, SubjectRepository, Subject, Task e outras entidades relacionadas.
O foco está na arquitetura implementada no padrão Controller–Service–Repository, observando como cada princípio de design orientado a objetos é aplicado no código.
Observação: Todos os exemplos de código incluídos neste documento correspondem exatamente às implementações reais presentes no projeto StudyFlow.
1. Single Responsibility Principle – Responsabilidade Única
O SRP afirma que uma classe deve possuir apenas uma responsabilidade.
Exemplo no projeto:
A classe AuthController apenas controla rotas e delega toda a lógica para AuthService.
Ela não implementa regras de autenticação, validação, ou persistência.
Observação:
O AuthController recebe requisições HTTP e invoca métodos do serviço, sem lógica de negócio adicional.
2. Open/Closed Principle – Aberto para Extensão, Fechado para Modificação
O OCP determina que classes devem estar abertas para extensão e fechadas para modificação.
Exemplo:
No AuthController:
private final AuthService authService;
O controlador depende apenas da abstração AuthService.
Isso permite usar diferentes implementações como:
- AuthServiceV2
- FakeAuthService para testes
- ExternalAuthService
Sem modificar o controlador, atendendo ao OCP e ao DIP simultaneamente.
3. Liskov Substitution Principle – Substituição de Liskov
O LSP garante que subclasses possam substituir suas superclasses sem quebrar o comportamento.
Exemplo:
public class User implements UserDetails {
@Override
public String getUsername() { return email; }
@Override
public String getPassword() { return password; }
@Override
public boolean isEnabled() { return isVerified; }
}
Onde o Spring espera um UserDetails, pode-se usar User sem problemas — respeitando LSP.
4. Interface Segregation Principle – Segregação de Interfaces
O ISP recomenda interfaces pequenas e específicas.
Exemplo no projeto: As interfaces:
- SubjectRepository
- TaskRepository
- UserRepository
têm apenas os métodos necessários e são especializadas para cada entidade.
5. Dependency Inversion Principle – Inversão de Dependência
O DIP recomenda que módulos de alto nível dependam de abstrações, não implementações concretas.
Exemplo:
O AuthController depende apenas de AuthService, e o Spring injeta a implementação adequada.
Benefícios:
- menor acoplamento - maior flexibilidade - facilidade de trocar a lógica de autenticação
6. Clean Code
O projeto segue princípios de Clean Code como:
1. Métodos curtos e diretos
Ex.: createTask, deleteTask, findByUserId
2. Nomes claros e explicativos Para classes, métodos e variáveis.
3. Separação de responsabilidades por camadas
1. Controller → trata HTTP 2. Service → regras de negócio 3. Repository → persistência 4. Entities → estrutura dos dados
4. Ausência de duplicação Nenhum controller repete lógica de outro.
5. Code review Todo código passou por revisão antes da integração, garantindo consistência e qualidade.
Conclusão
O projeto demonstra aplicação significativa dos princípios SOLID e das práticas de Clean Code. Essas práticas contribuíram para:
- reduzir acoplamento - melhorar organização - aumentar legibilidade - facilitar testes e manutenção
O backend apresenta boa arquitetura e segue padrões adequados para crescimento futuro.
Equipe StudyFlow
CRONOGRAMA
| Item | Data | Atividades Study Flow | Realizado |
|---|---|---|---|
| 1 | 14/11/2025 | Documentar tópico Investigação | 100% |
| 2 | 14/11/2025 | Documentar Visão Geral do sistema | 100% |
| 3 | 14/11/2025 | Definir Proposta de Projeto | 100% |
| 4 | 14/11/2025 | Validar Visão do Usuário | 0% |
| 5 | 17/11/2025 | Especificar RFs e RNFs - Fase 2 | 100% |
| 6 | 17/11/2025 | RF01: Visualizar o desempenho geral do Kanban | 100% |
| x | 24/11/2025 | TeckWeek | |
| 7 | 01/12/2025 | Melhores Práticas | 100% |
| 8 | 01/12/2025 | RF02: Visualizar o desempenho geral do Dashboard | 100% |
| 9 | 15/12/2025 | 2a. Entrega - Vídeo - 19/12/2025 - Teams - Rfs 1 e 2 | 100% |
| 10 | Desenvolver 3o RF | ||
| 11 | Desenvolver 4o RF | ||
| 12 | Incrementar diferencial tecnológico | ||
| 13 | Vídeo Demo encaminhado para cliente | Aguardando avaliação |
| Item | Data | Atividades Study Flow | Responsável |
|---|---|---|---|
| 1 | 16/02/2026 | Usabilidade | Pedro |
| 2 | 23/02/2026 | Requisitos do Sistema | Mário |
| 3 | 23/02/2026 | Projeto de Software | Anna |
| 4 | 23/02/2026 | Melhores Práticas | Pedro |
| 5 | 02/03/2026 | Versionamento | Renan |
| 6 | 02/03/2026 | QA | Paulo |
| 7 | — | Processo de Integração | ? |
| 8 | — | Segurança de Software | ? |
| IMPLEMENTAÇÃO | |||
| 9 | 23/02/2026 | Protótipo tela do Dashboard | Renan |
| 10 | 23/02/2026 | Protótipo tela do Calendário | Anna |
| 11 | 23/02/2026 | Back-end Dashboard | Anna |
| 12 | 23/02/2026 | Front-end Calendário | Paulo |
| 13 | 02/03/2026 | Front-end Dashboard | Renan |
| 14 | — | Back-end Calendário | ? |
| 15 | 07/03/2026 | Integração Dashboard | Mário |
| 16 | 09/03/2026 | Integração Calendário | Paulo |
| 17 | 23/03/2026 | Deploy e Ambientes | Renan e Mário |