Projeto Realizado para o desafio da Alterdata
Qual arquitetura foi escolhida?
R - Foi utilizado o .net core 2.2 com o conceito de DDD e utilizando command e handler, além de estar rodando no docker.
Porque foi escolhido essa arquitetura?
R- Foi escolhida pois o .net core é um cross plataform, sendo facilmente colocado junto ao docker em qualquer ambiente, além do conceito de DDD utilizando command e handler, separando cada responsabilidade, dando facil entendimento e manutenção do código, bem como seu ciclo de vida facilmente utilizável.
Quais endpoints foram desenvolvidos?
R- Foram criados três endpoints para a finalidade de criar funcionários, tarefas e a votação em si.
Explicando cada endpoint
O Primeiro endpoint é o de Employee, com os seguintes métodos:
POST
/api/Employee
Esperando receber como parâmetros:
{
"Name": "string",
"Email": "string",
"Password": "string"
}
Irá retornar o funcionário cadastrado:
{
"Id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"Name": "string",
"Email": "string"
}
GET
/api/Employee
Irá retornar uma lista de funcionários:
[
{
"Id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"Name": "string",
"Email": "string"
}
]
O Segundo endpoint é o de Task, com os seguintes métodos:
POST
/api/Task
Esperando receber como parâmetros:
{
"Name": "string"
}
Irá retornar a tarefa cadastrada:
{
"Id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"Name": "string"
}
GET
/api/Task
Irá retornar uma lista de tarefas:
[
{
"Id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"Name": "string"
}
]
GET
/api/Task/EmployeeVotes
Irá retornar uma lista de tarefas com os usuários e a hora em que eles votaram:
[
{
"TaskId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"TaskName": "string",
"EmployeeVotes": [
{
"TasksId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"EmployeeName": "string",
"Date": "2020-11-09T01:36:29.537Z"
}
]
}
]
GET
/api/Task/Votes
Irá retornar uma listagem das tarefas com o número de votos. Esta listagem está na ordem das tarefas mais votadas:
[
{
"TaskName": "string",
"QuantityVotes": 0
}
]
O Terceiro endpoint é o de Vote, com o seguinte método:
POST
/api/Vote
Este método irá armazenar os votos de cada funcionário em uma tarefa.
Esperando receber como parâmetros:
{
"EmployeeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"TaskId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"Comment": "string"
}
Irá retornar o voto cadastrado:
{
"Id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"EmployeeId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"TaskId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"Comment": "string",
"Date": "2020-11-09T01:42:34.393Z"
}
Passo a passo para configurar e utilizar o sistema
- Primeiro realize o clone do projeto
- Após o clone, vá até a pasta .docker e abra um prompt de comando
- Tenha o docker instalado na maquina, caso não tenha, realize o download no seguinte link: https://www.docker.com/get-started
- Depois escreva a seguinte instrução: docker-compose up -d --build poll-api
- Está instrução irá baixar a imagem do postgree sql e depois irá rodar a imagem do poll-api, onde nele está a nossa API
- Após ter terminado de configurar as imagens, utilize a instrução: docker ps
- Verifique se apareceram duas imagens, com os nomes poll-api e postgres:12, além de ambas estarem com o status Up
- Caso esteja tudo certo, acesso o seguinte link no seu navegador: http://localhost:5033/poll/swagger/index.html
- Caso apareça uma página do swagger com a API poll, significa que está tudo correto, caso contrário, verifique novamente se o seu docker está rodando direitinho
- Após isso, teremos que configurar o banco, a imagem postgres:12 vem com a base poll-pgsql, porém sem nenhuma estrutura com as tabelas, para isso precisaremos restaurar o backup da base
- Mas antes disso, teremos que ter um client de postgres, eu utilizei o pgAdmin, o download pode ser realizado no seguinte link: https://www.pgadmin.org/
- Após instalado, acesse o client e depois crie uma nova conexão
- Irá aparecer uma tela pedindo algumas configurações, informe os seguintes dados:
- Host: localhost
- Port: 5432
- Maintenance Database: postgres
- Username: pguser
- Password: cmsol@strongpass!123
- Após isso, clique em salvar
- Caso esteja tudo certo, irá aparecer a base de dados do postgres e a pgsql-data, que é a que utilizaremos a partir de agora
- Após isso, vá até a pasta Utils
- Nessa pasta, teremos o arquivo poll-pgsql.bak
- No pgAdmim, clique com o botão direito do mouse na base de dados poll-pgsql > restore
- Irá aparecer uma tela pedindo o arquivo de backup, selecione o arquivo poll-pgsql.bak
- Após isso a sua base estará pronta para utilização
- Caso você não consiga restaurar a base, existe uma outra alternativa, que é utilizar o migration do .net, que pode ser utizada seguindo as instruções do seguinte link: https://docs.microsoft.com/pt-br/ef/core/managing-schemas/migrations/?tabs=dotnet-core-cli
- Agora você pode utilizar o sistema acessando o link http://localhost:5033/poll/swagger/index.html
- Nele contém toda a documentação de cada endpoint, porém já passei o propósito de cada endpoint anteriormente
Agora é só utilizar o sistema e se divertir!!!!