From 011619d3c3d38256c75e684f2caec3a0bd00025b Mon Sep 17 00:00:00 2001 From: structix Date: Fri, 9 Oct 2020 15:10:13 +0200 Subject: [PATCH] Add migrations --- database/mainpage.go | 35 +++++++++++++++++-- .../20100830202_washlistperson.down.psql | 3 ++ .../20100830202_washlistperson.up.psql | 4 +++ handler/mainpage.go | 10 ++++++ html/mainpage/index.html | 28 ++++++++++++--- models/person.go | 6 ++++ models/washitem.go | 3 +- routes/routes.go | 1 + 8 files changed, 81 insertions(+), 9 deletions(-) create mode 100644 database/migrations/20100830202_washlistperson.down.psql create mode 100644 database/migrations/20100830202_washlistperson.up.psql create mode 100644 models/person.go diff --git a/database/mainpage.go b/database/mainpage.go index 6f0781e..3229318 100644 --- a/database/mainpage.go +++ b/database/mainpage.go @@ -5,25 +5,54 @@ import ( "github.com/gin-gonic/gin" "github.com/jackc/pgx/v4/pgxpool" "log" + "strconv" "trikotwaschliste/models" ) func DbMainpage(pool *pgxpool.Pool) gin.H { var items []models.Washlist + var persons []models.Person - witems, err := pool.Query(context.Background(), "SELECT pe.name, ga.created_at, wa.washed \nFROM washlist wa\nINNER JOIN persons pe ON wa.personid = pe.id\nINNER JOIN gamedata ga ON wa.gamedataid = ga.id") + witems, err := pool.Query(context.Background(), "SELECT wa.id, pe.name, ga.created_at, wa.washed \nFROM washlist wa\nINNER JOIN persons pe ON wa.personid = pe.id\nINNER JOIN gamedata ga ON wa.gamedataid = ga.id") if err != nil { log.Println(err.Error()) } var item models.Washlist for witems.Next() { - err = witems.Scan(&item.Person, &item.Date, &item.IsWashed) + err = witems.Scan(&item.Id, &item.Person, &item.Date, &item.Washed) if err != nil { log.Println(err.Error()) } items = append(items, item) } - return gin.H{"items": items} + // get persons + wperson, err := pool.Query(context.Background(), "SELECT id, name FROM persons") + if err != nil { + log.Println(err.Error()) + } + + var person models.Person + for wperson.Next() { + err = wperson.Scan(&person.Id, &person.Name) + if err != nil { + log.Println(err.Error()) + } + persons = append(persons, person) + } + + + return gin.H{"items": items, "persons": persons} +} + +func UploadName(pool *pgxpool.Pool, id, washID string) bool { + sID, _ := strconv.Atoi(id) + if sID <= 0 { + return false + } + + pool.Exec(context.Background(), "UPDATE washlist SET washed = $1 WHERE id = $2", id, washID) + + return true } diff --git a/database/migrations/20100830202_washlistperson.down.psql b/database/migrations/20100830202_washlistperson.down.psql new file mode 100644 index 0000000..5ae088a --- /dev/null +++ b/database/migrations/20100830202_washlistperson.down.psql @@ -0,0 +1,3 @@ +-- +-- DROP/Reverse everything here +-- \ No newline at end of file diff --git a/database/migrations/20100830202_washlistperson.up.psql b/database/migrations/20100830202_washlistperson.up.psql new file mode 100644 index 0000000..7436879 --- /dev/null +++ b/database/migrations/20100830202_washlistperson.up.psql @@ -0,0 +1,4 @@ +ALTER TABLE public.washlist + ALTER COLUMN washed TYPE character varying(100); +ALTER TABLE public.washlist + ALTER COLUMN washed DROP NOT NULL; \ No newline at end of file diff --git a/handler/mainpage.go b/handler/mainpage.go index d543d57..e800f04 100644 --- a/handler/mainpage.go +++ b/handler/mainpage.go @@ -12,3 +12,13 @@ func MainPage(pool *pgxpool.Pool) gin.HandlerFunc { c.HTML(http.StatusAccepted, "index.html", database.DbMainpage(pool)) } } + +func UploadName(pool *pgxpool.Pool) gin.HandlerFunc { + return func(c *gin.Context) { + selectedID := c.PostForm("names") + washID := c.PostForm("washid") + + database.UploadName(pool, selectedID, washID) + c.Redirect(302, "/") + } +} diff --git a/html/mainpage/index.html b/html/mainpage/index.html index ef76986..683b55e 100644 --- a/html/mainpage/index.html +++ b/html/mainpage/index.html @@ -9,21 +9,39 @@ {{template "navbar"}}
-

Trikotwaschliste Version: {{ .version }}

+

Trikotwaschliste

+ - {{range .items}} + {{ $items := .items}} + {{ $persons := .persons}} + {{range $item := $items}} - - - + + + + {{end}} diff --git a/models/person.go b/models/person.go new file mode 100644 index 0000000..a595106 --- /dev/null +++ b/models/person.go @@ -0,0 +1,6 @@ +package models + +type Person struct { + Id int `json:"id"` + Name string `json:"name"` +} diff --git a/models/washitem.go b/models/washitem.go index 52f8c1b..a2e63d6 100644 --- a/models/washitem.go +++ b/models/washitem.go @@ -3,7 +3,8 @@ package models import "time" type Washlist struct { + Id int `json:"id"` Person string `json:"person"` Date time.Time `json:"date"` - IsWashed bool `json:"iswashed"` + Washed string `json:"iswashed"` } diff --git a/routes/routes.go b/routes/routes.go index 8a48c22..22dfa7c 100644 --- a/routes/routes.go +++ b/routes/routes.go @@ -8,4 +8,5 @@ import ( func RoutesInit(router *gin.Engine, pool *pgxpool.Pool) { router.GET("/", handler.MainPage(pool)) + router.POST("/uploadname", handler.UploadName(pool)) }
Person Datum Gewaschen?Waschperson
{{.Person}}{{.Date}}{{.IsWashed}}{{$item.Person}}{{$item.Date}}{{$item.Washed}} +
+
+ + + +
+
+ +