69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"net/http"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"inou/lib"
|
|
)
|
|
|
|
func handleGenomeQuery(w http.ResponseWriter, r *http.Request) {
|
|
ctx := getAccessContextOrFail(w, r)
|
|
if ctx == nil {
|
|
return
|
|
}
|
|
|
|
dossierID := r.URL.Query().Get("dossier")
|
|
if dossierID == "" {
|
|
http.Error(w, "missing dossier", http.StatusBadRequest)
|
|
return
|
|
}
|
|
|
|
if !requireDossierAccess(w, ctx, dossierID) {
|
|
return
|
|
}
|
|
|
|
// Parse query params into opts
|
|
q := r.URL.Query()
|
|
var minMag float64
|
|
if s := q.Get("min_magnitude"); s != "" {
|
|
minMag, _ = strconv.ParseFloat(s, 64)
|
|
}
|
|
offset := 0
|
|
if s := q.Get("offset"); s != "" {
|
|
offset, _ = strconv.Atoi(s)
|
|
}
|
|
limit := 100
|
|
if s := q.Get("limit"); s != "" {
|
|
limit, _ = strconv.Atoi(s)
|
|
}
|
|
var rsids []string
|
|
if s := q.Get("rsids"); s != "" {
|
|
rsids = strings.Split(s, ",")
|
|
}
|
|
|
|
result, err := lib.GenomeQuery(dossierID, lib.GenomeQueryOpts{
|
|
Category: q.Get("category"),
|
|
Search: q.Get("search"),
|
|
Gene: q.Get("gene"),
|
|
RSIDs: rsids,
|
|
MinMagnitude: minMag,
|
|
IncludeHidden: q.Get("include_hidden") == "true",
|
|
Sort: q.Get("sort"),
|
|
Offset: offset,
|
|
Limit: limit,
|
|
})
|
|
if err != nil {
|
|
w.Header().Set("Content-Type", "application/json")
|
|
json.NewEncoder(w).Encode(map[string]interface{}{
|
|
"error": err.Error(),
|
|
})
|
|
return
|
|
}
|
|
|
|
w.Header().Set("Content-Type", "application/json")
|
|
json.NewEncoder(w).Encode(result)
|
|
}
|