/api-petshopmanager

Este projeto é uma WEB API de gerenciamento de PetShop. Com ela você poderá consultar, cadastrar, editar e excluir dados de clientes, animais e veterinários além de obter descrições de consultas realizadas e um registro de todos os atendimentos do seu empreendimento. Esse sistema ainda conta com serviços de segurança de acesso, para consumir dados da api é necessário estar registrado e logado, além de estar identificado através de um token gerado pelo sistema JWT.

Primary LanguageC#

🎯 DesafioPetShopManager

Este projeto é uma WEB API de gerenciamento de PetShop.

Com ela você poderá consultar, cadastrar, editar e excluir dados de clientes, animais e veterinários além de obter descrições de consultas realizadas e um registro de todos os atendimentos do seu empreendimento.

Esse sistema ainda conta com serviços de segurança de acesso, para consumir dados da api é necessário estar registrado e logado, além de estar identificado através de um token gerado pelo sistema JWT.


🧩 Referências de API

🐶 Entidade Animal

👉 Retorna todos os animais cadastrados

  GET - https://localhost:5001/api/v1/animais


👉 Retorna somente 1 animal cadastrado

  GET - https://localhost:5001/api/v1/animais/{id}
Parametro Tipo Descrição
id int Requerido. Id do Animal


👉 Retorna detalhes da raça pesquisada

  GET - https://localhost:5001/api/v1/animais/search/{raca}
Parametro Tipo Descrição
raca string Requerido. Raça do Animal


👉 Cria um registro de animal no banco

  POST - https://localhost:5001/api/v1/animais
Parametro Tipo Descrição
nome string Requerido. Nome do Animal
clienteID int Requerido. Id do tutor do animal
sexo string Requerido. Sexo do Animal
pesoAtual int Peso do Animal
alturaAtual int Altura do Animal
dataNascimento string Requerido. Data de Nascimento do Animal
raca string Raça do Animal


👉 Atualiza um registro de animal no banco

  PATCH - https://localhost:5001/api/v1/animais/atualizar/{id}
Parametro Tipo Descrição
id int Requerido. Id do Animal
nome string Nome do Animal
clienteID int Id do tutor do animal
sexo string Sexo do Animal
pesoAtual int Peso do Animal
alturaAtual int Altura do Animal
dataNascimento string Data de Nascimento do Animal
raca string Raça do Animal


👉 Exclui 1 animal cadastrado

  DELETE - https://localhost:5001/api/v1/animais/deletar/{id}
Parametro Tipo Descrição
id int Requerido. Id do Animal
🏢 Entidade Cargo

👉 Retorna todos os cargos cadastrados

  GET - https://localhost:5001/api/v1/cargos


👉 Retorna somente 1 cargo cadastrado

  GET - https://localhost:5001/api/v1/cargos/{id}
Parametro Tipo Descrição
id int Requerido. Id do cargo


👉 Cria um registro de cargo no banco

  POST - https://localhost:5001/api/v1/cargos
Parametro Tipo Descrição
nome string Requerido. Nome do cargo


👉 Atualiza um registro de cargo no banco

  PATCH - https://localhost:5001/api/v1/cargos/atualizar/{id}
Parametro Tipo Descrição
id int Requerido. Id do cargo
nome string Nome do cargo


👉 Exclui 1 cargo cadastrado

  DELETE - https://localhost:5001/api/v1/cargos/deletar/{id}
Parametro Tipo Descrição
id int Requerido. Id do cargo
🎫 Entidade Servico

👉 Retorna todos os servicos cadastrados

  GET - https://localhost:5001/api/v1/servicos


👉 Retorna somente 1 servico cadastrado

  GET - https://localhost:5001/api/v1/servicos/{id}
Parametro Tipo Descrição
id int Requerido. Id do servico


👉 Cria um registro de servico no banco

  POST - https://localhost:5001/api/v1/servicos
Parametro Tipo Descrição
tipo string Requerido. Tipo de servico
valor double Requerido. Valor do servico


👉 Atualiza um registro de servico no banco

  PATCH - https://localhost:5001/api/v1/servicos/atualizar/{id}
Parametro Tipo Descrição
id int Requerido. Id do servico
tipo string Tipo de servico
valor double Valor do servico


👉 Exclui 1 servico cadastrado

  DELETE - https://localhost:5001/api/v1/servicos/deletar/{id}
Parametro Tipo Descrição
id int Requerido. Id do servico
👷 Entidade Funcionario

👉 Retorna todos os funcionarios cadastrados

  GET - https://localhost:5001/api/v1/funcionarios


👉 Retorna somente 1 funcionario cadastrado

  GET - https://localhost:5001/api/v1/funcionarios/{id}
Parametro Tipo Descrição
id int Requerido. Id do funcionario


👉 Cria um registro de funcionario no banco

  POST - https://localhost:5001/api/v1/funcionarios
Parametro Tipo Descrição
nome string Requerido. Nome do funcionario
cpf string Requerido. Cpf do funcionario
cargoId int Requerido. Id do cargo do funcionario
email string Requerido. Email do funcionario
senha string Requerido. Senha do funcionario


👉 Atualiza um registro de funcionario no banco

  PATCH - https://localhost:5001/api/v1/funcionarios/atualizar/{id}
Parametro Tipo Descrição
id int Requerido. Id do funcionario
nome string Nome do funcionario
cpf string Cpf do funcionario
cargoId int Id do cargo do funcionario
email string Email do funcionario
senha string Senha do funcionario


👉 Exclui 1 funcionario cadastrado

  DELETE - https://localhost:5001/api/v1/funcionarios/deletar/{id}
Parametro Tipo Descrição
id int Requerido. Id do funcionario
🧍 Entidade Cliente

👉 Retorna todos os clientes cadastrados

  GET - https://localhost:5001/api/v1/clientes


👉 Retorna todos os cachorros do cliente cadastrado

  GET - https://localhost:5001/api/v1/clientes/animal/{id}
Parametro Tipo Descrição
id int Requerido. Id do cliente


👉 Retorna somente 1 cliente cadastrado

  GET - https://localhost:5001/api/v1/clientes/{id}
Parametro Tipo Descrição
id int Requerido. Id do funcionario


👉 Cria um registro de cliente no banco

  POST - https://localhost:5001/api/v1/clientes
Parametro Tipo Descrição
nome string Requerido. Nome do cliente
cpf string Requerido. Cpf do cliente
telefone int Requerido. Telefone do cliente
email string Requerido. Email do cliente
senha string Requerido. Senha do cliente


👉 Atualiza um registro de cliente no banco

  PATCH - https://localhost:5001/api/v1/clientes/atualizar/{id}
Parametro Tipo Descrição
id int Requerido. Id do cliente
nome string Nome do cliente
cpf string Cpf do cliente
telefone int Telefone do cliente
email string Email do cliente
senha string Senha do cliente


👉 Exclui 1 cliente cadastrado

  DELETE - https://localhost:5001/api/v1/clientes/deletar/{id}
Parametro Tipo Descrição
id int Requerido. Id do cliente
🧍 Entidade Atendimento

👉 Retorna todos os atendimentos cadastrados

  GET - https://localhost:5001/api/v1/atendimentos


👉 Retorna todos os atendimentos do cliente cadastrado buscando por Id

  GET - https://localhost:5001/api/v1/atendimentos/cliente/busca/{id}
Parametro Tipo Descrição
id int Requerido. Id do cliente


👉 Retorna todos os atendimentos do cliente cadastrado buscando por nome e cpf

  GET - https://localhost:5001/api/v1/atendimentos/cliente/busca/{nome}/{cpf}
Parametro Tipo Descrição
nome string Requerido. Nome do cliente
cpf string Requerido. CPF do cliente


