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) }