Este desafio consiste no desenvolvimento de uma plataforma onde teremos um ranking baseado nas pontuações de entregas. Os alunos possuem Tarefas, Desafios e Projetos que são avaliados entre 0 e 100, e para cada uma destas atividades a ideia é ele receber uma pontuação com pesos diferentes de acordo com a sua pontuação. Os alunos são divididos em escolas de Dados, Tecnologia e Produto, deverá existir um ranking para cada escola.
Requisitos Funcionais
Notas:
- Como professor ou avaliador devo poder atribuir notas para cada aluno em diferentes tipos de atividades (Tarefas, Desafios, Projetos).
- As notas registradas devem estar associadas a alunos específicos e às atividades correspondentes
- O sistema deve permitir a especificação da pontuação para cada atividade, variando de 0 a 100
Pontuação:
- O sistema deve calcular a pontuação de cada aluno com base nas notas atribuídas às atividades e nos pesos atribuídos a cada atividade.
Ranking Escolar:
- Devo poder visualizar uma lista dos alunos divididos em três escolas diferentes: Dados, Tecnologia e Produto. De forma ordenada com base na pontuação.
- Cada ranking escolar deve exibir os 10 melhores alunos da escola correspondente.
Ranking Geral:
- Devo poder visualizar um ranking com os 3 melhores alunos em uma categoria "pódio geral".
Requisitos não funcionais
Escalabilidade:
- O sistema deve calcular a pontuação de cada aluno com base nas notas atribuídas às atividades e nos pesos atribuídos a cada atividade.
Tecnologias utilizadas
NodeJS: Para construção da API.
AngularJS: Para construção da página WEB.
MySQL: Para o banco de dados.
Docker: Para a containerização.
Arquitetura do projeto
Definimos a utilização da arquitetura MVC neste projeto, para maior agilidade no desenvolvimento.
/api:
- src/core: Pasta principal onde ficam as entities, repository, services e controller
- src/data-mocked: Onde ficam os dados mockados na inicialização da API.
- src/routes: Aqui são chamados os controllers e definidas suas rotas(url's)
- src/utils: Pasta onde ficam os enums e tipagens de algumas requisições.
/web:
- src/app/components: Pasta onde ficam os componentes renderizados em outras telas na aplicação
- src/app/core: Aqui estão as páginas da aplicação.
- src/app/model: Guardamos a tipagens de algumas requisições que necessitam de tipagem.
- src/app/services: Aqui ficam as funções que fazem a requisição direta para api
- src/assets: Aqui ficam as imagens utilizadas.
Rodando a aplicação:
Clone o repositório com o comando: git clone https://github.com/silasprd/software-eng-pl-challenge
Será necessário criar um banco de dados local para aplicação com o nome "dnc"
Acesse a pasta api/src:Altere as informações de data-source.ts, para as informações do seu banco de dados, como username, password e port
Acesse a pasta api e execute o comando:npm install
Rode a api com o comando:npm start
Acesse a pasta web e dentro da pasta web rode o comando:npm install
Ainda dentro da pasta web, após a instalação das dependências rode o frontend com o comando:"npm start" ou "ng serve"