Giter Club home page Giter Club logo

projeto-api-de-receitas's Introduction

API de Receitas

Boas-vindas ao repositório do projeto API de Receitas

Para realizar o projeto, atente-se a cada passo descrito a seguir, e se tiver qualquer dúvida, nos envie no Slack da turma! #vqv 🚀

Aqui, você vai encontrar os detalhes de como estruturar o desenvolvimento do seu projeto a partir desse repositório, utilizando uma branch específica e um Pull Request para colocar seus códigos.

Termos e acordos

Ao iniciar este projeto, você concorda com as diretrizes do Código de Conduta e do Manual da Pessoa Estudante da Trybe.

Entregáveis


🤷🏽‍♀️ Como entregar

Para entregar o seu projeto você deverá criar um Pull Request neste repositório.

Lembre-se que você pode consultar nosso conteúdo sobre Git & GitHub e nosso Blog - Git & GitHub sempre que precisar!

🧑‍💻 O que deverá ser desenvolvido

Sua empresa do coração desenvolveu um aplicativo de Receitas que está totalmente funcional 😉. Agora, ela quer expandir esse negócio e criar uma api de receitas que vai retornar todas as receitas disponíveis, adicionar, remover e atualizar as mesmas. Além disso, a empresa deseja que seja possível cadastrar, remover, consultar e atualizar dados de usuários do app e permitir o cadastro e consulta de comentários nessas receitas.

Você recebeu a atribuição de desenvolver essa api de receitas com ASP.NET. Todos os services com os modelos de dados já estão disponíveis.

📝 Habilidades a serem trabalhadas

Neste projeto, verificamos se você é capaz de:

  • Entender do funcionamento do ASP.NET e como ele se integra ao C#.
  • Entender da arquitetura MVC.
  • Criar controllers que recebam dados pelo corpo e pela URL da requisição.
  • Lançar códigos de retorno que respeitem o padrão do HTTP Status Code.

Orientações


‼️ Antes de começar a desenvolver
  1. Clone o repositório
  • Use o comando: git clone [email protected]:tryber/csharp-034-csharp-projeto-api-de-receitas.git.
  • Entre na pasta do repositório que você acabou de clonar:
    • cd csharp-034-csharp-projeto-api-de-receitas
  1. Instale as dependências
  • Entre na pasta src/.
  • Execute o comando: dotnet restore.
  1. Crie uma branch a partir da branch master
  • Verifique se você está na branch master
    • Exemplo: git branch
  • Se não estiver, mude para a branch master
    • Exemplo: git checkout master
  • Agora crie uma branch à qual você vai submeter os commits do seu projeto
    • Você deve criar uma branch no seguinte formato: nome-de-usuario-nome-do-projeto
    • Exemplo: git checkout -b joaozinho-csharp-034-csharp-projeto-api-de-receitas
  1. Adicione as mudanças ao stage do Git e faça um commit
  • Verifique que as mudanças ainda não estão no stage
    • Exemplo: git status (deve aparecer listada a pasta joaozinho em vermelho)
  • Adicione o novo arquivo ao stage do Git
    • Exemplo:
      • git add . (adicionando todas as mudanças - que estavam em vermelho - ao stage do Git)
      • git status (deve aparecer listado o arquivo joaozinho/README.md em verde)
  • Faça o commit inicial
    • Exemplo:
      • git commit -m 'iniciando o projeto x' (fazendo o primeiro commit)
      • git status (deve aparecer uma mensagem tipo essa: nothing to commit )
  1. Adicione a sua branch com o novo commit ao repositório remoto
  • Usando o exemplo anterior: git push -u origin joaozinho-csharp-034-csharp-projeto-api-de-receitas
  1. Crie um novo Pull Request (PR)
  • Vá até a página de Pull Requests do repositório no GitHub
  • Clique no botão verde "New pull request"
  • Clique na caixa de seleção "Compare" e escolha a sua branch com atenção
  • Coloque um título para a sua Pull Request
    • Exemplo: "Cria tela de busca"
  • Clique no botão verde "Create pull request"
  • Adicione uma descrição para o Pull Request e clique no botão verde "Create pull request"
  • Não se preocupe em preencher mais nada por enquanto!
  • Volte até a página de Pull Requests do repositório e confira que o seu Pull Request está criado
⌨️ Durante o desenvolvimento
  • Faça commits das alterações que você fizer no código regularmente

  • Lembre-se sempre de, após um (ou alguns) commits, atualizar o repositório remoto

  • Os comandos que você utilizará com mais frequência são:

    1. git status (para verificar o que está em vermelho - fora do stage - e o que está em verde - no stage)
    2. git add (para adicionar arquivos ao stage do Git)
    3. git commit (para criar um commit com os arquivos que estão no stage do Git)
    4. git push -u origin nome-da-branch (para enviar o commit para o repositório remoto na primeira vez que fizer o push de uma nova branch)
    5. git push (para enviar o commit para o repositório remoto após o passo anterior)
🤝 Depois de terminar o desenvolvimento (opcional)

Para sinalizar que o seu projeto está pronto para o "Code Review", faça o seguinte:

  • Vá até a página DO SEU Pull Request, adicione a label de "code-review" e marque seus colegas:

    • No menu à direita, clique no link "Labels" e escolha a label code-review;

    • No menu à direita, clique no link "Assignees" e escolha o seu usuário;

    • No menu à direita, clique no link "Reviewers" e digite students, selecione o time tryber/students-sd-034-csharp.

Caso tenha alguma dúvida, aqui tem um vídeo explicativo.

🕵🏿 Revisando um pull request

Use o conteúdo sobre Code Review para te ajudar a revisar os Pull Requests.

🎛 Linter

Usaremos o NetAnalyzer para fazer a análise estática do seu código.

Este projeto já vem com as dependências relacionadas ao linter configuradas no arquivo .csproj.

O analisador já é instalado pelo plugin da Microsoft C# no VSCode. Para isso, basta fazer o download do plugin e instalá-lo.

🛠 Testes

O .NET já possui sua própria plataforma de testes.

Este projeto já vem configurado e com suas dependências.

Executando todos os testes

Para executar os testes com o .NET, execute o comando dentro do diretório do seu projeto src!

dotnet test

Executando um teste específico

Para executar um teste específico, basta executar o comando dotnet test --filter Name~TestMethod1.

⚠️ Importante: o comando irá executar testes cujo nome contém TestMethod1.

⚠️ O avaliador automático não necessariamente avalia seu projeto na ordem em que os requisitos aparecem no readme. Isso acontece para deixar o processo de avaliação mais rápido. Então, não se assuste se isso acontecer, ok?

Outras opções para testes

  • Algumas opções que podem lhe ajudar são:
    • -?|-h|--help: exibe a descrição completa de como utilizar o comando.
    • -t|--list-tests: lista todos os testes, ao invés de executá-los.
    • -v|--verbosity <LEVEL>: define o nível de detalhe na resposta dos testes.
    • q | quiet
    • m | minimal
    • n | normal
    • d | detailed
    • diag | diagnostic
    • Exemplo de uso:
        dotnet test -v diag
      
      ou
        dotnet test --verbosity=diagnostic
      

Requisitos do projeto

1. Desenvolva o endpoint GET /recipe

Mais informações:
  • O endpoint deve ser acessível através do URL /recipe;
  • O corpo da requisição é vazio.
  • Os dados são manipulados através da service /Services/RecipeService.cs já criada.
  • A estrutura de recipe são instâncias da classe Recipe.cs
  • O que será testado:

    • Se a requisição for feita com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http 200:
      [
          {
      	    "name": "Bolo de cenoura",
      	    "recipeType": 1,
          "preparationTime": 0.4,
      	    "ingredients": [
      		  "1/2 xícara (chá) de óleo", "..."
          ],
          "directions": "Em um liquidificador, ...",
          "rating": 10
          },
      
        /*...*/
      ]

2. Desenvolva o endpoint GET /recipe/:name

Mais informações:
  • O endpoint deve ser acessível através do URL /recipe/:name;
  • O endpoint irá buscar apenas uma receita consultando pelo name da receita
  • O corpo da requisição é vazio.
  • Os dados são manipulados através da service /Services/RecipeService.cs já criada.
  • A estrutura de recipe são instâncias da classe Recipe.cs
  • O que será testado:

    • Se a requisição for feita com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http 200:

        {
      	  "name": "Bolo de cenoura",
      	  "recipeType": 1,
        "preparationTime": 0.4,
      	  "ingredients": [
          "1/2 xícara (chá) de óleo", "..."
        ],
        "directions": "Em um liquidificador, ...",
        "rating": 10
        },
    • Se a requisição não encontrar nenhuma receita que atenda o filtro de nome, o resultado retornado deverá ter um status http 404:

    • O retorno em json poderá ser o padrão do ASP.NET

3. Desenvolva o endpoint POST /recipe

Mais informações:
  • O endpoint deve ser acessível através do URL /recipe;
  • Os dados são manipulados através da service /Services/RecipeService.cs já criada.
  • A estrutura de recipe são instâncias da classe Recipe.cs
  • O corpo da requisição deverá seguir o formato abaixo:
    {
        "Name": "Mousse de maracuja",
        "RecipeType": 0,
        "PreparationTime": "0.2",
        "Ingredients": [
    		"1 lata de leite condensado",
        ],
        "Directions": "Em um liquidificador, ...",
        "Rating": "9"
    }
  • O que será testado:

    • Se a requisição for feita com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http 201:
      {
        "Name": "Mousse de maracuja",
          "RecipeType": 0,
          "PreparationTime": "0.2",
          "Ingredients": [
      		"1 lata de leite condensado",
          ],
          "Directions": "Em um liquidificador, ...",
          "Rating": "9"
      }

4. Desenvolva o endpoint PUT /recipe

Mais informações:
  • O endpoint deve ser acessível através do URL /recipe;
  • Os dados são manipulados através da service /Services/RecipeService.cs já criada.
  • A estrutura de recipe são instâncias da classe Recipe.cs
  • O dado de referência (chave primária) da receita será o Name
  • O corpo da requisição deverá seguir o formato abaixo:
    {
        "Name": "Mousse de maracuja",
        "RecipeType": 0,
        "PreparationTime": "0.2",
        "Ingredients": [
    		"1 lata de leite condensado",
        ],
        "Directions": "Em um liquidificador, ...",
        "Rating": "9"
    }
  • O que será testado:

    • Se a requisição for feita com sucesso o resultado retornado deverá ser um status http 204 sem conteúdo:
    • Se a requisição for feita com erro o resultado retornado deverá ser um status http 400.

5. Desenvolva o endpoint DEL /recipe/:name

Mais informações:
  • O endpoint deve ser acessível através do URL /recipe/:name;
  • O endpoint irá buscar apenas uma receita consultando pelo name da receita
  • O corpo da requisição é vazio.
  • Os dados são manipulados através da service /Services/RecipeService.cs já criada.
  • A estrutura de recipe são instâncias da classe Recipe.cs
  • O que será testado:

    • Se a requisição for feita com sucesso o resultado retornado deverá ser um status http 204 sem conteúdo:
    • Se a requisição não encontrar nenhuma receita que atenda o filtro de nome, o resultado retornado deverá ter um status http 404:
    • O retorno em json poderá ser o padrão do ASP.NET

6. Desenvolva o endpoint GET /user/:email

Mais informações:
  • O endpoint deve ser acessível através do URL /user/:email;
  • O endpoint irá buscar apenas uma pessoa usuária consultando pelo email da pessoa
  • O corpo da requisição é vazio.
  • Os dados são manipulados através da service /Services/UserService.cs já criada.
  • A estrutura de user são instâncias da classe User.cs
  • O que será testado:

    • Se a requisição for feita com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http 200:
        {
        "email": "[email protected]",
          "name": "Pessoa tryber",
          "password": "senhaTryber"
      }
    • Se a requisição não encontrar nenhuma pessoa usuária que atenda o filtro de e-mail, o resultado retornado deverá ter um status http 404:
    • O retorno em json poderá ser o padrão do ASP.NET

7. Desenvolva o endpoint POST /user

Mais informações:
  • O endpoint deve ser acessível através do URL /user;
  • Os dados são manipulados através da service /Services/UserService.cs já criada.
  • A estrutura de user são instâncias da classe User.cs
  • O corpo da requisição deverá seguir o formato abaixo:
    {
    	"email": "[email protected]",
    	"name": "Pessoa Nova",
    	"password": "senhaDaPessoaNova"
    }
  • O que será testado:

    • Se a requisição for feita com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http 201:
      {
        "email": "[email protected]",
        "name": "Pessoa Nova",
        "password": "senhaDaPessoaNova"
      }

