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}}
+
-
+
-
+
@@ -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}}
+
+
+
+
+
+
+
+ |
+
+ {{$gamemode.Name}}
+ |
+
+ Map
+ |
+
+ Players
+ |
+
+
+
+
+ {{range $server := $servers}}
+ {{if eq $gamemode.ID $server.GamemodeID}}
+
+
+ {{range $flag := $flags}}
+ {{if eq $server.ServerIP $flag.ServerIP}}
+
+ {{end}}
+ {{end}}
+ |
+
+
+ |
+
+ {{$server.Map}}
+ |
+
+ {{$server.Players}}/{{$server.MaxPlayers}}
+ |
+
+ {{end}}
+ {{end}}
+
+
+
+
+ {{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,
})
}