From d64e899e0fa30a2ccf54406b2df762821f02f7e8 Mon Sep 17 00:00:00 2001 From: jordi fita mas Date: Tue, 28 Jan 2025 21:37:30 +0100 Subject: [PATCH] Add a weather forecast Requested by customer. Needs a command run in a cron to update the forecast data from an URL, and only a single URL is supported by now. --- cmd/camper-weather/main.go | 89 +++++++++ deploy/weather_forecast.sql | 23 +++ pkg/template/page.go | 33 +++- pkg/template/render.go | 14 ++ revert/weather_forecast.sql | 7 + sqitch.plan | 1 + test/weather_forecast.sql | 55 ++++++ verify/weather_forecast.sql | 14 ++ web/static/fonts/weathericons.woff2 | Bin 0 -> 44720 bytes web/static/public.css | 294 +++++++++++++++++++++++++++- web/templates/public/layout.gohtml | 11 +- 11 files changed, 533 insertions(+), 8 deletions(-) create mode 100644 cmd/camper-weather/main.go create mode 100644 deploy/weather_forecast.sql create mode 100644 revert/weather_forecast.sql create mode 100644 test/weather_forecast.sql create mode 100644 verify/weather_forecast.sql create mode 100644 web/static/fonts/weathericons.woff2 diff --git a/cmd/camper-weather/main.go b/cmd/camper-weather/main.go new file mode 100644 index 0000000..42a9e49 --- /dev/null +++ b/cmd/camper-weather/main.go @@ -0,0 +1,89 @@ +package main + +import ( + "context" + "dev.tandem.ws/tandem/camper/pkg/database" + "encoding/json" + "log" + "net/http" + "os" + "strconv" + "time" +) + +type Temperature struct { + Day float64 `json:"day"` + Min float64 `json:"min"` +} + +type Weather struct { + ID int `json:"id"` +} + +type Forecast struct { + Timestamp int64 `json:"dt"` + Weather []Weather `json:"weather"` + Temperature Temperature `json:"temp"` +} + +type OpenWeatherMap struct { + Forecasts []Forecast `json:"list"` +} + +func main() { + db, err := database.New(context.Background(), os.Getenv("CAMPER_DATABASE_URL")) + if err != nil { + log.Fatal(err) + } + defer db.Close() + + conn, err := db.Acquire(context.Background()) + if err != nil { + log.Fatal(err) + } + defer conn.Release() + + var stationURL string + if err := conn.QueryRow(context.Background(), ` + select station_uri + from weather_forecast + `).Scan( + &stationURL, + ); err != nil { + log.Fatal(err) + } + + resp, err := http.Get(stationURL) + if err != nil { + log.Fatal(err) + } + + var result OpenWeatherMap + if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { + log.Fatal(err) + } + + if _, err := conn.Exec(context.Background(), "set role to admin"); err != nil { + log.Fatal(err) + } + + for _, forecast := range result.Forecasts { + if _, err := db.Exec(context.Background(), ` + update weather_forecast + set weather_condition_id = $1 + , day_temperature = $2 + , min_temperature = $3 + , forecasted_at = $4 + , updated_at = current_timestamp + where station_uri = $5 + `, + strconv.Itoa(forecast.Weather[0].ID), + forecast.Temperature.Day, + forecast.Temperature.Min, + time.Unix(forecast.Timestamp, 0), + stationURL, + ); err != nil { + log.Fatal(err) + } + } +} diff --git a/deploy/weather_forecast.sql b/deploy/weather_forecast.sql new file mode 100644 index 0000000..b45433a --- /dev/null +++ b/deploy/weather_forecast.sql @@ -0,0 +1,23 @@ +-- Deploy camper:weather_forecast to pg +-- requires: schema_camper +-- requires: roles +-- requires: extension_uri + +begin; + +set search_path to camper, public; + +create table weather_forecast ( + station_uri uri primary key, + weather_condition_id text not null, + day_temperature numeric(5,2) not null, + min_temperature numeric(5,2) not null, + forecasted_at timestamp with time zone not null, + updated_at timestamp with time zone not null +); + +grant select on table weather_forecast to guest; +grant select on table weather_forecast to employee; +grant select, insert, update, delete on table weather_forecast to admin; + +commit; diff --git a/pkg/template/page.go b/pkg/template/page.go index ed74b05..a2936dd 100644 --- a/pkg/template/page.go +++ b/pkg/template/page.go @@ -11,6 +11,7 @@ import ( gotemplate "html/template" "net/http" "sort" + "time" "dev.tandem.ws/tandem/camper/pkg/auth" "dev.tandem.ws/tandem/camper/pkg/database" @@ -22,12 +23,14 @@ type PublicPage struct { LocalizedAlternates []*LocalizedAlternate Menu *siteMenu CompanyAddress *address + WeatherForecast *WeatherForecast OpeningDates gotemplate.HTML } func NewPublicPage() *PublicPage { return &PublicPage{ - CompanyAddress: &address{}, + CompanyAddress: &address{}, + WeatherForecast: &WeatherForecast{}, } } @@ -70,6 +73,10 @@ func (p *PublicPage) Setup(r *http.Request, user *auth.User, company *auth.Compa if err := p.CompanyAddress.FillFromDatabase(r.Context(), conn, user, company); err != nil { panic(err) } + + if err := p.WeatherForecast.FillFromDatabase(r.Context(), conn); err != nil { + panic(err) + } } type LocalizedAlternate struct { @@ -152,3 +159,27 @@ where company_id = $1 &addr.RTCNumber, ) } + +type WeatherForecast struct { + WeatherConditionId string + DayTemperature string + MinTemperature string + ForecastedAt time.Time +} + +func (fc *WeatherForecast) FillFromDatabase(ctx context.Context, conn *database.Conn) error { + row := conn.QueryRow(ctx, ` +select weather_condition_id + , ceil(day_temperature) || '°' + , ceil(min_temperature) || '° C' + , forecasted_at +from weather_forecast +limit 1 +`) + return row.Scan( + &fc.WeatherConditionId, + &fc.DayTemperature, + &fc.MinTemperature, + &fc.ForecastedAt, + ) +} diff --git a/pkg/template/render.go b/pkg/template/render.go index 39d65bf..8633337 100644 --- a/pkg/template/render.go +++ b/pkg/template/render.go @@ -6,6 +6,7 @@ package template import ( + "dev.tandem.ws/tandem/camper/pkg/locale" "fmt" "html/template" "io" @@ -28,6 +29,16 @@ import ( httplib "dev.tandem.ws/tandem/camper/pkg/http" ) +var LongDayNames = []string{ + locale.PgettextNoop("Sunday", "day"), + locale.PgettextNoop("Monday", "day"), + locale.PgettextNoop("Tuesday", "day"), + locale.PgettextNoop("Wednesday", "day"), + locale.PgettextNoop("Thursday", "day"), + locale.PgettextNoop("Friday", "day"), + locale.PgettextNoop("Saturday", "day"), +} + func adminTemplateFile(name string) string { return "web/templates/admin/" + name } @@ -109,6 +120,9 @@ func mustRenderLayout(w io.Writer, user *auth.User, company *auth.Company, templ "formatPrice": func(price string) string { return FormatPrice(price, user.Locale.Language, user.Locale.CurrencyPattern, company.DecimalDigits, company.CurrencySymbol) }, + "dayOfWeek": func(time time.Time) template.HTML { + return template.HTML(`") + }, "formatDate": func(time time.Time) template.HTML { return template.HTML(`") }, diff --git a/revert/weather_forecast.sql b/revert/weather_forecast.sql new file mode 100644 index 0000000..25a6aa9 --- /dev/null +++ b/revert/weather_forecast.sql @@ -0,0 +1,7 @@ +-- Revert camper:weather_forecast from pg + +begin; + +drop table if exists camper.weather_forecast; + +commit; diff --git a/sqitch.plan b/sqitch.plan index 999bb2e..9112ab4 100644 --- a/sqitch.plan +++ b/sqitch.plan @@ -334,3 +334,4 @@ marshal_payment [roles schema_camper payment payment_customer payment_option pay unmarshal_booking [roles schema_camper booking booking_option extension_pg_libphonenumber] 2024-04-29T17:20:38Z jordi fita mas # Add function to unmarshal a booking cancel_booking [roles schema_camper booking booking_campsite] 2024-05-03T14:27:31Z jordi fita mas # Add function to cancel a booking campsite_type__operating_dates [campsite_type] 2024-07-15T21:27:19Z jordi fita mas # Add operating_dates field to campsite_type +weather_forecast [schema_camper roles extension_uri] 2025-01-28T18:57:33Z jordi fita mas # Add table to keep weather forecast diff --git a/test/weather_forecast.sql b/test/weather_forecast.sql new file mode 100644 index 0000000..4b0d5e7 --- /dev/null +++ b/test/weather_forecast.sql @@ -0,0 +1,55 @@ +-- Test weather_forecast +set client_min_messages to warning; +create extension if not exists pgtap; +reset client_min_messages; + +begin; + +select plan(31); + +set search_path to camper, public; + +select has_table('weather_forecast'); +select has_pk('weather_forecast'); +select table_privs_are('weather_forecast', 'guest', array['SELECT']); +select table_privs_are('weather_forecast', 'employee', array['SELECT']); +select table_privs_are('weather_forecast', 'admin', array['SELECT', 'INSERT', 'UPDATE', 'DELETE']); +select table_privs_are('weather_forecast', 'authenticator', array[]::text[]); + +select has_column('weather_forecast', 'station_uri'); +select col_is_pk('weather_forecast', 'station_uri'); +select col_type_is('weather_forecast', 'station_uri', 'uri'); +select col_not_null('weather_forecast', 'station_uri'); +select col_hasnt_default('weather_forecast', 'station_uri'); + +select has_column('weather_forecast', 'forecasted_at'); +select col_type_is('weather_forecast', 'forecasted_at', 'timestamp with time zone'); +select col_not_null('weather_forecast', 'forecasted_at'); +select col_hasnt_default('weather_forecast', 'forecasted_at'); + +select has_column('weather_forecast', 'weather_condition_id'); +select col_type_is('weather_forecast', 'weather_condition_id', 'text'); +select col_not_null('weather_forecast', 'weather_condition_id'); +select col_hasnt_default('weather_forecast', 'weather_condition_id'); + +select has_column('weather_forecast', 'day_temperature'); +select col_type_is('weather_forecast', 'day_temperature', 'numeric(5,2)'); +select col_not_null('weather_forecast', 'day_temperature'); +select col_hasnt_default('weather_forecast', 'day_temperature'); + +select has_column('weather_forecast', 'min_temperature'); +select col_type_is('weather_forecast', 'min_temperature', 'numeric(5,2)'); +select col_not_null('weather_forecast', 'min_temperature'); +select col_hasnt_default('weather_forecast', 'min_temperature'); + +select has_column('weather_forecast', 'updated_at'); +select col_type_is('weather_forecast', 'updated_at', 'timestamp with time zone'); +select col_not_null('weather_forecast', 'updated_at'); +select col_hasnt_default('weather_forecast', 'updated_at'); + + +select * +from finish(); + +rollback; + diff --git a/verify/weather_forecast.sql b/verify/weather_forecast.sql new file mode 100644 index 0000000..ced15fe --- /dev/null +++ b/verify/weather_forecast.sql @@ -0,0 +1,14 @@ +-- Verify camper:weather_forecast on pg + +begin; + +select station_uri + , weather_condition_id + , day_temperature + , min_temperature + , forecasted_at + , updated_at +from camper.weather_forecast +where false; + +rollback; diff --git a/web/static/fonts/weathericons.woff2 b/web/static/fonts/weathericons.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..bb0c19ddfa700f04c76c942b7e04a65972c31fff GIT binary patch literal 44720 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 z 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 literal 0 HcmV?d00001 diff --git a/web/static/public.css b/web/static/public.css index cd5da8d..0163534 100644 --- a/web/static/public.css +++ b/web/static/public.css @@ -83,6 +83,14 @@ font-display: swap; } +@font-face { + font-family: 'weathericons'; + src: url('fonts/weathericons.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: swap; +} + *, *::before, *::after { box-sizing: inherit; } @@ -198,7 +206,7 @@ body > header { z-index: 9999; padding: 1rem 2.5rem; display: grid; - grid-template-columns: auto 1fr; + grid-template-columns: auto 1fr auto; align-items: center; justify-content: space-between; } @@ -287,6 +295,10 @@ h1 a .name { left: -9999em; } +body > header nav:last-of-type { + grid-column: span 2; +} + nav ul, .campsite_type_features ul, .campsite_features ul, .outside_activities > ul { list-style: none; padding-left: 0; @@ -435,10 +447,6 @@ nav:last-of-type > ul > li:last-child { nav:first-of-type { display: none; } - - body > header > address { - grid-column: 1 / span 2; - } } #content { @@ -1872,6 +1880,282 @@ dt { text-decoration: var(--accent) wavy underline; } +.weather-forecast { + display: inline-grid; + column-gap: 2ex; + row-gap: 0; + grid-template-columns: auto auto; + justify-content: end; + align-items: center; +} + +.weather-forecast span { + font-size: .95em; +} + +.weather-forecast time { + font-size: .6em; + text-transform: uppercase; +} + +.weather-forecast::before { + display: inline-block; + font-family: "weathericons" !important; + font-size: 1.6em; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + content: ''; + grid-row: 1 / 3; +} + +.weather-forecast.condition-200:before { + content: ""; +} + +.weather-forecast.condition-201:before { + content: ""; +} + +.weather-forecast.condition-202:before { + content: ""; +} + +.weather-forecast.condition-210:before { + content: ""; +} + +.weather-forecast.condition-211:before { + content: ""; +} + +.weather-forecast.condition-212:before { + content: ""; +} + +.weather-forecast.condition-221:before { + content: ""; +} + +.weather-forecast.condition-230:before { + content: ""; +} + +.weather-forecast.condition-231:before { + content: ""; +} + +.weather-forecast.condition-232:before { + content: ""; +} + +.weather-forecast.condition-300:before { + content: ""; +} + +.weather-forecast.condition-301:before { + content: ""; +} + +.weather-forecast.condition-302:before { + content: ""; +} + +.weather-forecast.condition-310:before { + content: ""; +} + +.weather-forecast.condition-311:before { + content: ""; +} + +.weather-forecast.condition-312:before { + content: ""; +} + +.weather-forecast.condition-313:before { + content: ""; +} + +.weather-forecast.condition-314:before { + content: ""; +} + +.weather-forecast.condition-321:before { + content: ""; +} + +.weather-forecast.condition-500:before { + content: ""; +} + +.weather-forecast.condition-501:before { + content: ""; +} + +.weather-forecast.condition-502:before { + content: ""; +} + +.weather-forecast.condition-503:before { + content: ""; +} + +.weather-forecast.condition-504:before { + content: ""; +} + +.weather-forecast.condition-511:before { + content: ""; +} + +.weather-forecast.condition-520:before { + content: ""; +} + +.weather-forecast.condition-521:before { + content: ""; +} + +.weather-forecast.condition-522:before { + content: ""; +} + +.weather-forecast.condition-531:before { + content: ""; +} + +.weather-forecast.condition-600:before { + content: ""; +} + +.weather-forecast.condition-601:before { + content: ""; +} + +.weather-forecast.condition-602:before { + content: ""; +} + +.weather-forecast.condition-611:before { + content: ""; +} + +.weather-forecast.condition-612:before { + content: ""; +} + +.weather-forecast.condition-615:before { + content: ""; +} + +.weather-forecast.condition-616:before { + content: ""; +} + +.weather-forecast.condition-620:before { + content: ""; +} + +.weather-forecast.condition-621:before { + content: ""; +} + +.weather-forecast.condition-622:before { + content: ""; +} + +.weather-forecast.condition-701:before { + content: ""; +} + +.weather-forecast.condition-711:before { + content: ""; +} + +.weather-forecast.condition-721:before { + content: ""; +} + +.weather-forecast.condition-731:before { + content: ""; +} + +.weather-forecast.condition-741:before { + content: ""; +} + +.weather-forecast.condition-761:before { + content: ""; +} + +.weather-forecast.condition-762:before { + content: ""; +} + +.weather-forecast.condition-771:before { + content: ""; +} + +.weather-forecast.condition-781:before { + content: ""; +} + +.weather-forecast.condition-800:before { + content: ""; +} + +.weather-forecast.condition-801:before { + content: ""; +} + +.weather-forecast.condition-802:before { + content: ""; +} + +.weather-forecast.condition-803:before { + content: ""; +} + +.weather-forecast.condition-804:before { + content: ""; +} + +.weather-forecast.condition-900:before { + content: ""; +} + +.weather-forecast.condition-901:before { + content: ""; +} + +.weather-forecast.condition-902:before { + content: ""; +} + +.weather-forecast.condition-903:before { + content: ""; +} + +.weather-forecast.condition-904:before { + content: ""; +} + +.weather-forecast.condition-905:before { + content: ""; +} + +.weather-forecast.condition-906:before { + content: ""; +} + +.weather-forecast.condition-957:before { + content: ""; +} + + /**/ dialog.redirect:modal { diff --git a/web/templates/public/layout.gohtml b/web/templates/public/layout.gohtml index ee486a8..540ac7d 100644 --- a/web/templates/public/layout.gohtml +++ b/web/templates/public/layout.gohtml @@ -30,6 +30,9 @@ {{ .Email }} {{- end }} + {{ with .WeatherForecast -}} + {{ dayOfWeek .ForecastedAt }} {{ .DayTemperature }} / {{ .MinTemperature }} + {{- end }} {{ if .LocalizedAlternates -}}