summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go45
1 files changed, 41 insertions, 4 deletions
diff --git a/main.go b/main.go
index 036b47c..e28f72b 100644
--- a/main.go
+++ b/main.go
@@ -6,6 +6,7 @@ import (
"log"
"net/http"
"os"
+ "strconv"
"github.com/gorilla/mux"
)
@@ -16,14 +17,14 @@ var content embed.FS
func handleEntryOptions(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
- w.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS")
+ w.Header().Set("Access-Control-Allow-Methods", "OPTIONS, POST, GET")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
w.WriteHeader(http.StatusNoContent)
}
func handleEntryPost(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
- w.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS")
+ w.Header().Set("Access-Control-Allow-Methods", "OPTIONS, POST, GET")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
var entry Entry
err := json.NewDecoder(r.Body).Decode(&entry)
@@ -39,10 +40,46 @@ func handleEntryPost(w http.ResponseWriter, r *http.Request) {
log.Println("New entry for", entry.Location)
}
+type EntriesPage struct {
+ Total uint `json:"total"`
+ Offset uint `json:"offset"`
+ Size uint `json:"size"`
+ Entries []Entry `json:"entries"`
+}
+
+
+func handleEntryGet(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Access-Control-Allow-Origin", "*")
+ w.Header().Set("Access-Control-Allow-Methods", "OPTIONS, POST, GET")
+ w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
+ from64, _ := strconv.ParseUint(r.FormValue("from"), 10, 32)
+ from := uint(from64)
+ count, err := CountEntries()
+ if err != nil {
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ entries, err := ListEntries(from, 1000)
+ if err != nil {
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+ if entries == nil {
+ entries = []Entry{}
+ }
+ page := EntriesPage{Total: count, Offset: from, Size: uint(len(entries)), Entries: entries}
+ err = json.NewEncoder(w).Encode(&page)
+ if err != nil {
+ http.Error(w, err.Error(), http.StatusInternalServerError)
+ return
+ }
+}
+
func handleRequests() {
router := mux.NewRouter()
- router.HandleFunc("/entry", handleEntryPost).Methods("POST")
- router.HandleFunc("/entry", handleEntryOptions).Methods("OPTIONS")
+ router.HandleFunc("/entries", handleEntryOptions).Methods("OPTIONS")
+ router.HandleFunc("/entries", handleEntryPost).Methods("POST")
+ router.HandleFunc("/entries", handleEntryGet).Methods("GET")
router.PathPrefix("/").Handler(http.FileServer(http.FS(content)))
log.Fatal(http.ListenAndServe(configure(), router))
}