From 47a14e6b82792910460cede2ed0618b9b74122d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20B=C3=B6hm?= Date: Fri, 24 Sep 2021 13:19:44 +0200 Subject: [PATCH] fixed displaying empty tables --- cmd/main.go | 3 +- postgres/gamemode_store.go | 13 ++++ steamServer.go | 6 ++ templates/home.html | 10 +-- templates/region.html | 127 +++++++++++++++++++++++++++++++++++++ web/handler.go | 120 +++++++++++++++++++++++++++++++++-- 6 files changed, 268 insertions(+), 11 deletions(-) create mode 100644 templates/region.html diff --git a/cmd/main.go b/cmd/main.go index 5c8bd23..dbf72ec 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -12,14 +12,13 @@ import ( ) func main() { - dsn := "postgres://postgres:secret@localhost:5432/postgres?sslmode=disable" + dsn := "postgres://postgres:secret@postgres:5432/postgres?sslmode=disable" store, err := postgres.NewStore(dsn) if err != nil { log.Fatal(err) } - ss, err := store.Servers() if err != nil { log.Fatal("There is an issue with the databse: %w", err) diff --git a/postgres/gamemode_store.go b/postgres/gamemode_store.go index 70b8420..17071d3 100644 --- a/postgres/gamemode_store.go +++ b/postgres/gamemode_store.go @@ -5,6 +5,7 @@ import ( "git.snrd.de/Spaenny/steamServer" "github.com/jmoiron/sqlx" + "github.com/google/uuid" ) type GamemodeStore struct { @@ -27,3 +28,15 @@ func (s *GamemodeStore) Gamemodes() ([]steamServer.Gamemode, error) { } return gg, nil } + +func (s *GamemodeStore) GamemodeCount(region_id uuid.UUID) ([]steamServer.GamemodeCount, error) { + var c []steamServer.GamemodeCount + var query = `SELECT DISTINCT servers.gamemode_id, COUNT(DISTINCT servers.id) + FROM servers, gamemodes + WHERE servers.region_id = $1 + GROUP BY servers.gamemode_id` + if err := s.Select(&c, query, region_id); err != nil { + return c, fmt.Errorf("error getting gamemode count: %w", err) + } + return c, nil +} diff --git a/steamServer.go b/steamServer.go index 83821eb..da59ea1 100644 --- a/steamServer.go +++ b/steamServer.go @@ -31,6 +31,11 @@ type Flag struct { Flag string `db:"flag"` } +type GamemodeCount struct { + ID uuid.UUID `db:"gamemode_id"` + Count int `db:"count"` +} + type ServerStore interface { Server(id uuid.UUID) (Server, error) Servers() ([]Server, error) @@ -48,6 +53,7 @@ type RegionStore interface { type GamemodeStore interface { Gamemode(name string) (Gamemode, error) Gamemodes() ([]Gamemode, error) + GamemodeCount(region_id uuid.UUID) ([]GamemodeCount, error) } type FlagStore interface { diff --git a/templates/home.html b/templates/home.html index ab59725..bcb43de 100644 --- a/templates/home.html +++ b/templates/home.html @@ -1,7 +1,9 @@ + Serverlist :: {{.Region}} + - +
- +

Asia

@@ -89,7 +91,7 @@ {{range $flag := $flags}} {{if eq $server.ServerIP $flag.ServerIP}} - + {{end}} {{end}} diff --git a/templates/region.html b/templates/region.html new file mode 100644 index 0000000..0bf3c37 --- /dev/null +++ b/templates/region.html @@ -0,0 +1,127 @@ + + Serverlist :: {{.Region}} + + + + + + + + +
+ + + + + + + {{ $gamemodes := .Gamemodes}} + {{ $gamemodesCount := .GamemodeCount}} + {{ $servers := .Servers}} + {{ $flags := .Flags}} +
+
+
+

{{.Region}}

+
+ {{range $gamemode := $gamemodes}} + {{range $gamemodeCount := $gamemodesCount}} + {{if eq $gamemode.ID $gamemodeCount.ID}} +
+
+ + + + + + + + + + + + {{range $server := $servers}} + {{if eq $gamemode.ID $server.GamemodeID}} + + + + + + + {{end}} + {{end}} + +
+ + + {{$gamemode.Name}} + + Map + + Players +
+ {{range $flag := $flags}} + {{if eq $server.ServerIP $flag.ServerIP}} + + {{end}} + {{end}} + + + +

{{$server.Map}}

+
+

{{$server.Players}}/{{$server.MaxPlayers}}

+
+
+
+ {{end}} + {{end}} + {{end}} +
+
+ + diff --git a/web/handler.go b/web/handler.go index 4d8e40f..7530834 100644 --- a/web/handler.go +++ b/web/handler.go @@ -20,6 +20,8 @@ func NewHandler(store steamServer.Store) *Handler { h.Get("/", h.Home()) h.Get("/europe", h.Europe()) h.Get("/america", h.America()) + h.Get("/australia", h.Australia()) + h.Get("/asia", h.Asia()) return h } @@ -58,7 +60,7 @@ func (h *Handler) Home() http.HandlerFunc { } tmpl.Execute(w, data { - Region: "All Regions - Serverlist", + Region: "All Regions", Servers: ss, Gamemodes: gg, Flags: ff, @@ -71,10 +73,11 @@ func (h *Handler) Europe() http.HandlerFunc { Region string Servers []steamServer.Server Gamemodes []steamServer.Gamemode + GamemodeCount []steamServer.GamemodeCount Flags []steamServer.Flag } - tmpl := template.Must(template.ParseFiles("templates/home.html")) + tmpl := template.Must(template.ParseFiles("templates/region.html")) return func(w http.ResponseWriter, r *http.Request) { reg, err := h.store.Region("Europe") if err != nil { @@ -97,27 +100,32 @@ func (h *Handler) Europe() http.HandlerFunc { if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } + + c, err := h.store.GamemodeCount(reg.ID) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } tmpl.Execute(w, data { Region: "Europe", Servers: ss, Gamemodes: gg, + GamemodeCount: c, Flags: ff, }) } } - - func (h *Handler) America() http.HandlerFunc { type data struct { Region string Servers []steamServer.Server Gamemodes []steamServer.Gamemode + GamemodeCount []steamServer.GamemodeCount Flags []steamServer.Flag } - tmpl := template.Must(template.ParseFiles("templates/home.html")) + tmpl := template.Must(template.ParseFiles("templates/region.html")) return func(w http.ResponseWriter, r *http.Request) { reg, err := h.store.Region("North America") if err != nil { @@ -141,10 +149,112 @@ func (h *Handler) America() http.HandlerFunc { http.Error(w, err.Error(), http.StatusInternalServerError) } + c, err := h.store.GamemodeCount(reg.ID) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + tmpl.Execute(w, data { Region: "North America", Servers: ss, Gamemodes: gg, + GamemodeCount: c, + Flags: ff, + }) + } +} + +func (h *Handler) Asia() http.HandlerFunc { + type data struct { + Region string + Servers []steamServer.Server + Gamemodes []steamServer.Gamemode + GamemodeCount []steamServer.GamemodeCount + Flags []steamServer.Flag + } + + tmpl := template.Must(template.ParseFiles("templates/region.html")) + return func(w http.ResponseWriter, r *http.Request) { + reg, err := h.store.Region("Asia") + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + gg, err := h.store.Gamemodes() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + + ss, err := h.store.ServersByRegion(reg.ID) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + ff, err := h.store.Flags() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + + c, err := h.store.GamemodeCount(reg.ID) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + + tmpl.Execute(w, data { + Region: "Asia", + Servers: ss, + Gamemodes: gg, + GamemodeCount: c, + Flags: ff, + }) + } +} + +func (h *Handler) Australia() http.HandlerFunc { + type data struct { + Region string + Servers []steamServer.Server + Gamemodes []steamServer.Gamemode + GamemodeCount []steamServer.GamemodeCount + Flags []steamServer.Flag + } + + tmpl := template.Must(template.ParseFiles("templates/region.html")) + return func(w http.ResponseWriter, r *http.Request) { + reg, err := h.store.Region("Australia") + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + gg, err := h.store.Gamemodes() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + + ss, err := h.store.ServersByRegion(reg.ID) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + + ff, err := h.store.Flags() + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + + c, err := h.store.GamemodeCount(reg.ID) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + + tmpl.Execute(w, data { + Region: "Australia", + Servers: ss, + Gamemodes: gg, + GamemodeCount: c, Flags: ff, }) }