From 944f64f5d82131faea568c98a2c1d875a375c25d Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Tue, 24 Mar 2015 20:52:40 +0900 Subject: [PATCH] Serialization cleanup --- server.go | 70 ++++++++++++++++++++++++---------------- static/scripts/search.js | 2 +- 2 files changed, 43 insertions(+), 29 deletions(-) diff --git a/server.go b/server.go index 6c8a99f..23069bd 100644 --- a/server.go +++ b/server.go @@ -36,24 +36,38 @@ import ( var db *sql.DB func executeQuery(rw http.ResponseWriter, req *http.Request) { - type Request struct { - features featureMap - bounds queryBounds - geo geoContext - walkingDist float64 - minScore float64 - hintSteps int - maxResults int + type JsonFeatureMap map[string]float64 - // features: _ctx.query.features || {}, - // range: {min: -1.0, max: 1.0}, - // profile: getProfile(), - // walkingDist: parseFloat($('#walkingDist').val()), - // minScore: parseFloat($('#minScore').val()), - // hintSteps: parseInt($('#hintSteps').val()), - // maxResults: parseInt($('#maxResults').val()) + type JsonRange struct { + Max float64 `json:"max"` + Min float64 `json:"min"` } + type JsonGeo struct { + Latitude float64 `json:"latitude"` + Longitude float64 `json:"longitude"` + Valid bool `json:"valid"` + } + + type JsonRequest struct { + Features JsonFeatureMap `json:"features"` + Geo *JsonGeo `json:"geo"` + HintSteps int `json:"hintSteps"` + MaxResults int `json:"maxResults"` + MinScore float64 `json:"minScore"` + Profile JsonFeatureMap `json:"profile"` + Range JsonRange `json:"range"` + WalkingDist float64 `json:"walkingDist"` + } + + var request JsonRequest + if err := json.NewDecoder(req.Body).Decode(&request); err != nil { + http.Error(rw, err.Error(), http.StatusInternalServerError) + return + } + + log.Print("Ready") + // function runQuery(query, callback) { // query.profile = fixupProfile(query.profile); // query.features = fixupFeatures(query.features); @@ -99,7 +113,7 @@ func executeQuery(rw http.ResponseWriter, req *http.Request) { } func getCategories(rw http.ResponseWriter, req *http.Request) { - type Category struct { + type JsonCategory struct { Description string `json:"description"` Id int `json:"id"` } @@ -110,7 +124,7 @@ func getCategories(rw http.ResponseWriter, req *http.Request) { } defer rows.Close() - var categories []Category + var categories []JsonCategory for rows.Next() { var ( description string @@ -121,7 +135,7 @@ func getCategories(rw http.ResponseWriter, req *http.Request) { log.Fatal(err) } - categories = append(categories, Category{description, id}) + categories = append(categories, JsonCategory{description, id}) } if err := rows.Err(); err != nil { @@ -138,23 +152,23 @@ func getCategories(rw http.ResponseWriter, req *http.Request) { } func addCategory(rw http.ResponseWriter, req *http.Request) { - type Request struct { + type JsonRequest struct { Description string `json:"description"` } - type Response struct { + type JsonResponse struct { Description string `json:"description"` Id int `json:"id"` Success bool `json:"success"` } - var request Request + var request JsonRequest if err := json.NewDecoder(req.Body).Decode(&request); err != nil { http.Error(rw, err.Error(), http.StatusInternalServerError) return } - response := Response{Description: strings.TrimSpace(request.Description)} + response := JsonResponse{Description: strings.TrimSpace(request.Description)} if len(request.Description) > 0 { result, err := db.Exec("INSERT INTO categories(description) VALUES(?)", request.Description) @@ -186,15 +200,15 @@ func addCategory(rw http.ResponseWriter, req *http.Request) { } func removeCategory(rw http.ResponseWriter, req *http.Request) { - type Request struct { + type JsonRequest struct { Id int `json:"id"` } - type Response struct { + type JsonResponse struct { Success bool `json:"success"` } - var request Request + var request JsonRequest if err := json.NewDecoder(req.Body).Decode(&request); err != nil { http.Error(rw, err.Error(), http.StatusInternalServerError) return @@ -210,7 +224,7 @@ func removeCategory(rw http.ResponseWriter, req *http.Request) { log.Fatal(err) } - js, err := json.Marshal(Response{affectedRows > 0}) + js, err := json.Marshal(JsonResponse{affectedRows > 0}) if err != nil { log.Fatal(err) } @@ -258,7 +272,7 @@ func accessReview(rw http.ResponseWriter, req *http.Request) { // } } -func getStaticPath() (string, error) { +func staticPath() (string, error) { if len(os.Args) > 1 { return os.Args[1], nil } @@ -267,7 +281,7 @@ func getStaticPath() (string, error) { } func main() { - dir, err := getStaticPath() + dir, err := staticPath() if err != nil { log.Fatal(err) } diff --git a/static/scripts/search.js b/static/scripts/search.js index 92aa26a..9799874 100644 --- a/static/scripts/search.js +++ b/static/scripts/search.js @@ -155,7 +155,7 @@ } function getProfile() { - return localStorage.profile || '{}'; + return JSON.parse(localStorage.profile || '{}'); } window.onpopstate = function(state) {