diff --git a/database/persons.go b/database/persons.go new file mode 100644 index 0000000..2735458 --- /dev/null +++ b/database/persons.go @@ -0,0 +1,67 @@ +package database + +import ( + "context" + "github.com/gin-gonic/gin" + "github.com/jackc/pgx/v4/pgxpool" + "log" + "trikotwaschliste/models" +) + +func DbPersons(pool *pgxpool.Pool) gin.H { + var items []models.PersonListItem + var persons []models.Person + + // Get items + witems, err := pool.Query(context.Background(), "SELECT pe.name, count(pe.name)\nFROM washlist wa\nINNER JOIN persons pe ON wa.washed = pe.id\nGROUP BY pe.name\nORDER BY pe.name ASC") + if err != nil { + log.Println(err.Error()) + } + + var item models.PersonListItem + for witems.Next() { + err = witems.Scan(&item.Name, &item.Count) + if err != nil { + log.Println("Items: " + err.Error()) + } + items = append(items, item) + } + + + // Get full persons list + wpersons, err := pool.Query(context.Background(), "SELECT id, name FROM persons ORDER BY name ASC") + if err != nil { + log.Println(err.Error()) + } + + var person models.Person + for wpersons.Next() { + err = wpersons.Scan(&person.Id, &person.Name) + if err != nil { + log.Println("Persons: " + err.Error()) + } + persons = append(persons, person) + } + + // Merge the list in n^2 + var merge []models.PersonListItem + merge = append(merge, items...) + for _, p := range persons { + found := false + for _, it := range items { + if p.Name == it.Name { + found = true + break + } + } + if !found { + merge = append(merge, models.PersonListItem{ + Name: p.Name, + Count: 0, + }) + } + } + + return gin.H{"items": merge} +} + diff --git a/handler/persons.go b/handler/persons.go new file mode 100644 index 0000000..7ba6578 --- /dev/null +++ b/handler/persons.go @@ -0,0 +1,15 @@ +package handler + +import ( + "github.com/gin-gonic/gin" + "github.com/jackc/pgx/v4/pgxpool" + "net/http" + "trikotwaschliste/database" +) + +func ShowPersonsList(pool *pgxpool.Pool) gin.HandlerFunc { + return func(c *gin.Context) { + c.HTML(http.StatusAccepted, "persons.html", database.DbPersons(pool)) + } +} + diff --git a/html/persons/persons.html b/html/persons/persons.html new file mode 100644 index 0000000..923f62e --- /dev/null +++ b/html/persons/persons.html @@ -0,0 +1,34 @@ + + + + + Trikotwaschliste + + + + +{{template "navbar"}} +
+

Trikotwaschliste

+ + + + + + + + + {{ $items := .items}} + {{range $item := $items}} + + + + + {{end}} + +
PersonWaschgänge
{{$item.Name}}{{$item.Count}}
+ +
+ + + \ No newline at end of file diff --git a/html/static/navbar.html b/html/static/navbar.html index 0ac480c..27a5dc7 100644 --- a/html/static/navbar.html +++ b/html/static/navbar.html @@ -1,7 +1,7 @@ {{define "navbar"}}