example-golang icon indicating copy to clipboard operation
example-golang copied to clipboard

Golang, Gin Framework, GQLGen GraphQL, Resful, Authentitacion with JWT and much more.

Example Golang

Example made with Golang, Gin Framework, GraphQL, Resful, Authenticate with JWT and much more.

A example of bank transaction, made with GOlang, Gin Framework, Restful and GraphQL.

  • Endpoints
  • Insomnia
  • Get Started
  • Get Started - without docker
  • Run Debug with VScode and DB in docker
  • Unity Test and Test Integration
  • Step By Step
  • Commands
  • Technologies
  • References

Endpoints

Endpoint Method Action
/graphql POST
/graphiql GET
/users GET Index
/users POST Store
/users PATCH Update
/users/:id DELETE Destroy
/users/:id GET Show

Insomnia

If you use Insomnia, just import a insomnia-v4.yaml

Get Started

Just one command

docker-compose up --build

Open on you best browser: http://localhost:8085
GraphQL Playground: http://localhost:8085/gaphiql
To see a database open adminer on: http://localhost:8086
Configurations for connect on database see: /docker/local.env IMPORTANT! If you not have a docker see: Get Started - without docker

Structure

├── config - (configuration)
├── controllers (RESTfull methods)
├── core (Base methos for controllers, models and services)
├── database - (database configuration, migrate and seed data)
├── graphql
│   ├── generated            - A package that only contains the generated runtime
│   │   └── generated.go
│   ├── model                - A package for all your graph models, generated or otherwise
│   │   └── models_gen.go
│   ├── resolver.go          - The root graph resolver type. This file wont get regenerated
│   ├── schema.graphqls      - Some schema. You can split the schema into as many graphql files as you like
│   └── schema.resolvers.go  - the resolver implementation for schema.graphql
├── models (ORM models based on Database tables)
├── routes (files with routes)
├── services (with business rules and intermediate a database)controlling the generated code.
├── go.mod
├── go.sum
├── gqlgen.yml               - The gqlgen config file, knobs for
└── main.go                  - The entry point to your app. Customize it however you see fit

Commands

Enter on docker container to exec any command.

docker exec -it labbankgo-api /bin/bash

To generate graphql files.

gqlgen generate

On docker

~/go/bin/gqlgen generate

Out of docker

Get Started without docker

A Database PostgreSQL is needed, configurations for it in docker/local.env

gin --port=8080 #or ~/go/bin/gin --port=8080

Run Debugg

With VScode and SGBD on Docker

docker-compose -f docker-compose-db.yml up

Open your debug on VScode and run "Launch file"

Unity Test and Test Integration

go test -v ./src/tests/

With code coverage

go test -cover -coverprofile=c.out ./src/tests/
go tool cover -html=c.out -o coverage.html

Step By Step

All steps necessary to make this example project.

Create a mod init

All libs in Golang have a module name. This is for a package manage for Golang, like a npm/yarm for nodeJS, gradlew/mavem for Java, compose for PHP, mix for Elixir and many more.

go mod init github.com/ruyjfs/example-golang

See: go.mod

Create a file main.go - The Hello World

 echo '' >> main.go
package main

import (
	"log"
)

func main() {
	log.Printf("Hello World!")
}

Run to see you first hello world

go run main.go

Install Gin Framework

go get github.com/codegangsta/gin

Update a file main.go with this example code

package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

func setupRouter() *gin.Engine {
	r := gin.Default()

	r.GET("/:name", func(c *gin.Context) {
		name := c.Params.ByName("name")
		c.String(http.StatusOK, "Hello World", name)
	})

	return r
}

func main() {
	r := setupRouter()
	r.Run(":8080")
}

Install GraphQL

go run github.com/99designs/gqlgen init

To generate graphql files.

gqlgen generate

On docker

~/go/bin/gqlgen generate

Install GORM

go get -u gorm.io/gorm && \
go get -u gorm.io/driver/postgres

Start project with Hot Reload

~/go/bin/gin

Default start project

go run main.go

Open on you best browser: http://localhost:8085

Run Debugg

With VScode and SGBD on Docker

docker-compose -f docker-compose-db.yml up

Unity Test and Test Integration

go test -v ./src/tests/

With code coverage

go test -cover -coverprofile=c.out ./src/tests/
go tool cover -html=c.out -o coverage.html

Technologies:

References