From 0a392ac6396b4e6e57109d560b12e44d6b333c5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=81scar=20M=2E=20Lage?= Date: Fri, 18 Mar 2022 13:15:55 +0100 Subject: [PATCH 1/6] New skel (WIP) --- main.go | 16 ++++++++++++- model/{model.go => page.go} | 0 model/store.go | 46 ++++++------------------------------ model/store_file.go | 27 +++++++++++++++++++++ model/store_gorm.go | 47 +++++++++++++++++++++++++++++++++++++ model/store_lab.go | 26 ++++++++++++++++++++ server/server.go | 24 +++++++++++++++++-- views/base.html | 1 + 8 files changed, 145 insertions(+), 42 deletions(-) rename model/{model.go => page.go} (100%) create mode 100644 model/store_file.go create mode 100644 model/store_gorm.go create mode 100644 model/store_lab.go create mode 100644 views/base.html diff --git a/main.go b/main.go index eefe3ab..e90fba2 100644 --- a/main.go +++ b/main.go @@ -2,10 +2,24 @@ package main import ( "fmt" + "github.com/labstack/echo/v4" "github.com/oscarmlage/wikingo/server" + "html/template" + "io" ) +// Define the template registry struct +type TemplateRegistry struct { + templates *template.Template +} + +// Implement e.Renderer intercace +func (t *TemplateRegistry) Render(w io.Writer, name string, data interface{}, c echo.Context) error { + return t.templates.ExecuteTemplate(w, name, data) +} + func main() { - fmt.Println("Hola mundo") + fmt.Println("Starting wikingo...") + server.Serve() } diff --git a/model/model.go b/model/page.go similarity index 100% rename from model/model.go rename to model/page.go diff --git a/model/store.go b/model/store.go index 65c9f9c..135c770 100644 --- a/model/store.go +++ b/model/store.go @@ -1,42 +1,10 @@ package model -import ( - "fmt" - "gorm.io/driver/sqlite" - "gorm.io/gorm" -) - -type Store struct { - db *gorm.DB -} - -func (s *Store) Open() error { - var err error - - s.db, err = gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) - if err != nil { - return err - } - fmt.Printf("%s\n", s.db.Name()) - - // Migrate the Schema - s.db.AutoMigrate(&Page{}) - - // Create - s.addPage() - return nil -} - -func (s *Store) GetPage() Page { - var page Page - s.db.First(&page) - return page -} - -func (s *Store) addPage() { - s.db.Create(&Page{Code: "D55", Price: 200}) - fmt.Println("Page created") -} - -func getUser() { +// Store interface +type Store interface { + Open() error + AddPage() + GetPage() Page + GetAllPages() ([]Page, error) + Noexiste() } diff --git a/model/store_file.go b/model/store_file.go new file mode 100644 index 0000000..e8bb295 --- /dev/null +++ b/model/store_file.go @@ -0,0 +1,27 @@ +package model + +import ( + "fmt" +) + +type StoreFile struct { + db string + s Store +} + +func (s *StoreFile) Open() error { + fmt.Printf("File: Store Open") + return nil +} + +func (s *StoreFile) AddPage() { + fmt.Println("File: Page created") +} + +func (s *StoreFile) GetPage() { + fmt.Println("File: Get Page") +} + +func (s *StoreFile) GetAllPages() { + fmt.Println("File: Get All Pages") +} diff --git a/model/store_gorm.go b/model/store_gorm.go new file mode 100644 index 0000000..4303785 --- /dev/null +++ b/model/store_gorm.go @@ -0,0 +1,47 @@ +package model + +import ( + "fmt" + "gorm.io/driver/sqlite" + "gorm.io/gorm" +) + +type StoreGorm struct { + db *gorm.DB + store Store +} + +func (s *StoreGorm) Open() error { + var err error + + s.db, err = gorm.Open(sqlite.Open("test.db"), &gorm.Config{}) + if err != nil { + return err + } + fmt.Printf("%s\n", s.db.Name()) + + // Migrate the Schema + s.db.AutoMigrate(&Page{}) + + return nil +} + +func (s *StoreGorm) AddPage() { + s.db.Create(&Page{Code: "D55", Price: 200}) + fmt.Println("Page created") +} + +func (s *StoreGorm) GetPage() Page { + var page Page + s.db.First(&page) + return page +} + +func (s *StoreGorm) GetAllPages() ([]Page, error) { + var pages []Page + tx := s.db.Find(&pages) + if tx.Error != nil { + return []Page{}, tx.Error + } + return pages, nil +} diff --git a/model/store_lab.go b/model/store_lab.go new file mode 100644 index 0000000..9cf3379 --- /dev/null +++ b/model/store_lab.go @@ -0,0 +1,26 @@ +package model + +import ( + "fmt" +) + +type StoreLab struct { + db string + s Store +} + +func (s *StoreLab) Open() { + fmt.Printf("File: Store Open") +} + +func (s *StoreLab) AddPage() { + fmt.Println("File: Page created") +} + +func (s *StoreLab) GetPage() { + fmt.Println("File: Get Page") +} + +func (s *StoreLab) GetAllPages() { + fmt.Println("File: Get All Pages") +} diff --git a/server/server.go b/server/server.go index 89c9b6d..215ac40 100644 --- a/server/server.go +++ b/server/server.go @@ -8,19 +8,29 @@ import ( "net/http" ) -var store *model.Store +// Depending on config we should open one store or other (Gorm, File, +// Git...) +var ( + store model.StoreGorm +) func Serve() { - store = &model.Store{} + // Store instance err := store.Open() if err != nil { log.Panicln(err) } + + // Echo instance e := echo.New() + + // Routes e.GET("/", WikiHome) + e.GET("/list", WikiListPages) e.GET("/about", WikiAbout) e.GET("/about/:id", WikiAbout) + // Logger e.Logger.Fatal(e.Start(":2323")) } @@ -34,3 +44,13 @@ func WikiAbout(c echo.Context) error { id := c.Param("id") return c.String(http.StatusOK, "About the wiki. id:"+id) } + +func WikiListPages(c echo.Context) error { + fmt.Println("WikiListPages") + res, err := store.GetAllPages() + if err != nil { + log.Panicln(err) + } + fmt.Println(res) + return c.String(http.StatusOK, "WikiListPages") +} diff --git a/views/base.html b/views/base.html new file mode 100644 index 0000000..da62155 --- /dev/null +++ b/views/base.html @@ -0,0 +1 @@ +

