|
|
@@ -0,0 +1,226 @@
|
|
|
+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
|
|
|
+// }
|