Skip to content

This C# project is a geolocation API for pets, where owners can find their pet's position.

Notifications You must be signed in to change notification settings

tamireshc/geoPet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GeoPet

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.

🔍 Tecnologias utilizadas

📋 Execute o projeto em sua máquina

Clone o repositório:

git clone git@github.com:tamireshc/geoPet.git
cd src/geoPet
dotnet restore
dotnet run

🕵 Diagrama UML da API

Geo_Pets drawio

🧪 Executando os testes

Entre na pasta dos testes cd src/geoPet.Test e rode o comando:

dotnet test

Testes de cobertura:

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

🎯 Cobertura dos testes

O testes deste projeto contemplaram uma cobertura de 86,4% das linhas.

Captura de tela 2023-09-13 112939

🔎 Documentação da API

👦 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": "yuri@gmail.com",
  "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": "maria@gmail.com",
  	"cep": "358376190"
  },
  {
  	"owerId": 6,
  	"name": "Alex Green",
  	"email": "alex@gmail.com",
  	"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:

Captura de tela 2023-09-11 153044

  • Obter os dados de um pet com o seu id
  GET /QRCode/Pet/:id

Corpo da resposta:
petCaptura de tela 2023-09-11 153109

❌ 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"
}

⚠️ STATUS 404 - Not Found

  • 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"
}

⚠️ STATUS 404 - Not Found

😃 Extra

🔗 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:

Captura de tela 2023-09-08 195040

About

This C# project is a geolocation API for pets, where owners can find their pet's position.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages