Minha experiência com o projeto
Este projeto foi criado junto com a plataforma do FullCycle para aprender mais sobre golang e graphql, um aprendizado de ouro, não achei que seria tão simples e “fácil” de executar quando eu o vi pela primeira vez. Neste projeto foi utilizado gqlgen que é uma biblioteca em Go para construir backends em graphql, utilizando Schema First Approach como eles gostam de dizer e realmente me surpreendi com a facilidade e o resultado.
A utilização do gqlgen é bem simples, basta utilizar o go mod init e adiciona-lo ao projeto e sair testando e aprendendo mais sobre esta biblioteca incrível.
Iniciando gqlgen do zero
Iniciando novo módulo:
mkdir examplecd examplego mod init example
Adicionando ferramentas ao projeto:
printf '//go:build tools\npackage tools\nimport (_ "github.com/99designs/gqlgen"\n _ "github.com/99designs/gqlgen/graphql/introspection")' | gofmt > tools.go
go mod tidy
Gerar configuração e modelos:
go run github.com/99designs/gqlgen init
go mod tidy
Iniciar o servidor:
mkdir examplecd examplego mod init example
Gerar configurações e modelos:
go run server.go
Veja mais na documentação do gqlgen
Funcionalidades do projeto
- Create category
- Create course
- Find categories
- Find categories with courses
- Find courses
- Find courses with category
Iniciar o servidor:
go run cmd/server/server.go
Graphql queries:
# Create category #mutation createCategory { createCategory(input: { name: "Tecnologia", description: "Cursos de Tecnologia" }) { id name description }}
# Create course #mutation createCourse { createCourse( input: { name: "Full Cycle" description: "The best!" categoryId: "53ff5e69-79ea-4fd5-bbfc-867e09a89a85" } ) { id name }}
# Find categories #query queryCategories { categories { id name description }}
# Find categories with courses #query queryCategoriesWithCourses { categories { id name description courses { id name } }}
# Find courses #query queryCourses { courses { id name }}
# Find courses with category #query queryCoursesWithCategory { courses { id name description category { id name description } }}
Código fonte no Github
Todo o projeto foi desenvolvido utilizando o Github para controle de versão, cada commit tem uma feat nova.