Objetivo
Implementar a camada de serviços, serviços REST, DTOs e testes de serviço.
Instruções
Cada grupo continua a trabalhar no seu repositório privado.
Nota: Podem iniciar este segundo sprint usando uma base fornecida pelos docentes da disciplina. Não é obrigatório fazê-lo, mas pode ser útil para os grupos que não têm uma base funcional. Para a obter, basta:
- Fazer download do código da solução (backend.zip)
- Substituir a pasta backend do vosso branch master com o conteúdo do ficheiro disponibilizado
- Correr testes e verificar que está tudo funcional
- Verificar se há ficheiros novos ou com nome diferente que precisem de ser apagados
- Fazer commit para o master (podem usar a mensagem "update backend to provided base code")
As principais tarefas desta parte são:
- Alterar o TeacherDashboardDto para conter informação relativa às estatísticas
-
Estender o TeacherDashboardService da seguinte forma:
- Estender o createTeacherDashboard para que o novo dashboard criado contenha as estatísticas associadas às últimas três execuções de disciplina.
-
Implementar o serviço com assinatura
public void updateTeacherDashboard(int dashboardId)
Dado o ID de um dashboard de professor, este serviço actualiza as estatísticas associadas. -
Implementar o serviço com assinatura
public void updateAllTeacherDashboards()
Este serviço actualiza as estatísticas associadas a todos os dashboards de professores disponíveis no Quizzes Tutor. - Garantir que, se necessário, o serviço removeTeacherDashboard também apaga os objectos de estatísticas associados ao dashboard que é apagado. Dependendo da implementação desenvolvida no Sprint 1, esta tarefa pode ser feita no TeacherDashboardService ou pode ser implementada no domínio através de anotações JPA (ver, por exemplo, https://docs.jboss.org/hibernate/orm/6.1/userguide/html_single/Hibernate_User_Guide.html#pc-cascade)
-
Testar os novos serviços e também as alterações aos serviços existentes. Cada grupo deve avaliar e decidir que testes devem ser implementados. Deverão considerar, no mínimo, os seguintes testes:
-
Testar que quando se cria um novo dashboard, as estatísticas das últimas três execuções são as consideradas (os testes devem ter em atenção casos onde não há três execuções, etc.)
-
Testar os dois novos serviços updateTeacherDashboard e updateAllTeacherDashboards
-
Testar a remoção de um dashboard que tem estatísticas associadas
-
-
Implementar os serviços REST (controladores):
-
Implementar dois serviços REST update associados aos serviços updateTeacherDashboard (acesso reservado ao docente respectivo) e updateAllTeacherDashboards (acesso reservado a administradores).
-
Implementar um serviço REST delete para apagar um dashboard (associado ao serviço removeTeacherDashboard). Acesso reservado aos docentes respectivos.
-
Cada subgrupo (de 2 alunos) deverá:
-
Actualizar o TeacherDashboardDto com a parte relativa às estatísticas que implementaram no Sprint 1
-
Implementar/estender pelo menos um dos serviços no TeacherDashboardService
-
Testar os serviços que implementaram/estenderam
-
Implementar um serviço REST
A carga de trabalho (quantidade e complexidade das tarefas) deve ser dividida de forma semelhante entre os membros de cada subgrupo. Isto será verificado pelos commits de cada grupo. A nota 0 (zero) será atribuída a alunos que não apresentem commits.
Sugestões de Planeamento
-
Tal como sugerido nas aulas, começar com um Sprint Retrospective do sprint anterior. O objectivo é a equipa identificar o que correu bem e o que correu menos bem, de forma a tornar-se mais produtiva neste segundo sprint.
-
Ler com atenção o enunciado. Caso haja alguma dúvida, procurar esclarecê-la com um dos docentes o mais depressa possível.
-
Participar nos laboratórios da semana que inicia no dia 6 de Março, onde serão feitas apresentações sobre testes de serviço e serviços REST.
-
Para os grupos que usarão como base o código disponibilizado, convém analisar bem o código.
-
Planear a divisão de tarefas o mais cedo possível. Em caso de dúvidas, falar com os docentes. Para o board do sprint, sugere-se a estrutura usada no Sprint 1.
Critérios de Avaliação
Para o critério "Markdown file with submission summary", basta preencher o template P2.md e colocá-lo numa pasta com nome "markdown". Link para template: https://gitlab.rnl.tecnico.ulisboa.pt/-/snippets/3. Versão "raw": https://gitlab.rnl.tecnico.ulisboa.pt/-/snippets/3/raw/master/P2.mdHistórias e Tarefas
Neste segundo sprint, podem usar histórias diferentes daquelas usadas no primeiro sprint. Podem também ter histórias que se aplicam ao grupo completo e outras que se aplicam apenas a sub-grupos. Por exemplo, a implementação dos dois serviços de update pode fazer parte de uma história que é considerada por todo o grupo. Nesta história podem ter as tarefas de implementação e as tarefas de testes destes dois serviços. Como cada subgrupo é avaliado nos testes de todos os serviços, esta história terá pelo menos 3 testes para o updateTeacherDashboard e 3 testes para o updateAllTeacherDashboards (cada sub-grupo implementa pelo menos 1 caso de teste por serviço).
Dando como exemplo uma história aplicada apenas a um sub-grupo, podemos ter uma história que se divide em tarefas de implementação (por exemplo, a implementação das partes relativas à estatística do sub-grupo 1) no DTO, 2) no serviço createTeacherDashboard, 3) no serviço removeTeacherDashboard, e 4) num dos serviços REST) e em tarefas de teste (por exemplo, 1 ou mais casos de teste para o serviço createTeacherDashboard e 1 ou mais casos de teste para o serviço removeTeacherDashboard).
Importante: não existe uma única maneira de planear o trabalho a ser feito e cada grupo deve decidir na reunião de planeamento o que funciona melhor para o seu caso específico.
Prazo de Entrega
O prazo de entrega é às 17:00 do dia 17 de março. Daremos 30 minutos de tolerância para resolver pequenos percalços de última hora. Às 17:30, os docentes irão executar um script que recolhe informação sobre todos os repositórios (tags, commits, hashes, e outra informação relevante para as correcções). As tags sprint-2 que forem encontradas pelo script serão as entregas finais que irão ser consideradas e corrigidas. Se não existir tag com esse nome, será usado o último commit do master e será aplicado um desconto de 1 valor (por não haver tag). Todos os commits feitos depois da execução deste script não serão tidos em conta.