Membuat Menu Dinamis dengan Array JSON di Golang



Last updated



Last updated
import (
"fmt"
"log"
"os"
"backend/api/controllers"
"backend/api/seed"
"github.com/joho/godotenv"
)
var server = controllers.Server{}
//Run function
func Run() {
var err error
err = godotenv.Load()
if err != nil {
log.Fatalf("Error getting env, not comming through %v", err)
} else {
fmt.Println("We are getting the env values")
}
server.Initialize(os.Getenv("DB_DRIVER"), os.Getenv("DB_USER"), os.Getenv("DB_PASSWORD"), os.Getenv("DB_PORT"), os.Getenv("DB_HOST"), os.Getenv("DB_NAME"))
seed.Load(server.DB) // auto migrate
server.Run(":8010")
}
package models
import (
"errors"
"strings"
"github.com/jinzhu/gorm"
)
type Nav struct {
gorm.Model
Name string `gorm:"size:100;not null;" json:"name"`
ParentId int `gorm:"size:100;not null;" json:"ParentId"`
Orderby int `gorm:"size:100;not null;" json:"orderby"`
NavIcon string `gorm:"size:100;not null;" json:"navicon"`
NavPath string `gorm:"size:100;not null;" json:"navpath"`
NavAcc string `gorm:"size:100;not null;" json:"navacc"`
NavChild []Nav `gorm:"foreignKey:ParentId;" json:"NavChild"`
}
type Navs []Nav
//function get all menu
func (n *Nav) FindAllMenu(db *gorm.DB) (*[]Nav, error) {
var err error
navs := []Nav{}
err = db.Debug().Model(&Nav{}).Preload("NavChild", func(query *gorm.DB) *gorm.DB {
return query.Order("orderby asc")
}).Order("orderby asc").Find(&navs).Error
if err != nil {
return &[]Nav{}, err
}
return &navs, err
}package controllers
import (
"backend/api/models"
"backend/api/responses"
"net/http"
)
//Get All Menu function
func (server *Server) GetMenu(w http.ResponseWriter, r *http.Request) {
nav := models.Nav{}
navs, err := nav.FindAllMenu(server.DB)
if err != nil {
responses.ERROR(w, http.StatusInternalServerError, err)
return
}
responses.JSON(w, http.StatusOK, navs)
}package seed
import (
"backend/api/models"
"log"
"github.com/jinzhu/gorm"
)
var navs = []models.Nav{
models.Nav{
Name: "Report",
ParentId: 0,
Orderby: 3,
NavIcon: "fa-key",
NavPath: "/",
NavAcc: "public",
NavChild: []models.Nav{
models.Nav{
Name: "Timesheet",
ParentId: 3,
Orderby: 6,
NavIcon: "fa-check",
NavPath: "/Report",
NavAcc: "public",
},
},
},
}//Load function
func Load(db *gorm.DB) {
err := db.Debug().DropTableIfExists(&models.User{}, &models.Roles{}, &models.Nav{}, &models.Activity{}).Error
if err != nil {
log.Fatalf("cannot drop table: %v", err)
}
err = db.Debug().AutoMigrate(&models.User{}, &models.Roles{}, &models.Nav{}, &models.Activity{}).Error
if err != nil {
log.Fatalf("cannot migrate table: %v", err)
}
for n, _ := range navs {
err = db.Debug().Model(&models.Nav{}).Create(&navs[n]).Error
if err != nil {
log.Fatalf("cannot seed nav table: %v", err)
}
}
}