generated from GoogleCloudPlatform/cloud-run-microservice-template-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhandler.go
108 lines (101 loc) · 2.97 KB
/
handler.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"cloud.google.com/go/logging"
"github.com/jerrutledge/caption-search-go-api/dbconnection"
"github.com/jerrutledge/caption-search-go-api/episode"
)
func (a *App) Handler(w http.ResponseWriter, r *http.Request) {
query := r.URL.Query()
params, present := query["q"]
var queryString string
if !present || len(params) == 0 {
queryString = "N/A"
} else {
queryString = params[0]
log.Printf("hello query parameter %s", queryString)
}
a.log.Log(logging.Entry{
Severity: logging.Info,
HTTPRequest: &logging.HTTPRequest{
Request: r,
},
Labels: map[string]string{"query": queryString},
Payload: "Structured logging example.",
})
fmt.Fprintf(w, "Hello World, and welcome to Caption Search!\n")
}
func (a *App) SearchLogHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
// allow certain sites to make requests
w.Header().Set("Access-Control-Allow-Origin", "http://localhost:3000") // local development
// w.Header().Set("Access-Control-Allow-Origin", "http://caption-search.jeremyrutledge.com") // web api
// w.Header().Set("Access-Control-Allow-Origin", "http://jeremyrutledge.com") // web api
// allow gets
w.Header().Set("Access-Control-Allow-Methods", "GET")
// begin response
query := r.URL.Query()
params, present := query["q"]
if !present || len(params) == 0 {
a.ReturnError(w, r)
return
}
var queryString string = params[0]
coll, err := dbconnection.Connect()
if err != nil {
a.ReturnError(w, r)
return
}
var response = episode.SearchResults{Err: false}
err, response.Results = episode.Search(coll, queryString)
if err != nil {
a.ReturnError(w, r)
return
}
data, err := json.Marshal(response)
if err != nil {
a.ReturnError(w, r)
return
}
a.log.Log(logging.Entry{
Severity: logging.Info,
HTTPRequest: &logging.HTTPRequest{
Request: r,
},
Labels: map[string]string{"query": queryString, "hits": fmt.Sprint(len(response.Results))},
Payload: "sorry",
})
w.Write(data)
}
func (a *App) ReturnError(w http.ResponseWriter, r *http.Request) {
a.log.Log(logging.Entry{
Severity: logging.Info,
HTTPRequest: &logging.HTTPRequest{
Request: r,
},
Labels: map[string]string{"error": "true"},
})
var response = episode.SearchResults{Err: true}
data, err := json.Marshal(response)
if err != nil {
return
}
w.Write(data)
return
}