From b7a581549b485b56b7131bbf1835e63c18728659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=81scar=20M=2E=20Lage?= Date: Mon, 4 Apr 2022 22:16:07 +0200 Subject: [PATCH] Add: Page version list --- TODO.md | 1 + model/store.go | 1 + model/store_gorm.go | 11 ++++++++++- server/app.go | 14 ++++++++++++++ server/server.go | 1 + templates/list.html | 6 +++++- templates/page.html | 3 +++ 7 files changed, 35 insertions(+), 2 deletions(-) diff --git a/TODO.md b/TODO.md index 8fd3d1f..4c002c8 100644 --- a/TODO.md +++ b/TODO.md @@ -6,6 +6,7 @@ - [x] Flag that sets the debug mode - [x] Flag to show the version - [x] Page versioning in a really basic way +- [x] Version listing - [x] Makefile helper - [ ] CI (gofmt, golint, more)? diff --git a/model/store.go b/model/store.go index c443fbf..9b11067 100644 --- a/model/store.go +++ b/model/store.go @@ -8,4 +8,5 @@ type Store interface { GetPage(string) (Page, error) GetPageVersion(string, string) (Page, error) GetAllPages() ([]Page, error) + GetPageHistory(name string) ([]Page, error) } diff --git a/model/store_gorm.go b/model/store_gorm.go index b6fa351..edb618b 100644 --- a/model/store_gorm.go +++ b/model/store_gorm.go @@ -65,7 +65,16 @@ func (s *StoreGorm) GetPageVersion(name string, version string) (Page, error) { func (s *StoreGorm) GetAllPages() ([]Page, error) { var pages []Page - tx := s.db.Find(&pages) + tx := s.db.Select("*, max(Version)").Group("Name").Find(&pages) + if tx.Error != nil { + return []Page{}, tx.Error + } + return pages, nil +} + +func (s *StoreGorm) GetPageHistory(name string) ([]Page, error) { + var pages []Page + tx := s.db.Debug().Where("Name = ?", name).Order("Version desc").Find(&pages) if tx.Error != nil { return []Page{}, tx.Error } diff --git a/server/app.go b/server/app.go index d19e25e..25795a7 100644 --- a/server/app.go +++ b/server/app.go @@ -100,6 +100,20 @@ func WikiPagePostEdit(c echo.Context) error { return c.Redirect(http.StatusMovedPermanently, "/"+page.Name) } +func WikiPageHistory(c echo.Context) error { + page_id := c.Param("page") + pages, err := store.GetPageHistory(page_id) + if err != nil { + log.Panicln(err) + } + Debug.Printf("res: %T\n", pages) + // Debug.Println(pages) + return c.Render(http.StatusOK, "list.html", map[string]interface{}{ + "title": page_id, + "pages": pages, + }) +} + func WikiList(c echo.Context) error { pages, err := store.GetAllPages() if err != nil { diff --git a/server/server.go b/server/server.go index feb9e8f..307db58 100644 --- a/server/server.go +++ b/server/server.go @@ -68,6 +68,7 @@ func Serve() { e.GET("/:page", WikiPage) e.GET("/:page/:version", WikiPage) e.GET("/:page/edit", WikiPageEdit) + e.GET("/:page/history", WikiPageHistory) e.GET("/:page/:version/edit", WikiPageEdit) e.POST("/:page/edit", WikiPagePostEdit) e.POST("/:page/:version/edit", WikiPagePostEdit) diff --git a/templates/list.html b/templates/list.html index a3f9e5c..f6a3ae0 100644 --- a/templates/list.html +++ b/templates/list.html @@ -3,10 +3,14 @@ {{end}} {{define "body"}} + {{ if .title }} +

{{ .title }}

+ {{ else }}

List

+ {{ end }} {{end}} diff --git a/templates/page.html b/templates/page.html index fc15fe9..ba726c7 100644 --- a/templates/page.html +++ b/templates/page.html @@ -7,6 +7,9 @@ {{ .html | safeHTML }}
Edit + {{ if gt .page.Version 1 }} + History + {{ end }}

Last modified: {{ .page.UpdatedAt }}

*{{ .page.Version }}*

{{end}}