8. Desenvolva o endpoint PUT /user/:email

Mais informações:
  • O endpoint deve ser acessível através do URL /user/:email;

  • Os dados são manipulados através da service /Services/UserService.cs já criada.

  • A estrutura de user são instâncias da classe User.cs

  • O dado de referência (chave primária) da pessoa usuária será o Email

  • O corpo da requisição deverá seguir o formato abaixo:

    {
    	"email": "[email protected]",
    	"name": "Pessoa Nova",
    	"password": "senhaDaPessoaNova"
    }
  • O que será testado:

    • Se a requisição for feita com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http 200:

      {
        "email": "[email protected]",
        "name": "Pessoa Nova",
        "password": "senhaDaPessoaNova"
      }
      • Se a requisição não encontrar nenhuma pessoa usuária que atenda o filtro de e-mail, o resultado retornado deverá ter um status http 404:
      • Se a requisição tentar atualizar o e-mail pessoa usuária, o resultado retornado deverá ter um status http 400:
      • O retorno em json poderá ser o padrão do ASP.NET

9. Desenvolva o endpoint DEL /user/:email

Mais informações:
  • O endpoint deve ser acessível através do URL /recipe/:email;
  • O endpoint irá buscar apenas uma pessoa usuária consultando pelo email.
  • O corpo da requisição é vazio.
  • Os dados são manipulados através da service /Services/UserService.cs já criada.
  • A estrutura de pessoas usuárias são instâncias da classe User.cs
  • O que será testado:
    • Se a requisição for feita com sucesso o resultado retornado deverá ser um status http 204 sem conteúdo:
    • Se a requisição não encontrar nenhuma pessoa usuária que atenda o filtro de e-mail, o resultado retornado deverá ter um status http 404:
    • O retorno em json poderá ser o padrão do ASP.NET

10. Desenvolva o endpoint POST /comment

Mais informações:
  • O endpoint deve ser acessível através do URL /comment;
  • Os dados são manipulados através da service /Services/CommentService.cs já criada.
  • A estrutura de comentários são instâncias da classe Comment.cs
  • O corpo da requisição deverá seguir o formato abaixo:
    {
    	"Email": "[email protected]",
    	"RecipeName": "Coxinha",
    	"CommentText": "Fiz a receita de Coxinha na minha casa. Fiz o passo a passo e funcionou."
    } 
  • O que será testado:

    • Se a requisição for feita com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http 201:
    {
      "Email": "[email protected]",
      "RecipeName": "Coxinha",
      "CommentText": "Fiz a receita de Coxinha na minha casa. Fiz o passo a passo e funcionou."
    } 

11. Desenvolva o endpoint GET /comment/:recipeName

Mais informações:
  • O endpoint deve ser acessível através do URL /comment/:recipeName;
  • O endpoint irá buscar apenas os comentários consultando pelo Name da receita
  • O corpo da requisição é vazio.
  • Os dados são manipulados através da service /Services/CommentService.cs já criada.
  • A estrutura de comentários são instâncias da classe Comment.cs
  • O que será testado:
    • Se a requisição for feita com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http 200:
      [
        {
    	    "email": "[email protected]",
    	    "recipeName": "Coxinha",
    	    "commentText": "Fiz a receita de Coxinha na minha casa. Fiz o passo a passo e saiu certinho."
        },
    
      /* ... */
    ]
🗣 Nos dê feedbacks sobre o projeto!

Ao finalizar e submeter o projeto, não se esqueça de avaliar sua experiência preenchendo o formulário. Leva menos de 3 minutos!

FORMULÁRIO DE AVALIAÇÃO DE PROJETO

🗂 Compartilhe seu portfólio!

Você sabia que o LinkedIn é a principal rede social profissional e que compartilhar aprendizados lá é muito importante para quem deseja construir uma carreira de sucesso? Compartilhe este projeto no seu LinkedIn, marque o perfil da Trybe (@trybe) e mostre para a sua rede toda a sua evolução.

projeto-api-de-receitas's People

Contributors

yagocalomino avatar trybe-tech-ops avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.