Skip to content

Commit 59986ae

Browse files
Ronald-TRlarien
andauthored
Traducao/json routing and embedding (#92)
* traducao ate o topico *refatorando* * traduzido até "escreva o teste primeiro" * tradução * finalizando a tradução, pontos "o que cobrimos" * correções do pull request * correção das issues restantes * Tradução dos códigos * Revisão do texto Co-authored-by: Lauren Ferreira <[email protected]>
1 parent 037170e commit 59986ae

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1956
-1962
lines changed

criando-uma-aplicacao/json/json.md

Lines changed: 334 additions & 340 deletions
Large diffs are not rendered by default.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package main
2+
3+
// NovoArmazenamentoDeJogadorNaMemoria inicializa um armazenamento de jogador vazio
4+
func NovoArmazenamentoDeJogadorNaMemoria() *ArmazenamentoDeJogadorNaMemoria {
5+
return &ArmazenamentoDeJogadorNaMemoria{map[string]int{}}
6+
}
7+
8+
// ArmazenamentoDeJogadorNaMemoria coleta dados sobre jogadores em memória
9+
type ArmazenamentoDeJogadorNaMemoria struct {
10+
armazenamento map[string]int
11+
}
12+
13+
// GravarVitoria grava a vitória de um jogador
14+
func (a *ArmazenamentoDeJogadorNaMemoria) GravarVitoria(nome string) {
15+
a.armazenamento[nome]++
16+
}
17+
18+
// ObtemPontuacaoDoJogador retorna pontuações para determinado jogador
19+
func (a *ArmazenamentoDeJogadorNaMemoria) ObtemPontuacaoDoJogador(nome string) int {
20+
return a.armazenamento[nome]
21+
}

criando-uma-aplicacao/json/v1/InMemoryPlayerStore.go

Lines changed: 0 additions & 21 deletions
This file was deleted.

criando-uma-aplicacao/json/v1/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import (
66
)
77

88
func main() {
9-
server := &PlayerServer{NewInMemoryPlayerStore()}
9+
servidor := &ServidorJogador{NovoArmazenamentoDeJogadorNaMemoria()}
1010

11-
if err := http.ListenAndServe(":5000", server); err != nil {
12-
log.Fatalf("could not listen on port 5000 %v", err)
11+
if err := http.ListenAndServe(":5000", servidor); err != nil {
12+
log.Fatalf("não foi possível ouvir na porta 5000 %v", err)
1313
}
1414
}

criando-uma-aplicacao/json/v1/server.go

Lines changed: 0 additions & 43 deletions
This file was deleted.

criando-uma-aplicacao/json/v1/server_integration_test.go

Lines changed: 0 additions & 23 deletions
This file was deleted.

criando-uma-aplicacao/json/v1/server_test.go

Lines changed: 0 additions & 113 deletions
This file was deleted.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"net/http"
6+
)
7+
8+
// ArmazenamentoJogador armazena informação de pontuação sobre jogadores
9+
type ArmazenamentoJogador interface {
10+
ObtemPontuacaoDoJogador(nome string) int
11+
GravarVitoria(nome string)
12+
}
13+
14+
// ServidorJogador é uma interface HTTP para informações de jogador
15+
type ServidorJogador struct {
16+
armazenamento ArmazenamentoJogador
17+
}
18+
19+
func (s *ServidorJogador) ServeHTTP(w http.ResponseWriter, r *http.Request) {
20+
jogador := r.URL.Path[len("/jogadores/"):]
21+
22+
switch r.Method {
23+
case http.MethodPost:
24+
s.processarVitoria(w, jogador)
25+
case http.MethodGet:
26+
s.mostrarPontuacao(w, jogador)
27+
}
28+
}
29+
30+
func (s *ServidorJogador) mostrarPontuacao(w http.ResponseWriter, jogador string) {
31+
pontuação := s.armazenamento.ObtemPontuacaoDoJogador(jogador)
32+
33+
if pontuação == 0 {
34+
w.WriteHeader(http.StatusNotFound)
35+
}
36+
37+
fmt.Fprint(w, pontuação)
38+
}
39+
40+
func (s *ServidorJogador) processarVitoria(w http.ResponseWriter, jogador string) {
41+
s.armazenamento.GravarVitoria(jogador)
42+
w.WriteHeader(http.StatusAccepted)
43+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package main
2+
3+
import (
4+
"net/http"
5+
"net/http/httptest"
6+
"testing"
7+
)
8+
9+
func TestGravaVitoriasEAsRetorna(t *testing.T) {
10+
armazenamento := NovoArmazenamentoDeJogadorNaMemoria()
11+
servidor := ServidorJogador{armazenamento}
12+
jogador := "Pepper"
13+
14+
servidor.ServeHTTP(httptest.NewRecorder(), novaRequisiçãoPostDeVitoria(jogador))
15+
servidor.ServeHTTP(httptest.NewRecorder(), novaRequisiçãoPostDeVitoria(jogador))
16+
servidor.ServeHTTP(httptest.NewRecorder(), novaRequisiçãoPostDeVitoria(jogador))
17+
18+
resposta := httptest.NewRecorder()
19+
servidor.ServeHTTP(resposta, novaRequisicaoObterPontuacao(jogador))
20+
verificaStatus(t, resposta.Code, http.StatusOK)
21+
22+
verificaCorpoDaResposta(t, resposta.Body.String(), "3")
23+
}

0 commit comments

Comments
 (0)