socialnetworknews-api

git clone git://archive.git.mtrnord.blog/SocialNetworkNews/socialnetworknews-api.git
Log | Files | Refs | LICENSE

commit 499afe57fe02e1fbc1740f8e8bcb79c9716dec67
parent dcddf5796323d746d80bbe0fc18ec4e810b4abc1
Author: MTRNord <mtrnord1@gmail.com>
Date:   Mon, 19 Feb 2018 19:32:14 +0100

Try to implement the "GET /paper/{uuid}" endpoint

Diffstat:
Mapi/webserver.go | 37++++++++++++++++++++++++++++++++++---
Mmain.go | 1+
2 files changed, 35 insertions(+), 3 deletions(-)

diff --git a/api/webserver.go b/api/webserver.go @@ -55,9 +55,10 @@ func Papers(w http.ResponseWriter, r *http.Request) { var data []byte switch r.Method { case "GET": - papers, err := getPapers() + papers, err := getPapers(false) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) + return } data = papers @@ -66,14 +67,34 @@ func Papers(w http.ResponseWriter, r *http.Request) { var t []Paper err := decoder.Decode(&t) if err != nil { - panic(err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return } defer r.Body.Close() papers, err := addPapers(t) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + data = papers + } + w.Header().Set("Content-Type", "application/json") + w.Header().Set("API-VERSION", "0.0.0") + w.WriteHeader(http.StatusOK) + w.Write(data) +} + +func PaperFunc(w http.ResponseWriter, r *http.Request) { + var data []byte + switch r.Method { + case "GET": + papers, err := getPapers(true) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return } + data = papers } w.Header().Set("Content-Type", "application/json") @@ -139,7 +160,7 @@ func addPapers(data []Paper) ([]byte, error) { return papersArray, nil } -func getPapers() ([]byte, error) { +func getPapers(full bool) ([]byte, error) { papersDB, openErr := db.OpenDB() if openErr != nil { return nil, openErr @@ -178,8 +199,18 @@ func getPapers() ([]byte, error) { return errors.WithMessage(QueryErr, fmt.Sprintf("%s%s|image", prefix, stringKeyEnd)) } + descResult, QueryErr := db.Get(txn, []byte(fmt.Sprintf("%s%s|description", prefix, stringKeyEnd))) + if QueryErr != nil { + return errors.WithMessage(QueryErr, fmt.Sprintf("%s%s|description", prefix, stringKeyEnd)) + } + paper.PaperImage = fmt.Sprintf("%s", paperIMGResult) paper.Name = fmt.Sprintf("%s", nameResult) + paper.Description = fmt.Sprintf("%s", descResult) + + if full { + //TODO Add Author Object! + } papers = append(papers, paper) } diff --git a/main.go b/main.go @@ -25,6 +25,7 @@ func main() { r.HandleFunc("/papers", web_api.Papers).Methods("GET", "POST") p := r.PathPrefix("/paper/{uuid}").Subrouter() + r.HandleFunc("/", web_api.PaperFunc).Methods("GET") p.HandleFunc("/yesterday", web_api.Yesterday).Methods("GET") // cors.Default() setup the middleware with default options being // all origins accepted with simple methods (GET, POST). See