O GeoPet é uma API para geolocalização de pets.
O objetivo deste projeto é proporcionar uma forma para que os tutores de pets possam armazenar as informções dos seus animalzinhos e
buscar pelas suas últimas localizações.
O API também disponibiliza rotas que geram um QR Code com as informações da pessoa cuidadora e dos pets, caso o animal esteja perdido.
- Construção da API - ASP.NET
- Banco de dados SQL Server
- Autenticação - JWT
- Testes - Fluent Assertions e xUnit.net
Clone o repositório:
git clone [email protected]:tamireshc/geoPet.git
cd src/geoPet
dotnet restore
dotnet run
Entre na pasta dos testes cd src/geoPet.Test
e rode o comando:
dotnet test
Na pasta dos testes cd src/GeoPet.Test
rode o comando:
dotnet test --collect:"XPlat Code Coverage" --settings coverlet.runsettings
Para ver os resultados da cobertura no formato HTML,instale o reportgenerator-globaltool com o seguinte comando:
dotnet tool install --global dotnet-reportgenerator-globaltool --version 4.8.6
E rode o seguinte comando na pasta criada pelo Code Coverage para armazenar os resultados:
reportgenerator "-reports:coverage.cobertura.xml" "-targetdir:coveragereport" -reporttypes:Html
Então visualize os resultados do arquivo index.html
no navegador
O testes deste projeto contemplaram uma cobertura de 86,4% das linhas.
👦 Owers
- Login de tutor
POST /Login
Parâmetro | Tipo | Descrição |
---|---|---|
name |
string |
nome do tutor. |
password |
string |
password de acesso. |
✅ STATUS 200 OK
🔑 Retorna um TOKEN de autenticação
- Cadastro de tutor
POST /Ower
Parâmetro | Tipo | Descrição |
---|---|---|
name |
string |
nome do tutor. |
email |
string |
email do tutor. |
cep |
string |
cep do endereço do tutor do tutor. |
password |
string |
password de acesso. |
** Antes da inserção o cep é validado por meio da API ViA CEP
** O email deve ser único.
** A senha é salva em formato HASH.
*Para mais detalhes ver o tópico dos casos de falha
✅ STATUS 200 OK
- Atualizar tutor
PUT /Ower/:id
Parâmetro | Tipo | Descrição |
---|---|---|
name |
string |
nome do tutor. |
email |
string |
email do tutor. |
cep |
string |
cep do endereço do tutor do tutor. |
password |
string |
password de acesso. |
** Antes da inserção o cep é validado por meio da API ViA CEP
** O email deve ser único.
** A senha é salva em formato HASH.
*Para mais detalhes ver o tópico dos casos de falha
✅ STATUS 200 OK
- Obter um tutor por seu id
GET /Ower/:id
Corpo da resposta:
{
{
"owerId": 1,
"name": "Yuri",
"email": "[email protected]",
"cep": "37356260",
"pets": [
{
"petId": 5,
"name": "JUJUBA",
"age": 2,
"size": 1,
"breed": "VIRA-LATA",
"owerId": 1,
}
]
}
}
✅ STATUS 200 OK
- Obter a listagem de todos os tutores
GET /Ower
Corpo da resposta:
[
{
"owerId": 2,
"name": "Maria",
"email": "[email protected]",
"cep": "358376190"
},
{
"owerId": 6,
"name": "Alex Green",
"email": "[email protected]",
"cep": "31567490"
}
]
✅ STATUS 200 OK
- Deletar um tutor por seu id
DELETE /Ower/:id
Corpo da resposta:
✅ STATUS 200 OK
🐶 🐱 Pet
- Cadastro de pet
POST /Pet
Parâmetro | Tipo | Descrição |
---|---|---|
name |
string |
nome do pet. |
age |
integer |
idade do pet. |
size |
Size |
porte do pet. |
breed |
string |
raça do pet. |
owerId |
int |
id do tudor do pet. |
** Antes da inserção é validado se o tutor do pet existe na base de dados e se o size é de um dos tipos: "SMALL", "MEDIUM" ou "LARGE".
*Para mais detalhes ver o tópico dos casos de falha
✅ STATUS 200 OK
- Atualizar pet
PUT /Pet/:id
Parâmetro | Tipo | Descrição |
---|---|---|
name |
string |
nome do Pet. |
age |
integer |
idade do tutor. |
size |
Size |
porte do pet. |
breed |
string |
raça do pet. |
owerId |
int |
id do tudor do pet. |
** Antes da inserção é validado se o tutor do pet existe na base de dados e se o size é de um dos tipos: "SMALL", "MEDIUM" ou "LARGE".
*Para mais detalhes ver o tópico dos casos de falha
✅ STATUS 200 OK
- Obter um pet por seu id
GET /Pet/:id
Corpo da resposta:
{
"petId": 2,
"name": "Bilu",
"age": 2,
"size": 1,
"breed": "string",
"owerId": 2,
"positions": [
{
"positionId": 1002,
"latitude": "-19.9235803",
"longitude": "-43.9811087",
"dateTime": "2023-09-06T22:25:40.477",
"petId": 2
}
]
}
✅ STATUS 200 OK
- Obter a listagem de todos os pets
GET /Pet
Corpo da resposta:
[
{
"petId": 1,
"name": "Damiao",
"age": 2,
"size": 1,
"breed": "string",
"owerId": 4
},
{
"petId": 2,
"name": "Clarinho",
"age": 2,
"size": 1,
"breed": "string",
"owerId": 4
}
]
✅ STATUS 200 OK
- Deletar um pet com seu id
DELETE /Pet/:id
Corpo da resposta:
✅ STATUS 200 OK
📍 Position
- Cadastro de uma posição de um pet
POST /Position
Parâmetro | Tipo | Descrição |
---|---|---|
latitude |
string |
latitude da posição do Pet. |
longitude |
string |
latitude da posição do Pet. |
petId |
int |
id do pet. |
** O campo dateTime é preenchido com a data e hora da inserção.
** Antes da inserção é validado se o pet existe na base de dados.
*Para mais detalhes ver o tópico dos casos de falha
✅ STATUS 200 OK
- Atualizar a posição de um pet
PUT /Position/:id
Parâmetro | Tipo | Descrição |
---|---|---|
latitude |
string |
latitude da posição do Pet. |
longitude |
string |
latitude da posição do Pet. |
dateTime |
string |
data em que o pet foi visto nesta posição. |
petId |
int |
id do pet. |
** Antes da inserção é validado se o pet existe na base de dados.
*Para mais detalhes ver o tópico dos casos de falha
✅ STATUS 200 OK
- Obter a última posição de um pet pelo id do pet id
GET /Position/Pet/:id
Corpo da resposta:
{
"positionId": 12,
"latitude": "15,23456",
"longitude": "30,67890",
"dateTime": "2023-09-08T09:09:50.5213263",
"petId": 4
}
✅ STATUS 200 OK
- Obter a listagem de todas as posições cadastradas
GET /Position
Corpo da resposta:
[
{
"positionId": 3,
"latitude": "15,23456",
"longitude": "30,67890",
"dateTime": "2023-09-06T22:25:40.477",
"petId": 2
},
{
"positionId": 4,
"latitude": "15,23456",
"longitude": "30,67890",
"dateTime": "2023-09-06T22:25:40.477",
"petId": 2
}
]
✅ STATUS 200 OK
- Obter uma posição por seu id
GET /Position/:id
Corpo da resposta:
{
"positionId": 3,
"latitude": "15,23456",
"longitude": "30,67890",
"dateTime": "2023-09-06T22:25:40.477",
"petId": 2
}
✅ STATUS 200 OK
- Deletar um a posição por seu id
DELETE /Position/:id
Corpo da resposta:
✅ STATUS 200 OK
🏁 QR Code
🎯 Estas rotas proporcionam uma forma de gerar um QR Code de identificação para ser utilizados em coleiras de pets
- Obter os dados de um tutor com o seu id
GET /QRCode/Ower/:id
Corpo da resposta:
- Obter os dados de um pet com o seu id
GET /QRCode/Pet/:id
❌ Casos de Falhas
- Ao atualizar, deletar e buscar por id para um ower(tutor), pet ou position inexistente deve emitir a exceção
NotFoundException
⚠️ STATUS 404 - Not Found
{
"message": "Ower not found"
}
OU
{
"message": "Pet not found"
}
OU
{
"message": "Position not found"
}
- Ao tentar inserir/editar um valor diferente de "SMALL", "MEDIUM" ou "LARGE" para o size de um Pet deve emitir a exceção
InvalidValueExceptionn
‼️ STATUS 400 - Bad Request
{
"message": "Invalid Size"
}
- Ao tentar inserir/editar um CEP com formato inválido deve emitir a exceção
InvalidCEPException
‼️ STATUS 400 - Bad Request
{
"message": "Invalid CEP"
}
- Ao tentar inserir/editar um CEP inexistente deve emitir a exceção
InvalidCEPException
‼️ : STATUS 400 - Bad Request
{
"message": "Nonexistent CEP"
}
- Ao tentar inserir/editar utilizando um email já existente na base de dados deve emitir a exceção
DuplicatedValueException
‼️ STATUS 400 - Bad Request
{
"message": "Email already exists"
}
- Ao tentar logar utilizando um email ou password incorreto deve emitir a exceção
NotFoundException
{
"message": "Wrong user ou password"
}
- Ao buscar pela última posição de um pet que não possui posições cadastradas deve emitir a exceção
NotFoundException
{
"message": "There isn´t position for this pet"
}
🔗 Como forma de exemplificar as potencializades da API foi criado um front-end em javascript que utiliza da localização dos pets para criar um map com o os pontos das geo localizações cadastradas.
Para visualizar os pontos é necessário incluir os dados de tutor, pet e posição na API e coloca-la em funcionamento na porta 7275.
📌Link da aplicação:.
https://tamireshc.github.io/geoPetFront/
Captura da aplcação com os pontos de localização de um pet: