/Iris-eCom

Projeto final da Academia .Net da Atos em parceria com a UniCesumar.

Primary LanguageC#

Íris eCom - API

Sobre

A API Íris eCom permite aos usuários gerenciar suas contas e interagir com produtos e categorias de maneira eficiente. Com uma interface RESTful simples, a API possibilita operações de CRUD (Create, Read, Update, Delete) tanto para usuários quanto para produtos e categorias, garantindo flexibilidade para desenvolvedores em integrar funcionalidades de e-commerce de forma ágil.

🔗Funcionalidades

  • Usuários:

  • Cadastrar um novo usuário.
  • Buscar informações do usuário.
  • Atualizar os dados do usuário.
  • Excluir um usuário.
  • Produtos:

  • Cadastrar novos produtos.
  • Buscar produtos existentes.
  • Atualizar detalhes de produtos.
  • Excluir produtos.
  • Categorias:

  • Cadastrar novas categorias de produtos.
  • Buscar categorias.
  • Atualizar informações de categorias.
  • Excluir categorias.

🔗Endpoints

Usuários

1. Cadastrar um usuário
  • URL: /apiUsuario
  • Método: POST
  • Descrição: Cria um novo usuário no sistema.
  • Corpo da Requisição:

{
"nome": "string",
  "email": "string",
  "senha": "string",
  "cep": "string",
  "endereco": "string",
  "bairro": "string",
  "cidade": "string",
  "uf": "string",
  "cpf": "string",
  "dataNascimento": "2024-09-24",
  "imagem": "string"
  }
  • Resposta de Sucesso (201 - Created):
  • 
      {
      "id": 8,
      "nome": "Usuário Exemplo",
      "email": "email@exemplo.com",
      "senha": "12345678",
      "cep": "09876543",
      "endereco": "Exemplo",
      "bairro": "Exemplo",
      "cidade": "Exemplo",
      "uf": "SP",
      "cpf": "1234567899",
      "dataNascimento": "2024-09-24",
      "imagem": "Exemplo"
    }
    

    2. Buscar dados do usuário

    • URL: /buscarId/{id}
    • Método: GET
    • Descrição: Retorna os detalhes de um usuário específico.
    • Resposta de Sucesso (200 - OK):
    
      {
      "id": 8,
      "nome": "Usuário Exemplo",
      "email": "email@exemplo.com",
      "senha": "12345678",
      "cep": "09876543",
      "endereco": "Exemplo",
      "bairro": "Exemplo",
      "cidade": "Exemplo",
      "uf": "SP",
      "cpf": "1234567899",
      "dataNascimento": "2024-09-24",
      "imagem": "Exemplo",
      "produtos": []
    }
    

    3. Buscar todos os usuários

    • URL: /api/Usuario
    • Método: GET
    • Descrição: Retorna todos os usuários cadastrados no sistema.
    • Resposta de Sucesso (200 - OK):
    
      [{
        "id": 8,
        "nome": "Usuário Exemplo",
        "email": "email@exemplo.com",
        "senha": "12345678",
        "cep": "09876543",
        "endereco": "Exemplo",
        "bairro": "Exemplo",
        "cidade": "Exemplo",
        "uf": "SP",
        "cpf": "1234567899",
        "dataNascimento": "2024-09-24",
        "imagem": "Exemplo",
        "produtos": []
      },
      {
        "id": 9,
        "nome": "Usuário Exemplo",
        "email": "email@teste.com",
        "senha": "",
        "cep": "",
        "endereco": "Exemplo",
        "bairro": "Exemplo",
        "cidade": "Exemplo",
        "uf": "SP",
        "cpf": "1234567899",
        "dataNascimento": "2024-09-24",
        "imagem": "Exemplo",
        "produtos": []
      }
    ]
    

    4. Buscar dados do usuário por email

    • URL: /buscarEmail/{email}
    • Método: GET
    • Descrição: Retorna os detalhes de um usuário específico.
    • Resposta de Sucesso (200 - OK):
    
      {
      "id": 8,
      "nome": "Usuário Exemplo",
      "email": "email@exemplo.com",
      "senha": "12345678",
      "cep": "09876543",
      "endereco": "Exemplo",
      "bairro": "Exemplo",
      "cidade": "Exemplo",
      "uf": "SP",
      "cpf": "1234567899",
      "dataNascimento": "2024-09-24",
      "imagem": "Exemplo",
      "produtos": []
    }
    

    5. Atualizar dados do usuário

    • URL: /api/Usuario
    • Método: PUT
    • Descrição: Atualiza as informações de um usuário.
    • Corpo da Requisição:
    
        {
          "id": 0,
          "nome": "string",
          "email": "string",
          "senha": "string",
          "cep": "string",
          "endereco": "string",
          "bairro": "string",
          "cidade": "string",
          "uf": "string",
          "cpf": "string",
          "dataNascimento": "2024-09-24",
          "imagem": "string"
        }
      
    • Resposta de Sucesso (200 - OK):
    
        {
          "id": 9,
          "nome": "Usuário Exemplo Atualizado",
          "email": "emailAtualizado@teste.com",
          "senha": "",
          "cep": "",
          "endereco": "Exemplo Atualizado",
          "bairro": "Exemplo Atualizado",
          "cidade": "Exemplo Atualizado",
          "uf": "SP",
          "cpf": "1234567899",
          "dataNascimento": "2024-09-24",
          "imagem": "Exemplo"
        }
      

    6. Excluir usuário

    • URL: /api/Usuario/{id}
    • Método: DELETE
    • Descrição: Remove um usuário do sistema.
    • Resposta de Sucesso (404 - Not Found):
    
         Usuário não encontrado. O usuário foi excluído.
       

    Produtos

    1. Cadastrar um novo produto
    • URL: /api/Produto
    • Método: POST
    • Descrição: Adiciona um novo produto ao catálogo.
    • Corpo da Requisição:
    
        {
          "nome": "string",
          "descricao": "string",
          "preco": 0,
          "infoTecnica": "string",
          "quantidade": 0,
          "imagem": "string",
          "categoriaId": 0,
          "usuarioId": 0
        }
      
    • Resposta de Sucesso (201 - Created):
    
        {
          "id": 14,
          "nome": "Processador",
          "descricao": "Exemplo",
          "preco": 500,
          "infoTecnica": "Exemplo",
          "quantidade": 45,
          "imagem": "Exemplo",
          "categoriaId": 1,
          "usuarioId": 8
        }
      

    2. Atualizar um produto

    • URL: /api/Produto
    • Método: PUT
    • Descrição: Atualiza as informações de um produto existente.
    • Corpo da Requisição:
    
      {
        "id": 0,
        "nome": "string",
        "descricao": "string",
        "preco": 0,
        "infoTecnica": "string",
        "quantidade": 0,
        "imagem": "string",
        "categoriaId": 0,
        "usuarioId": 0
      }
    
    • Resposta de Sucesso (200 - OK):
    
      {
        "id": 14,
        "nome": "Processador Atualizado",
        "descricao": "Exemplo Atualizado",
        "preco": 500,
        "infoTecnica": "Exemplo Atualizado",
        "quantidade": 50,
        "imagem": "Exemplo Atualizado",
        "categoriaId": 1,
        "usuarioId": 8
      }
    

    3. Buscar produtos

    • URL: /api/Produto
    • Método: GET
    • Descrição: Retorna uma lista de produtos cadastrados.
    • Resposta de Sucesso (200 - OK):
    
    [ 
      {
        "id": 14,
        "nome": "Processador Atualizado",
        "descricao": "Exemplo Atualizado",
        "preco": 500,
        "infoTecnica": "Exemplo Atualizado",
        "quantidade": 50,
        "imagem": "Exemplo Atualizado",
        "categoriaId": 1,
        "categoria": {
          "id": 1,
          "nome": "Hardware",
          "imagem": "https://placehold.co/900x200",
          "produtos": []
        },
        "usuarioId": 8
      }
    ]
    

    4. Buscar produto por id

    • URL: /BuscaPorId{id}
    • Método: GET
    • Descrição: Retorna os detalhes de um produto específico.
    • Resposta de Sucesso (200 - OK):
    
      {
        "id": 14,
        "nome": "Processador Atualizado",
        "descricao": "Exemplo Atualizado",
        "preco": 500,
        "infoTecnica": "Exemplo Atualizado",
        "quantidade": 50,
        "imagem": "Exemplo Atualizado",
        "categoriaId": 1,
        "categoria": {
          "id": 1,
          "nome": "Hardware",
          "imagem": "https://placehold.co/900x200",
          "produtos": []
        },
        "usuarioId": 8
      }
    

    5. Buscar produto por nome

    • URL: /BuscaPorNome{nome}
    • Método: GET
    • Descrição: Retorna uma lista de produtos com o nome especificado.
    • Resposta de Sucesso (200 - OK):
    
    [
      {
        "id": 14,
        "nome": "Processador Atualizado",
        "descricao": "Exemplo Atualizado",
        "preco": 500,
        "infoTecnica": "Exemplo Atualizado",
        "quantidade": 50,
        "imagem": "Exemplo Atualizado",
        "categoriaId": 1,
        "categoria": {
          "id": 1,
          "nome": "Hardware",
          "imagem": "https://placehold.co/900x200",
          "produtos": []
        },
        "usuarioId": 8
      }
    ]
    

    6. Buscar produto por categoria

    • URL: /BuscaPorCategoria{codigo}
    • Método: GET
    • Descrição: Retorna uma lista de produtos com a categoria especificado.
    • Resposta de Sucesso (200 - OK):
    
    [
      {
        "id": 14,
        "nome": "Processador Atualizado",
        "descricao": "Exemplo Atualizado",
        "preco": 500,
        "infoTecnica": "Exemplo Atualizado",
        "quantidade": 50,
        "imagem": "Exemplo Atualizado",
        "categoriaId": 1,
        "categoria": {
          "id": 1,
          "nome": "Hardware",
          "imagem": "https://placehold.co/900x200",
          "produtos": []
        },
        "usuarioId": 8
      }
    ]
    

    7. Excluir um produto

    • URL: /api/Produto/{id}
    • Método: DELETE
    • Descrição: Remove um produto do sistema.
    • Resposta de Sucesso (404 - Not Found)
    
      Produto não encontrado. O produto foi excluído.
    

    Categorias

    1. Cadastrar uma nova categoria
    • URL: /api/Categoria
    • Método: POST
    • Descrição: Adiciona uma nova categoria de produtos.
    • Corpo da Requisição:
    
      {
      "nome": "string",
      "imagem": "string"
      }
    
    • Resposta de Sucesso (201 - Created):
    
      {
        "id": 9,
        "nome": "Tablets",
        "imagem": "exemplo"
      }
    

    2. Atualizar uma categoria

  • URL: /api/Categoria
  • Método: PUT
  • Descrição: Atualiza as informações de uma categoria.
  • Corpo da Requisição:
  • 
      {
        "id": 0,
        "nome": "string",
        "imagem": "string"
      }
    
    • Resposta de Sucesso (200 - OK):
    
      {
        "id": 9,
        "nome": "Tablets Atualizado",
        "imagem": "Exemplo Atualizado"
      }
    

    3. Buscar uma categoria

  • URL: /BuscarPorId{id}
  • Método: GET
  • Descrição: Busca as informações de uma categoria.
  • Resposta de Sucesso (200 - OK):
  • 
      {
        "id": 9,
        "nome": "Tablets Atualizado",
        "imagem": "Exemplo Atualizado"
      }
    

    4. Buscar categorias por nome

  • URL: /BuscarPorNome{nome}
  • Método: GET
  • Descrição: Busca uma lista de categorias.
  • Resposta de Sucesso (200 - OK):
  • 
      [
        {
          "id": 9,
          "nome": "Tablets Atualizado",
          "imagem": "Exemplo Atualizado"
        }
      ]
    

    5. Buscar todas as categorias

  • URL: /api/Categoria
  • Método: GET
  • Descrição: Busca todas as categorias cadastrada no sistema.
  • Resposta de Sucesso (200 - OK):
  • 
      [
          {
          "id": 9,
          "nome": "Tablets Atualizado",
          "imagem": "Exemplo Atualizado"
        }
      ]
    

    6. Excluir uma categoria

    • URL: /api/Categoria{id}
    • Método: DELETE
    • Descrição: Remove uma categoria do sistema.
    • Resposta de Sucesso (404 - Not Found)
    
      Categoria não encontrada. A categoria foi excluída.
    

    🔗Erros comuns

    1. 404 - Not Found
    • Motivo: O recurso solicitado não foi encontrado.
    • Exemplo de Resposta:
    • 
          Usuário não encontrado.
        

    2. 400 - Bad Request

    • Motivo: Já existe um usuário cadastrado com o mesmo email.
    • Exemplo de Resposta:
    • Usuário já cadastrado.

    3. 500 - Internal Server Error

    • Motivo: Ocorreu um erro inesperado no servidor.
    • Exemplo de Resposta:
    • 
          {
        "error": "Erro interno do servidor"
      }
        

    Tecnologias

    • ASP NET 8
    • xUnit para o projeto de teste
    • SQL Server
    • Postman
    • Swagger

    Como Rodar o Projeto Localmente

    Pré-requisitos

    • Ter o .Net 8 instalado;
    • Ter de preferência o Visual Studio instalado;
    • Ter SQL Server Instalado.

    Configuração do Ambiente

    1. Clone o repositório:
    
        git clone https://github.com/thamirespereira/Iris-eCom.git
      
    2. Instale as dependências:
    • NewtonsoftJson
    • EntityFrameworkCore
    • EntityFrameworkCore.Sql
    • EntityFrameworkCore.Tools
    • Swashbuckle.AspNetCore
    3. Criação do banco de dados:
    • Execute o script sql de criação que se encontra na pasta SQL;
    • Execute o script de inserção para uma melhor experiência ao utilizar nosso Front-End.
    4. Mude a Connection String
    • No projeto, navegue até o arquivo appsettings.json;
    • Mude a Connection String conforme o exemplo:
    • 
            "ConnectionStrings": {
        "DefaultConnection": "Server=nomeDoSeuServidor;Initial Catalog=db_irisecom;Trusted_Connection=True;TrustServerCertificate=true;MultipleActiveResultSets=true;Encrypt=False",
      }
          

    Testes da API

    Para garantir a qualidade e a robustez da API, utilizamos uma suíte de testes automatizados. Aqui estão as instruções para executar os testes.

    Configuração do Ambiente de Teste

    1. Clone o repositório:
    
        git clone https://github.com/thamirespereira/Iris-eCom.git
      
    2. Instale as dependências:
    • Moq
    • RestSharp
    3. Execute os testes
  • Utilize o gerenciador de testes do Visual Studio para executar os testes.