func handlePkgsinfoCreate(db datastore.Datastore) httprouter.Handle { return func(rw http.ResponseWriter, r *http.Request, _ httprouter.Params) { accept := acceptHeader(r) var pkgsinfo *models.PkgsInfo var payload struct { Filename string `plist:"filename" json:"filename"` *models.PkgsInfo } err := decodeRequest(r, &payload) if err != nil { respondError(rw, errStatus(err), accept, fmt.Errorf("Failed to decode request payload: %v", err)) return } // filename is required in the payload if payload.Filename == "" { respondError(rw, http.StatusBadRequest, accept, errors.New("The filename field is required to create a pkgsinfo")) return } // If the body contains a valid pkgsinfo, create it pkgsinfo = payload.PkgsInfo pkgsinfo.Filename = payload.Filename // create pkgsinfo in datastore _, err = db.NewPkgsinfo(payload.Filename) if err != nil { respondError(rw, errStatus(err), accept, fmt.Errorf("Failed to create new pkgsinfo: %v", err)) return } // save the pkgsinfo if err := db.SavePkgsinfo(pkgsinfo); err != nil { respondError(rw, errStatus(err), accept, fmt.Errorf("Failed to save pkgsinfo: %v", err)) return } respondCreated(rw, pkgsinfo, accept) } }