Hi,

Am trying to write a simple api using gorm and Sqlite3 database. Am using 
stuct and functions below.
However, after "PUT" of JSON format payload using Postman, the instances 
get created but when try
to "GET" all the instances, the array content shows "plmnList : null" 
without the array key and values 
even though i have provided values in the JSON PUT body.
Help needed, maybe am doing some wrong.

Thanks in advance.

example of PUT json payload using Postman 
{
"nfInstanceId": "3fa85f64-5717-4562-b3fc-2c96322333",
"plmnList":[{
"mcc": "446",
"mnc": "336"
}],
"validityPeriod":44
}

// Struct 

type NfInstanceStore struct {
NfInstanceID   string     `json:"nfInstanceId" gorm:"primary_key"`
PlmnList       [ ]PlmnList `json:"plmnList"` 
ValidityPeriod int        `json:" validityPeriod"`
}

type PlmnList struct {
gorm.Model
Mcc string `json:"mcc"`
Mnc string `json:"mnc"`
}

// Database migration

var db *gorm.DB
var e error

func initialMigration() {

db, e := gorm.Open("sqlite3", "gorm.db")
if e != nil {
fmt.Println(e.Error())
panic("failed to connect database")
}
defer db.Close()

// Migrate the schema
db.AutoMigrate(&model.NfInstanceStore{}, &model.PlmnList{})

}

// Main function is as follow

func main() {

 initialMigration()

         router := mux.NewRouter()

router.HandleFunc("/nnrf-nmf/v1/nf-instances", 
getAllNFInstances).Methods("GET")

       router.HandleFunc("/nnrf-nmf/v1/nf-instances/{nfinstanceID}", 
registerNewNFInstance).Methods("PUT")

}

// PUT - registerNewNFInstance

func registerNewNFInstance(w http.ResponseWriter, r *http.Request) {
db, err := gorm.Open("sqlite3", "gorm.db")
if err != nil {
panic("failed to connect database")
}
defer db.Close()

nfinstance := model.NfInstanceStore{}

decoder := json.NewDecoder(r.Body)
if err := decoder.Decode(&nfinstance); err != nil {
respondError(w, http.StatusBadRequest, err.Error())
return
}
defer r.Body.Close()

if err := db.Save(&nfinstance).Error; err != nil {
respondError(w, http.StatusInternalServerError, err.Error())
return
}

respondJSON(w, http.StatusCreated, nfinstance)
}

// GETAll

func getAllNFInstances(w http.ResponseWriter, r *http.Request) {
db, err := gorm.Open("sqlite3", "gorm.db")
if err != nil {
panic("failed to connect database")
}
defer db.Close()
nfinstances := []model.NfInstanceStore{}
db.Find(&nfinstances)
respondJSON(w, http.StatusOK, nfinstances)
}

// 
func respondJSON(w http.ResponseWriter, status int, payload interface{}) {
response, err := json.Marshal(payload)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
w.Write([]byte(err.Error()))
return
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(status)
w.Write([]byte(response))
}



-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to