#Teste - Eduardo MPS
##Algoritmos:
'Duplicados na lista'
- Gerada console application "duplicados" em .Net core 3.1
- como executar compilado:
dotnet duplicados.dll <lista de inteiros separados por vírgula>
Exemplo:
$ dotnet duplicados.dll 002,12,4,97866,1234,9,35,3456,12,3
Duplicado encontrado!
número: 12, índices: 1,8
'Palíndromo'
- Gerada console application "palindromos" em .Net core 3.1
- como executar compilado:
dotnet palindromos.dll "<frase ou palavra>"
Exemplo:
$ dotnet palindromos.dll "A Rita, sobre vovô, verbos atira"
CONSIDERANDO espaços e diacríticos:
'A Rita, sobre vovô, verbos atira' não é palíndromo.
IGNORANDO espaços e diacríticos:
'A Rita, sobre vovô, verbos atira' é palíndromo!
- Gerada WebAPI em .Net core 3.1
- Criado, para facilitar, com base SQLite, já incluída no repositório
- Com autenticação
- método que recebe JSON com username/password e retorna JWT
- JWT usado como Bearer Token nos demais métodos, exceto método de listar todas
Considerando {URLBase} = https://localhost:5001/api
POST {URLBase}/user/authenticate
curl --request POST \
--url https://localhost:5001/api/user/authenticate \
--header 'content-type: application/json' \
--data '{
"Username":"eduardo",
"Password":"teste"
}'
Retorno:
{
"id": 1,
"username": "eduardo",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IjEiLCJuYmYiOjE1ODQzMDg1NzgsImV4cCI6MTU4NDMxNTc3OCwiaWF0IjoxNTg0MzA4NTc4fQ.aa_PP57NRXXV5fPE-DL8UOOw1z-WY7GHElWeFnAZo9E"
}
Obs.: dois usuários hardcoded, o do exemplo e "eduardo"/"teste"
GET {URLBase}/city/
curl --request GET \
--url https://localhost:5001/api/city/
Retorno:
[
{
"id": 1,
"name": "Florianopolis",
"population": 500000,
"countryState": "SC",
"cityRoutes": [],
"cityRoutesFrom": [],
"neighbors": []
},
...
{
"id": 13,
"name": "Canelinha",
"population": 12000,
"countryState": "SC",
"cityRoutes": [],
"cityRoutesFrom": [],
"neighbors": []
}
]
Obs.:
- único método permitido sem autenticação
- este método não retorna as cidades vizinhas, intencionalmente
GET {URLBase}/city/{id}
curl --request GET \
--url https://localhost:5001/api/city/1 \
--header 'authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IjEiLCJuYmYiOjE1ODQzMDc5MDcsImV4cCI6MTU4NDMxNTEwNywiaWF0IjoxNTg0MzA3OTA3fQ.Hml_DakcrvnpS3XVz-pdnIcvo0BUaQSekEg6iHrtCjY'
Retorno: Caso não encontre pelo id, retorna 404; Caso contrário:
{
"id": 1,
"name": "Florianopolis",
"population": 500000,
"countryState": "SC",
"cityRoutes": [
{
"idCity": 1,
"idCityTo": 2,
"cityTo": {
"id": 2,
"name": "Sao Jose",
"population": 243000,
"countryState": null,
"cityRoutes": [],
"cityRoutesFrom": [],
"neighbors": []
}
}
],
"cityRoutesFrom": [],
"neighbors": [
{
"id": 2,
"name": "Sao Jose",
"population": 243000,
"countryState": null,
"cityRoutes": [],
"cityRoutesFrom": [
{
"idCity": 1,
"idCityTo": 2
}
],
"neighbors": []
}
]
}
POST {URLBase}/city/create
curl --request POST \
--url https://localhost:5001/api/city/create \
--header 'authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IjEiLCJuYmYiOjE1ODQzMDc5MDcsImV4cCI6MTU4NDMxNTEwNywiaWF0IjoxNTg0MzA3OTA3fQ.Hml_DakcrvnpS3XVz-pdnIcvo0BUaQSekEg6iHrtCjY' \
--header 'content-type: application/json' \
--data '{
"name": "Canelinha",
"population": 12000,
"countryState": "SC"
}'
Retorno: Em caso de sucesso,status 201, Created At redirecionando para o método anterior:
{
"id": 1,
"name": "Florianopolis",
"population": 500000,
"countryState": "SC",
"cityRoutes": [
{
"idCity": 1,
"idCityTo": 2,
"cityTo": {
"id": 2,
"name": "Sao Jose",
"population": 243000,
"countryState": null,
"cityRoutes": [],
"cityRoutesFrom": [],
"neighbors": []
}
}
],
"cityRoutesFrom": [],
"neighbors": [
{
"id": 2,
"name": "Sao Jose",
"population": 243000,
"countryState": null,
"cityRoutes": [],
"cityRoutesFrom": [
{
"idCity": 1,
"idCityTo": 2
}
],
"neighbors": []
}
]
}
GET {URLBase}/city/{id}/limits
curl --request GET \
--url https://localhost:5001/api/city/5/limits \
--header 'authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IjEiLCJuYmYiOjE1ODQzMDc5MDcsImV4cCI6MTU4NDMxNTEwNywiaWF0IjoxNTg0MzA3OTA3fQ.Hml_DakcrvnpS3XVz-pdnIcvo0BUaQSekEg6iHrtCjY'
Retorno: Caso não encontre pelo id, retorna 404; Caso contrário:
{
"city": "Palhoca",
"neighbors": "Santo Amaro da Imperatriz,Sao Pedro de Alcantara,Sao Jose"
}
GET {URLBase}/city/population/{idsCSV}
curl --request GET \
--url 'https://localhost:5001/api/city/population/1,2,4' \
--header 'authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IjEiLCJuYmYiOjE1ODQzMDc5MDcsImV4cCI6MTU4NDMxNTEwNywiaWF0IjoxNTg0MzA3OTA3fQ.Hml_DakcrvnpS3XVz-pdnIcvo0BUaQSekEg6iHrtCjY'
Retorno:
{
"cities": "Florianopolis,Sao Jose,Biguacu",
"totalPopulation": 812000
}
POST {URLBase}/city/{id}/update
curl --request POST \
--url https://localhost:5001/api/city/13/update \
--header 'authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IjEiLCJuYmYiOjE1ODQzMDc5MDcsImV4cCI6MTU4NDMxNTEwNywiaWF0IjoxNTg0MzA3OTA3fQ.Hml_DakcrvnpS3XVz-pdnIcvo0BUaQSekEg6iHrtCjY' \
--header 'content-type: application/json' \
--data '{
"name": "Canelinha",
"population": 12000,
"countryState": "SC"
}'
Retorno: Caso não encontre pelo id, status 404 Caso contrário, status 204 (NoContent)
GET {URLBase}/city/findpath/{idCityFrom}/{idCityTo}
curl --request GET \
--url https://localhost:5001/api/city/findpath/10/6 \
--header 'authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IjEiLCJuYmYiOjE1ODQzMDc5MDcsImV4cCI6MTU4NDMxNTEwNywiaWF0IjoxNTg0MzA3OTA3fQ.Hml_DakcrvnpS3XVz-pdnIcvo0BUaQSekEg6iHrtCjY'
Retorno: Caso não encontre início ou destino pelo id, status 404 Caso contrário
{
"start": "Sao Joao Batista",
"end": "Santo Amaro da Imperatriz",
"path": "Sao Joao Batista,Antonio Carlos,Sao Pedro de Alcantara,Santo Amaro da Imperatriz"
}