diff --git a/main.go b/main.go index eefe3ab..f6f5d59 100644 --- a/main.go +++ b/main.go @@ -6,6 +6,7 @@ import ( ) 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..1f7984d 100644 --- a/model/store.go +++ b/model/store.go @@ -1,42 +1,9 @@ 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) } 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..a334605 --- /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("Lab: Store Open") +} + +func (s *StoreLab) AddPage() { + fmt.Println("Lab: Page created") +} + +func (s *StoreLab) GetPage() { + fmt.Println("Lab: Get Page") +} + +func (s *StoreLab) GetAllPages() { + fmt.Println("Lab: Get All Pages") +} 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 89c9b6d..6b72265 100644 --- a/server/server.go +++ b/server/server.go @@ -1,36 +1,35 @@ package server import ( - "fmt" "github.com/labstack/echo/v4" "github.com/oscarmlage/wikingo/model" "log" - "net/http" ) -var store *model.Store +var ( + store model.Store +) func Serve() { - store = &model.Store{} + + // 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) } + + // 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")) } - -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) -} 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