From 63ece995933499c6c84b959b8f6ca1d44b739dfe Mon Sep 17 00:00:00 2001 From: Pin Date: Sun, 31 Jan 2021 21:20:39 -0500 Subject: [PATCH] Updated API for selected dog type Signed-off-by: Pin --- db/dogselect.go | 39 +++++++++++++++++++++++++++++++++++++++ handlers/apihandler.go | 12 ++++++++++-- 2 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 db/dogselect.go diff --git a/db/dogselect.go b/db/dogselect.go new file mode 100644 index 0000000..70afee6 --- /dev/null +++ b/db/dogselect.go @@ -0,0 +1,39 @@ +/* + Simple API the serves pictures of dogs + Copyright (C) 2021 Pin + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +package db + +import ( + "dogapi/structs" + "log" +) + +func DogSelect(dog string) (structs.DogPicRow) { + q := `select * from dog_pictures where breed_id=(select breed_id from breed_manifest where breed=$1) offset floor(random()*(select count(*) from dog_pictures where breed_id=(select breed_id from breed_manifest where breed=$1))) limit 1;` + selstat, err := conn.Query(q, dog) + if err != nil { + log.Fatalln(err) + } + var rowsel structs.DogPicRow + for selstat.Next() { + if err := selstat.Scan(&rowsel.Dog_id, &rowsel.Breed_id, &rowsel.Author, &rowsel.Title, &rowsel.Format, &rowsel.Hash, &rowsel.Url); err != nil { + log.Fatal(err) + } + } + return rowsel +} diff --git a/handlers/apihandler.go b/handlers/apihandler.go index 804c58d..a663163 100644 --- a/handlers/apihandler.go +++ b/handlers/apihandler.go @@ -29,7 +29,15 @@ func APIHandler(w http.ResponseWriter, r *http.Request) { switch r.Method { case "GET": var dogquery structs.DogPicRow - dogquery = db.RandomSelect() - json.NewEncoder(w).Encode(dogquery) + keys := r.URL.Query().Get("dog") + if len(keys) == 0 { + dogquery = db.RandomSelect() + json.NewEncoder(w).Encode(dogquery) + return + } else { + dogquery = db.DogSelect(keys) + json.NewEncoder(w).Encode(dogquery) + return + } } }