Wikingo

From 285c40ccfc860fa4fbbae52c12f9638ffbc16f3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=81scar=20M=2E=20Lage?= Date: Fri, 18 Mar 2022 13:18:19 +0100 Subject: [PATCH 2/6] Delete not-working code, templates related Templates are still WIP --- main.go | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/main.go b/main.go index e90fba2..f6f5d59 100644 --- a/main.go +++ b/main.go @@ -2,22 +2,9 @@ package main import ( "fmt" - "github.com/labstack/echo/v4" "github.com/oscarmlage/wikingo/server" - "html/template" - "io" ) -// Define the template registry struct -type TemplateRegistry struct { - templates *template.Template -} - -// Implement e.Renderer intercace -func (t *TemplateRegistry) Render(w io.Writer, name string, data interface{}, c echo.Context) error { - return t.templates.ExecuteTemplate(w, name, data) -} - func main() { fmt.Println("Starting wikingo...") From 7cc78a118f1b0389acfe43c4588c7cc8dbc56c68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=81scar=20M=2E=20Lage?= Date: Fri, 18 Mar 2022 13:22:50 +0100 Subject: [PATCH 3/6] Fixes some wrong prints --- model/store_lab.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/model/store_lab.go b/model/store_lab.go index 9cf3379..a334605 100644 --- a/model/store_lab.go +++ b/model/store_lab.go @@ -10,17 +10,17 @@ type StoreLab struct { } func (s *StoreLab) Open() { - fmt.Printf("File: Store Open") + fmt.Printf("Lab: Store Open") } func (s *StoreLab) AddPage() { - fmt.Println("File: Page created") + fmt.Println("Lab: Page created") } func (s *StoreLab) GetPage() { - fmt.Println("File: Get Page") + fmt.Println("Lab: Get Page") } func (s *StoreLab) GetAllPages() { - fmt.Println("File: Get All Pages") + fmt.Println("Lab: Get All Pages") } From 5685d2580a29a75e401f0ff5c1196bc00cd2f492 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=81scar=20M=2E=20Lage?= Date: Fri, 18 Mar 2022 13:26:13 +0100 Subject: [PATCH 4/6] Refactor: Moving route methods from server.go to app.go --- server/app.go | 29 +++++++++++++++++++++++++++++ server/server.go | 23 ----------------------- 2 files changed, 29 insertions(+), 23 deletions(-) create mode 100644 server/app.go diff --git a/server/app.go b/server/app.go new file mode 100644 index 0000000..4fd02ad --- /dev/null +++ b/server/app.go @@ -0,0 +1,29 @@ +package server + +import ( + "fmt" + "github.com/labstack/echo/v4" + "log" + "net/http" +) + +func WikiHome(c echo.Context) error { + res := store.GetPage() + fmt.Println(res) + return c.String(http.StatusOK, "WikiHome") +} + +func WikiAbout(c echo.Context) error { + id := c.Param("id") + return c.String(http.StatusOK, "About the wiki. id:"+id) +} + +func WikiListPages(c echo.Context) error { + fmt.Println("WikiListPages") + res, err := store.GetAllPages() + if err != nil { + log.Panicln(err) + } + fmt.Println(res) + return c.String(http.StatusOK, "WikiListPages") +} diff --git a/server/server.go b/server/server.go index 215ac40..2d65c28 100644 --- a/server/server.go +++ b/server/server.go @@ -1,11 +1,9 @@ package server import ( - "fmt" "github.com/labstack/echo/v4" "github.com/oscarmlage/wikingo/model" "log" - "net/http" ) // Depending on config we should open one store or other (Gorm, File, @@ -33,24 +31,3 @@ func Serve() { // Logger e.Logger.Fatal(e.Start(":2323")) } - -func WikiHome(c echo.Context) error { - res := store.GetPage() - fmt.Println(res) - return c.String(http.StatusOK, "WikiHome") -} - -func WikiAbout(c echo.Context) error { - id := c.Param("id") - return c.String(http.StatusOK, "About the wiki. id:"+id) -} - -func WikiListPages(c echo.Context) error { - fmt.Println("WikiListPages") - res, err := store.GetAllPages() - if err != nil { - log.Panicln(err) - } - fmt.Println(res) - return c.String(http.StatusOK, "WikiListPages") -} From 4f7b3aa42a058f4e8253f6763243d62567fc0dec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=81scar=20M=2E=20Lage?= Date: Fri, 18 Mar 2022 23:36:01 +0100 Subject: [PATCH 5/6] Fix the interface --- model/store.go | 1 - 1 file changed, 1 deletion(-) diff --git a/model/store.go b/model/store.go index 135c770..1f7984d 100644 --- a/model/store.go +++ b/model/store.go @@ -6,5 +6,4 @@ type Store interface { AddPage() GetPage() Page GetAllPages() ([]Page, error) - Noexiste() } From aafe5c6249ee3f7513b541d239f4f6e29fcd7999 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?O=CC=81scar=20M=2E=20Lage?= Date: Fri, 18 Mar 2022 23:36:26 +0100 Subject: [PATCH 6/6] Instance Store properly. Interface by default, then the custom one. --- server/server.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/server/server.go b/server/server.go index 2d65c28..6b72265 100644 --- a/server/server.go +++ b/server/server.go @@ -6,14 +6,16 @@ import ( "log" ) -// Depending on config we should open one store or other (Gorm, File, -// Git...) var ( - store model.StoreGorm + store model.Store ) func Serve() { + // Store instance + // Depending on config we should open one store or other + // (Gorm, File, Git...) + store = new(model.StoreGorm) err := store.Open() if err != nil { log.Panicln(err)