package files import ( // "errors" "net/http" "io/ioutil" // "strconv" // "strings" "git.mmnx.de/mmnx/cdn/module" "github.com/gorilla/mux" ) //TODO test mux var // repository.go holds all basic HTTP API methods func filesIndex(w http.ResponseWriter, r *http.Request) { switch r.Method { case "GET": getFiles(w, r) // getContacts(w, r) break case "POST": // postContact(w, r) break case "PUT": // putContact(w, r) break } } func filesSingle(w http.ResponseWriter, r *http.Request) { switch r.Method { case "GET": // getContact(w, r) break case "PATCH": // patchContact(w, r) break case "DELETE": // deleteContact(w, r) break } } func filesRaw(w http.ResponseWriter, r *http.Request) { if r.Method == "GET" { fileID := mux.Vars(r)["fileID"] file := &File{} // get file from DB module.HandleError(module.ErrDatabase, db.Preload("Storage").Find(&file, "id = ?", fileID).Error) // read file contents dat, err := ioutil.ReadFile(file.Storage.AbsolutePath + file.RelativePath) module.HandleError(module.ErrReadingFile, err) // output file contents w.Write(dat) } } func getFiles(w http.ResponseWriter, r *http.Request) { files := []File{} module.HandleError(module.ErrDatabase, db.Preload("Storage").Find(&files).Error) // get db records module.JSONResp(w, files) } func mockFiles(w http.ResponseWriter, r *http.Request) { createTestData() // files := []File{} // for i := range people { // // "convert" us house-nr format to eu // street := strings.Title(people[i].Location["street"].(string)) // streetSpl := strings.Split(street, " ") // houseNr, err := strconv.Atoi(streetSpl[0]) // module.HandleError(module.ErrParsingInt, err) // houseNr = houseNr / 400 // street = strings.Join(streetSpl[1:], " ") + " " + strconv.Itoa(houseNr) // con := Contact{ // Prefix: func(t string) string { // if t == "mr" { // return "Hr." // } // return "Fr." // }(people[i].Name["title"]), // FirstName: strings.Title(people[i].Name["first"]), // LastName: strings.Title(people[i].Name["last"]), // Phones: []Phone{Phone{Type: "Mobil", Number: people[i].Cell}, Phone{Type: "Privat", Number: people[i].Phone}}, // Emails: []Email{Email{Type: "Privat", Address: people[i].Email}}, // Addresses: []Address{Address{Type: "Privat", Street: street, ZIPCode: strconv.FormatFloat(people[i].Location["postcode"].(float64), 'g', 5, 64), City: strings.Title(people[i].Location["city"].(string)), State: strings.Title(people[i].Location["state"].(string)), Country: "Deutschland"}}, // } // cons = append(cons, con) // module.HandleError(module.ErrDatabase, db.Create(&con).Error) // create in DB // } module.JSONResp(w, "done") } // func getContacts(w http.ResponseWriter, r *http.Request) { // contacts := []Contact{} // module.HandleError(module.ErrDatabase, db.Preload("Emails").Preload("Phones").Preload("Addresses").Find(&contacts).Error) // get db records // module.JSONResp(w, contacts) // } // func getContact(w http.ResponseWriter, r *http.Request) { // // contact := Contact{} // // // // module.HandleError(module.ErrDatabase, db.Preload("Emails").Preload("Phones").Preload("Addresses").First(&contact, "id = ?", mux.Vars(r)["contactID"]).Error) // get DB record with relations // module.JSONResp(w, getFullContact(mux.Vars(r)["contactID"])) // } // func postContact(w http.ResponseWriter, r *http.Request) { // contact := Contact{} // module.JSONReq(r, &contact) // decode POST data // module.HandleError(module.ErrDatabase, db.Create(&contact).Error) // create in DB // module.JSONResp(w, getFullContact(strconv.Itoa(int(contact.ID)))) // } // func putContact(w http.ResponseWriter, r *http.Request) { // contact := Contact{} // module.JSONReq(r, &contact) // decode POST data // module.HandleError(module.ErrDatabase, db.Save(&contact).Error) // update in DB // module.JSONResp(w, getFullContact(strconv.Itoa(int(contact.ID)))) // } // func patchContact(w http.ResponseWriter, r *http.Request) { // var updates []map[string]interface{} // parsedUpdates := make(map[string]interface{}) // contact := Contact{} // module.JSONReq(r, &updates) // decode POST data // for i := range updates { // for k, v := range updates[i] { // parsedUpdates[k] = v // } // } // module.HandleError(module.ErrDatabase, db.Find(&contact, "id = ?", mux.Vars(r)["contactID"]).Error) // get contact // module.HandleError(module.ErrDatabase, db.Model(&contact).Update(parsedUpdates).Error) // update // contact = Contact{} // module.JSONResp(w, getFullContact(mux.Vars(r)["contactID"])) // } // func deleteContact(w http.ResponseWriter, r *http.Request) { // count := -1 // module.HandleError(module.ErrDatabase, db.Model(Contact{}).Where("id = ?", mux.Vars(r)["contactID"]).Count(&count).Error) // get contact count with contactID // if count != 1 { // contact has to be identifiable // module.HandleError(module.ErrDatabase, errors.New("record not found")) // } // module.HandleError(module.ErrDatabase, db.Delete(Contact{}, mux.Vars(r)["contactID"]).Error) // soft delete // status := make(map[string]string) // status["status"] = "ok" // module.JSONResp(w, status) // } // // mockContacts gets some random person data and fills the database with them // func mockContacts(w http.ResponseWriter, r *http.Request) { // people := createRandomTestData() // cons := []Contact{} // for i := range people { // // "convert" us house-nr format to eu // street := strings.Title(people[i].Location["street"].(string)) // streetSpl := strings.Split(street, " ") // houseNr, err := strconv.Atoi(streetSpl[0]) // module.HandleError(module.ErrParsingInt, err) // houseNr = houseNr / 400 // street = strings.Join(streetSpl[1:], " ") + " " + strconv.Itoa(houseNr) // con := Contact{ // Prefix: func(t string) string { // if t == "mr" { // return "Hr." // } // return "Fr." // }(people[i].Name["title"]), // FirstName: strings.Title(people[i].Name["first"]), // LastName: strings.Title(people[i].Name["last"]), // Phones: []Phone{Phone{Type: "Mobil", Number: people[i].Cell}, Phone{Type: "Privat", Number: people[i].Phone}}, // Emails: []Email{Email{Type: "Privat", Address: people[i].Email}}, // Addresses: []Address{Address{Type: "Privat", Street: street, ZIPCode: strconv.FormatFloat(people[i].Location["postcode"].(float64), 'g', 5, 64), City: strings.Title(people[i].Location["city"].(string)), State: strings.Title(people[i].Location["state"].(string)), Country: "Deutschland"}}, // } // cons = append(cons, con) // module.HandleError(module.ErrDatabase, db.Create(&con).Error) // create in DB // } // module.JSONResp(w, cons) // } // // Helpers // func getFullContact(contactID string) Contact { // contact := Contact{} // module.HandleError(module.ErrDatabase, db.Preload("Emails").Preload("Phones").Preload("Addresses").First(&contact, "id = ?", contactID).Error) // get DB record with relations // return contact // }