MVC iris golang starter
Depedency
Install dep
$ curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
$ dep ensure -update
$ rm -irf vendor/ # There's still bug on go dep for macOS, you should omit / remove completely the vendor directory
Setting Env
Buat file .env berdasarkan file ENVIRONMENT_EXAMPLE
Membuat Model
Untuk membuat model , masuk ke folder model dian buat file namamodel.go, Lihat contoh
package model
import (
"time"
)
type User struct {
ID int `json:"id" gorm:"primary_key"`
FirstName string `json:"firstname, omitempty" gorm:"not null; type:varchar(100)"`
LastName string `json:"lastname, omitempty" gorm:"not null; type:varchar(100)"`
Email string `json:"email, omitempty" gorm:"not null; type:varchar(100)"`
CreatedAt *time.Time `json:"createdAt, omitempty"`
UpdatedAt *time.Time `json:"updatedAt, omitempty"`
DeletedAt *time.Time `json:"deletedAt, omitempty" sql:"index"`
}
func (User) TableName() string {
return "users" // table name when succesfully migrate
}
untuk lebih jelasnya silahkan baca documentasi Gorm Model
Setting Migrate
Untuk setting automigrate bisa di lihat pada main.go pada fungsi AutoMigrate
func DBMigrate() {
fmt.Println("[::] Migration Databases .....")
db := config.GetDatabaseConnection() // check connection to Databases
db.AutoMigrate(&model.User{}) // Migrate Model
//db.AutoMigrate(&model.Profile{}) // Migrate Model
....
fmt.Println("[::] Migration Databases Done")
}
Setting Route
untuk membuat router silahkan ke folder router ke function Routers
func Routers() {
db := config.GetDatabaseConnection()
inDB := &controller.InDB{DB: db }
app := iris.Default()
// for / endpoint
app.Get("/", controller.WelcomeController)
// example group: v1
v1:= app.Party("/v1")
{
v1.Post("/user", inDB.CreteUser)
v1.Get("/user", inDB.GetAll)
v1.Get("/user/{id : int}", inDB.GetById)
v1.Put("/user/{id : int}", inDB.UpdateUser)
v1.Delete("/user/{id : int}", inDB.DeleteUser)
}
app.Run(iris.Addr( ":"+os.Getenv("API_PORT"))) // starter handler untuk route
}
Untuk lebih jelasnya silahkan baca documentasi iris router
Cara running program
go run main.go // untuk running
go build main.go // untuk build
Apidocs
go-iris-mv/apidoc/index.html adalah hasil generate automatis
pada tahap development bisa digunakan , namun ketika tahap production, recomendasi untuk di hapus. Lokasi pada foler router - > router.go
//---------------------------------------------------
// myXML digunkan untuk generate apidocs
//---------------------------------------------------
type myXML struct {
Result string `xml:"result"`
}
//---------------------------------------------------
// anda bisa menghapus ini jika sudah tahap production
// modul ini digunakan untuk generate apidoc
//---------------------------------------------------
yaag.Init(&yaag.Config{ // <- IMPORTANT, init the middleware.
On: true,
DocTitle: "Iris",
DocPath: "apidocs/index.html",
BaseUrls: map[string]string{"Production": "", "Staging": "", "Development": "localhost:3000"},
})
app.Use(irisyaag.New())
Folder Architecture
├── apidocs
│ ├── index.html // hasil generate
│ └── index.html.json
├── config
│ └── database.go // setting connection database
├── controller // folder binis proses
│ ├── RequestController // logic untuk request
│ │ └── HttpReqController.go
│ ├── UserController // logic untuk user
│ │ ├── UseCase
│ │ │ └── UserCase.go // self query untuk user
│ │ └── UserController.go // user controller
│ └── WelcomeController.go
├── Dockerfile
├── ENVIRONMENT_EXAMPLE
├── Gopkg.lock // depedency
├── Gopkg.toml
├── main.go
├── middleware
│ ├── JwtToken.go // middleware untuk jwt
│ └── TestMilddleware.go
├── model // folder untuk models
│ ├── autogenerated_profile.go
│ ├── autogenerated_user.go
│ ├── profile.go
│ └── user.go
├── README.md
├── router
│ └── routes.go
└── service
├── HashPassword.go
├── HttpReq.go
└── QueryService.go // global service query
Contact
email : [email protected], rahmat wahyu hadi