fc-goexpert-challenge-03

command module
v0.0.0-...-ee0fcfa Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 9, 2023 License: GPL-3.0 Imports: 6 Imported by: 0

README

Go Expert

Desafio Clean Architecture

Executando

Antes de iniciar o programa, é necessário inciar o serviço de banco de dados. Para tanto, use o terminal para acessar a raiz deste projeto e então execute:

$ docker compose up -d

O comando acima inicializará o banco de dados. Durante a inicialização, o diretório docker-entrypoint-initdb.d será copiado para o diretório homônimo dentro do servidor do banco de dados, garatindo a criação do banco de dados e da tabela para armazenamento dos dados referentes às odens de compra.

Para executar o programa, através do terminal acesse o diretório raiz deste projeto e execute os comandos a seguir:

$ cd cmd/order
$ go run main.go wire_gen.go

Se tudo correr bem, a seguinte mensagem será apresentada no terminal:

Starting web server on port :8000
Starting gRPC server on port 50051
Starting GraphQL server on port 8080

As portas usadas para inicializar os servidores podem ser alteradas através do arquivo .env, localizado no diretório cmd/order, relativo ao diretório raiz deste projeto.

Inserindo novas ordens de compra

As ordens podem ser inseridas de três formas diferentes, explicadas a seguir.

Através de requisição HTTP

Para inserir uma nova ordem através de uma requisição HTTP, faça uma requisição POST para o endereço http://localhost:8000/order. O corpo da requisição deve conter um objeto JSON com o seguinte formato:

{
  "id": "string",
  "price": "float",
  "tax": "float"
}

Também é possível realizar testes usando o arquivo api.http, localizado no diretório api, relativo ao diretório raiz deste projeto.

Se a requisição for bem sucedida, a reposta deverá retornar um objeto JSON com o seguinte formato:

{
  "id": "string",
  "price": "float",
  "tax": "float",
  "final_price": "float"
}
Através do GraphQL

Para criar uma nova ordem usando GraphQL, através de um navegador acesse o endereço http://localhost:8080. No playground do GraphQL, insira o seguinte comando:

mutation createOrder {
    createOrder(input: {
        id: "1822c225-f65b-44aa-afeb-c94b2a90ff78",
        price: 199.99,
        tax: 11.8
    }) {
        id
        price
        tax
        finalPrice
    }
}

Após executar a instrução, a resposta deverá ser um objeto JSON com o seguinte formato:

{
  "data": {
    "createOrder": {
      "id": "1822c225-f65b-44aa-afeb-c94b2a90ff78",
      "price": 199.99,
      "tax": 11.8,
      "finalPrice": 211.79000000000002
    }
  }
}
Através do gRPC

Para criar uma nova ordem usando gRPC, recomenda-se o uso do Evans (https://github.com/ktr0731/evans) como client gRPC. Para iniciar o Evans, através do terminal, digite:

$ evans -r repl

Após acessar o Evans, talvez seja necessário entrar no pacote pb e no serviço OrderService. Para tanto, execute os seguintes comandos:

> package pb
> service OrderService

Para efetuar a criação de uma nova ordem de compra, é necessário efetuar uma chamada RPC para CreateOrder. Para tanto, execute o seguinte comando:

call CreateOrder

O console do Evans solicitará informar os dados de id, price e tax. Informe os valores desejados e pressione ENTER. Se tudo correr bem, a resposta será um objeto JSON com os dados da ordem, como mostra o exemplo a seguir:

id (TYPE_STRING) => 605757f8-80d1-41cc-995b-08dd9a2aaac1 <ENTER>
price (TYPE_FLOAT) => 409.8 <ENTER>
tax (TYPE_FLOAT) => 9.8 <ENTER>
{
  "finalPrice": 419.59998,
  "id": "605757f8-80d1-41cc-995b-08dd9a2aaac1",
  "price": 409.8,
  "tax": 9.8
}
Consultando ordens de compra

As ordens inseridas podem ser consultadas de três formas diferentes, explicadas a seguir.

Através de requisição HTTP

Para consultar todas as ordens de compra já inseridas, deve-se efetuar uma requisição GET para o endereço http://localhost:8000/order. Também é possível usar o arquivo api.http, localizado no diretório api, relativo ao diretório raiz deste projeto.

A resposta à requisição deverá ser um objeto JSON com todas as ordens inseridas no banco de dados.

[
  {
    "Id": "a2d7cb34-2eb5-402a-879b-67940677c266",
    "Price": 599.09003,
    "Tax": 12.33,
    "FinalPrice": 611.42003
  },
  {
    "Id": "e767be01-d511-441d-90b2-38d9178779d1",
    "Price": 2999.99,
    "Tax": 39.8,
    "FinalPrice": 3039.79
  },
  {
    "Id": "fb86ce70-9fff-446a-a23d-fe2313500aca",
    "Price": 999.9,
    "Tax": 37.8,
    "FinalPrice": 1037.7
  }
]
Através do GraphQL

Para consultar todas as ordens de compra através do GraphQL é necessário acessar o playground do GraphQL usando o navegador, através do endereço http://localhost:8080. No campo de consulta, insira o seguinte comando:

query ListOrders {
  orders {
    id
    price
    tax
    finalPrice
  }
}

Se tudo correr bem, a resposta deverá ser semelhante a esta:

{
  "data": {
    "orders": [
      {
        "id": "a2d7cb34-2eb5-402a-879b-67940677c266",
        "price": 599.09003,
        "tax": 12.33,
        "finalPrice": 611.42003
      },
      {
        "id": "e767be01-d511-441d-90b2-38d9178779d1",
        "price": 2999.99,
        "tax": 39.8,
        "finalPrice": 3039.79
      },
      {
        "id": "fb86ce70-9fff-446a-a23d-fe2313500aca",
        "price": 999.9,
        "tax": 37.8,
        "finalPrice": 1037.7
      }
    ]
  }
}
Através do gRPC

Para consultar as ordens de compra através de uma chamada gRPC, acesse o Evans. É importante garantir que o pacote e serviço estão corretamente selecionados. Portanto, execute os seguintes comandos:

> package db
> service OrderService

Para consultar todas as ordens disponívels, deve-se efetuar uma chamada RPC para ListOrders. Portanto, deve-se executar o seguinte:

> call ListOrders

Se tudo correr bem, a resposta será um objeto JSON contendo todas as ordens disponíveis, como mostrado no exemplo a seguir:

pb.OrderService@127.0.0.1:50052> call ListOrders 
{
  "orders": [
    {
      "finalPrice": 611.42004,
      "id": "a2d7cb34-2eb5-402a-879b-67940677c266",
      "price": 599.09,
      "tax": 12.33
    },
    {
      "finalPrice": 3039.79,
      "id": "e767be01-d511-441d-90b2-38d9178779d1",
      "price": 2999.99,
      "tax": 39.8
    },
    {
      "finalPrice": 1037.7,
      "id": "fb86ce70-9fff-446a-a23d-fe2313500aca",
      "price": 999.9,
      "tax": 37.8
    }
  ]
}

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL