Antes de mais nada: No linux, talvez seja necessário o pacote build essentials
para rodar esse projeto. sudo apt install --reinstall build-essential
Devemos sempre nos lembrar que GraphQL é apenas uma das várias formas de expor nossa aplicação. Nesse projeto teremos um servidor web responsável apenas por expor uma rota para a manipulação da nossa aplicação através de um playground GraphQL.
A nível de desenvolvimento, utilizaremos uma biblioteca chamada QQLGen para gerar
código boilerplate para nós a partir da definição de entidades, porém essa lib qqlgen
não precisa ser compilada para o nosso produto final, visto que é apenas uma
ferramenta de desenvolvimento, por isso foi importada com o _
em um arquivo chamado
tools.go
.
go run github.com/99designs/gqlgen init
Esse comando lê o arquivo schema.graphqls
e gera o código boilerplate a partir dele.
A partir desse comando, será criado um arquivo schema.resolvers.go
contendo todos
os resolvers onde deverá ser implementado o consumo do código da nossa aplicação
de fato, a nossa regra de negócio que deverá estar dentro da internal.
go run github.com/99designs/gqlgen generate
Cada objeto de banco de dados criado deve ser injetada no arquivo resolver.go
para permitir que através da injeção de dependências consigamos acessar os "repositórios"
dentro da implementação do consumo do nosso código de aplicação em schema.resolvers.go
Cada objeto de banco de dados injetado no arquivo resolver.go
deve ser inicializado
e injetado no resolver no arquivo main.go
.
Para esse projeto, escolhemos trabalhar com um banco em memória como o SQLite3.
Para rodar queries nesse banco, você vai precisar do sqlite3 instalado em sua
máquina, e para isso basta instala-lo com o comando sudo apt install sqlite3
.
Para acessar os dados desse banco e manipula-lo via terminal, basta rodar sqlite3 nome_banco.db
e rodar suas queries.
create table categories (id string, name string, description string)
create table courses (id string, name string, description string, category_id int)
Para usar a API, basta acessar o servidor da aplicação (no caso http://localhost:8080
)
e rodar as queries GraphQL.
mutation createCategory {
createCategory(input:{
name: "Joaquin Phoenix",
description: "Ator que interpreta o personagem coringa no filme da DC"
}) {
id,
name,
description
}
}
mutation createCourse {
createCourse(input: {
name: "Apenda Golang",
description: "Curso do thiago temporim",
categoryId: "3ab1ce4f-0484-4dfc-98b2-af7e7c120499"
}) {
id,
name
}
}
query queryCategories {
categories {
id,
name,
description
}
}
query queryCourses {
courses {
id,
name,
description,
}
}
query queryCategoriesWithCourses {
categories {
id,
name,
courses {
id,
name
}
}
}