fibergen

Generate a Clean Architecture for REST API with support for the Fiber Web Framework in Golang

MIT License

Stars
7

FiberGen

Generate a Clean Architecture for REST API with support for the Fiber Web Framework in Golang

Install

go install github.com/prongbang/[email protected]

Requirement

  1. New Project

-new project name

-mod module name

fibergen -new test -mod github.com/prongbang

Example:

  • go.mod
module github.com/prongbang/test

Structure

test
├── go.mod
├── go.sum
└── internal
    └── test
        ├── api
        │   ├── feature/domain
        │   ├── api.go
        │   ├── routers.go
        │   ├── wire.go
        │   └── wire_gen.go
        └── database
            └── drivers.go
  1. mark +fibergeen
  • wire.go
//+build wireinject

package api

import (
	"github.com/google/wire"
	//+fibergen:import wire:package
)

func CreateAPI(dbDriver database.Drivers) API {
	wire.Build(
		NewAPI,
		NewRouters,
		//+fibergen:func wire:build
	)
	return nil
}
  • routers.go
package api

import (
	"github.com/gofiber/fiber/v2"
	//+fibergen:import routers:package
)

type Routers interface {
	core.Routers
}

type routers struct {
	//+fibergen:struct routers
}

func (r *routers) Initials(app *fiber.App) {
	//+fibergen:func initials
}

func NewRouters(
	//+fibergen:func new:routers
) Routers {
	return &routers{
		//+fibergen:return &routers
	}
}

How to use

-f feature name

fibergen -f user

OR

$ cd project/internal/app/api && fibergen -f user

Output

user
├── datasource.go
├── handler.go
├── provider.go
├── repository.go
├── router.go
├── usecase.go
├── user.go
└── validate.go

CRUD

  • define spec auth.json
{
   "accessToken": "JWT",
   "expired": 1234567,
}
  • gen
fibergen -crud auth -s spec/auth.json -d mariadb