👉 Retorna todos os atendimentos do animal cadastrado buscando por Id

  GET - https://localhost:5001/api/v1/atendimentos/animal/busca/{id}
Parametro Tipo Descrição
id int Requerido. Id do cliente


👉 Retorna todos os atendimentos do animal cadastrado buscando por nome e data de nascimento

  GET - https://localhost:5001/api/v1/atendimentos/animal/busca/{nome}/{nascimento}
Parametro Tipo Descrição
nome string Requerido. Nome do animal
nascimento string Requerido. Data de nascimento do animal


👉 Cria um registro de atendimento no banco

  POST - https://localhost:5001/api/v1/atendimentos
Parametro Tipo Descrição
servicoId int Requerido. Id do Servico
clienteId int Requerido. Id do Cliente
funcionarioId int Requerido. Id do Funcionario
animalId int Requerido. Id do Animal
pesoDoAnimalAtualizado double Peso do animal no dia do atendimento
alturaDoAnimalAtualizado double Altura do animal no dia do atendimento
diagnostico string Diagnóstico do animal
observacoes string Observações sobre o animal


👉 Atualiza um registro de atendimento no banco

  PATCH - https://localhost:5001/api/v1/atendimentos/atualizar/{id}
Parametro Tipo Descrição
id int Requerido. Id do Atendimento
diagnostico string Diagnóstico do animal
observacoes string Observações sobre o animal

🧰 Como utilizar

1 - Abra seu terminal e clone o repositório usando esse comando:

2 - No diretório PetShopManager/appsettings.json altere a propriedade DefaultConnection com os dados do seu banco de dados MySQL;

3 - No diretório Tests/BaseTest.cs altere o valor da variável mySqlConnection com os dados do seu banco de dados MySQL;

4 - Dentro da pasta do projeto, execute esses dois comandos:

  • dotnet ef database update (Carrega o migration criando e populando o banco de dados)
  • dotnet run --project PetShopManager (Executa a aplicação)

5 - Para rodar os testes, execute esse comando:

  • dotnet test

Nosso banco de dados já possui dois usuários cadastrados com diferentes permissões:

👷 Funcionario

Email: funcionario@gft.com

Senha: Gft@1234

Permissões
Possui permissão para todos os EndPoints da aplicação
🧍 Cliente

Email: cliente@gft.com

Senha: Gft@1234

Permissões
Entidade Animal: GET com Id / GET com raça / GET random dogs / POST / PATCH
Entidade Atendimentos: GET cliente com Id / GET cliente com nome e cpf / GET animal com id / GET animal com nome
Entidade Cargo : Não há permissão
Entidade Login: POST
Entidade Servico: Não há permissão
Entidade Cliente: GET com Id / POST / PATCH
Entidade Funcionario: Não há permissão

🛠 Ferramentas utilizadas

  • .Net 5.0;
  • ASP NET Core MVC;
  • ASP NET Core WEB API;
  • EntityFrameworkCore;
  • Visual Studio Code;
  • xUnit;
  • DataAnnotations;
  • IdentityModel.Tokens.Jwt;
  • Security.Claims;
  • Newtonsoft.Json;
  • AspNetCore.Authorization;
  • AspNetCore.Authentication.JwtBearer;
  • Extensions.DependencyInjection;
  • MySQL.

📖 Aprendizados

  • Conceitos de arquitetura MVC;

  • CRUD com Pomelo.EntityFrameworkCore em banco MySQL;

  • Customização de migrations para popular banco de dados;

  • Uso de DataAnotation para validação de dados;

  • Criar e manipular banco de dados com relação entre entidades;

  • Criar rotas para acesso a dados do sistema;

  • Criar sistema de autenticação por tokens JWT;

  • Criar testes unitários usando banco de dados mockado;

  • Requisição de API externa;


Imagens do processo de organização e criação do projeto

🖼️ Backlog do projeto

🖼️ EndPoints do projeto

🖼️ Testes