6 Commits

2 changed files with 57 additions and 12 deletions

64
main.go
View File

@@ -116,17 +116,22 @@ var envKeys = []string{"GEMINI_API_KEY", "MET_API_USER_AGENT", "VAPID_SUBJECT",
var prompt string
var supportedLocations = map[string]*location{
"london": {nil, 51.507351, -0.127758, "Europe/London", "London"},
"sf": {nil, 37.774929, -122.419418, "America/Los_Angeles", "San Francisco"},
"sj": {nil, 37.338207, -121.886330, "America/Los_Angeles", "San Jose"},
"la": {nil, 34.052235, -118.243683, "America/Los_Angeles", "Los Angeles"},
"nyc": {nil, 40.712776, -74.005974, "America/New_York", "New York City"},
"tokyo": {nil, 35.689487, 139.691711, "Asia/Tokyo", "Tokyo"},
"warsaw": {nil, 52.229675, 21.012230, "Europe/Warsaw", "Warsaw"},
"zurich": {nil, 47.369019, 8.538030, "Europe/Zurich", "Zurich"},
"berlin": {nil, 52.520008, 13.404954, "Europe/Berlin", "Berlin"},
"dubai": {nil, 25.204849, 55.270782, "Asia/Dubai", "Dubai"},
"paris": {nil, 48.864716, 2.349014, "Europe/Paris", "Paris"},
"london": {nil, 51.507351, -0.127758, "Europe/London", "London"},
"sf": {nil, 37.774929, -122.419418, "America/Los_Angeles", "San Francisco"},
"sj": {nil, 37.338207, -121.886330, "America/Los_Angeles", "San Jose"},
"la": {nil, 34.052235, -118.243683, "America/Los_Angeles", "Los Angeles"},
"nyc": {nil, 40.712776, -74.005974, "America/New_York", "New York City"},
"tokyo": {nil, 35.689487, 139.691711, "Asia/Tokyo", "Tokyo"},
"singapore": {nil, 1.290270, 103.851959, "Asia/Singapore", "Singapore"},
"manila": {nil, 14.599512, 120.984222, "Asia/Manila", "Manila"},
"hk": {nil, 22.317053, 114.169547, "Asia/Hong_Kong", "Hong Kong"},
"warsaw": {nil, 52.229675, 21.012230, "Europe/Warsaw", "Warsaw"},
"zurich": {nil, 47.369019, 8.538030, "Europe/Zurich", "Zurich"},
"berlin": {nil, 52.520008, 13.404954, "Europe/Berlin", "Berlin"},
"dubai": {nil, 25.204849, 55.270782, "Asia/Dubai", "Dubai"},
"paris": {nil, 48.864716, 2.349014, "Europe/Paris", "Paris"},
"stockholm": {nil, 59.329323, 18.068581, "Europe/Stockholm", "Stockholm"},
"amsterdam": {nil, 52.370216, 4.895168, "Europe/Amsterdam", "Amsterdam"},
}
func main() {
@@ -392,6 +397,39 @@ func handleHTTPRequest(state *state) http.HandlerFunc {
writer.WriteHeader(http.StatusMethodNotAllowed)
}
} else if strings.HasPrefix(path, "api/") {
if origin := request.Header.Get("Origin"); origin != "" {
writer.Header().Set("Access-Control-Allow-Origin", origin)
}
if strings.HasPrefix(path, "api/summary/") {
switch request.Method {
case "OPTIONS":
writer.Header().Set("Access-Control-Allow-Methods", "GET, OPTIONS")
writer.WriteHeader(http.StatusOK)
case "GET":
location := strings.TrimPrefix(path, "api/summary/")
summary, ok := state.summaries.Load(location)
if !ok {
writer.WriteHeader(http.StatusNotFound)
return
}
response := map[string]string{
"summary": strings.TrimSpace(summary.(string)),
}
writer.Header().Set("Content-Type", "application/json")
json.NewEncoder(writer).Encode(response)
default:
writer.WriteHeader(http.StatusMethodNotAllowed)
}
} else {
writer.WriteHeader(http.StatusNotFound)
}
} else {
if request.Method != "" && request.Method != "GET" {
writer.WriteHeader(http.StatusMethodNotAllowed)
@@ -701,10 +739,12 @@ func updateSummary(ctx context.Context, state *state, opts updateSummaryOptions)
summary := result.Text()
_, err = state.db.ExecContext(ctx, "INSERT INTO summaries (location, summary) VALUES (?, ?)", locKey, summary)
state.dbMutex.Lock()
_, err = state.db.ExecContext(ctx, "INSERT OR REPLACE INTO summaries (location, summary) VALUES (?, ?)", locKey, summary)
if err != nil {
slog.Warn("unable to cache generated weather summary to db", "location", locKey, "error", err)
}
state.dbMutex.Unlock()
state.summaries.Store(locKey, summary)

View File

@@ -48,9 +48,14 @@
<li><a href="/paris">Paris</a></li>
<li><a href="/berlin">Berlin</a></li>
<li><a href="/zurich">Zurich</a></li>
<li><a href="/stockholm">Stockholm</a></li>
<li><a href="/amsterdam">Amsterdam</a></li>
<li><a href="/warsaw">Warsaw</a></li>
<li><a href="/dubai">Dubai</a></li>
<li><a href="/tokyo">Tokyo</a></li>
<li><a href="/singapore">Singapore</a></li>
<li><a href="/manila">Manila</a></li>
<li><a href="/hk">Hong Kong</a></li>
</ul>
</main>