Boas-vindas ao repositório do projeto API de Receitas
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.
🤷🏽♀️ Como entregar
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.
‼️ Antes de começar a desenvolver
- Clone o repositório
- Use o comando:
git clone git@github.com:tryber/csharp-032-csharp-projeto-api-de-receitas.git
. - Entre na pasta do repositório que você acabou de clonar:
cd csharp-032-csharp-projeto-api-de-receitas
- Instale as dependências
- Entre na pasta
src/
. - Execute o comando:
dotnet restore
.
- Crie uma branch a partir da branch
master
- Verifique se você está na branch
master
- Exemplo:
git branch
- Exemplo:
- Se não estiver, mude para a branch
master
- Exemplo:
git checkout master
- Exemplo:
- 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-032-csharp-projeto-api-de-receitas
- Você deve criar uma branch no seguinte formato:
- 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)
- Exemplo:
- 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)
- Exemplo:
- 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 )
- Exemplo:
- Adicione a sua branch com o novo
commit
ao repositório remoto
- Usando o exemplo anterior:
git push -u origin joaozinho-csharp-032-csharp-projeto-api-de-receitas
- 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:
git status
(para verificar o que está em vermelho - fora do stage - e o que está em verde - no stage)git add
(para adicionar arquivos ao stage do Git)git commit
(para criar um commit com os arquivos que estão no stage do Git)git push -u origin nome-da-branch
(para enviar o commit para o repositório remoto na primeira vez que fizer opush
de uma nova branch)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 timetryber/students-sd-032-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.
Para executar os testes com o .NET, execute o comando dentro do diretório do seu projeto src
!
dotnet test
Para executar um teste específico, basta executar o comando dotnet test --filter Name~TestMethod1
.
TestMethod1
.
- 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:
ou
dotnet test -v diag
dotnet test --verbosity=diagnostic
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 }, /*...*/ ]
- Se a requisição for feita com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http
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
-
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" }
- Se a requisição for feita com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http
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
.
- Se a requisição for feita com sucesso o resultado retornado deverá ser um status http
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
- Se a requisição for feita com sucesso o resultado retornado deverá ser um status http
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": "pessoa@betrybe.com", "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
- Se a requisição for feita com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http
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": "pessoa.nova@betrybe.com", "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": "pessoa.nova@betrybe.com", "name": "Pessoa Nova", "password": "senhaDaPessoaNova" }
- Se a requisição for feita com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http
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": "pessoa@betrybe.com", "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": "pessoa.nova@betrybe.com", "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
- 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
-
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
- Se a requisição for feita com sucesso o resultado retornado deverá ser um status http
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": "pessoa@betrybe.com", "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": "pessoa@betrybe.com", "RecipeName": "Coxinha", "CommentText": "Fiz a receita de Coxinha na minha casa. Fiz o passo a passo e funcionou." }
- Se a requisição for feita com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http
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": "pessoa@betrybe.com", "recipeName": "Coxinha", "commentText": "Fiz a receita de Coxinha na minha casa. Fiz o passo a passo e saiu certinho." }, /* ... */ ]
- Se a requisição for feita com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http
🗣 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!
🗂 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.