diff --git a/admin/db.go b/admin/db.go index 3537e7f..b3930bb 100644 --- a/admin/db.go +++ b/admin/db.go @@ -8,8 +8,8 @@ import ( sq "github.com/Masterminds/squirrel" ) -func SelectTable(table string, the_type reflect.Type, limit uint64, offset uint64) ([]reflect.Value, error) { - var results []reflect.Value +func SelectTable(table string, the_type reflect.Type, limit uint64, offset uint64) ([]interface{}, error) { + var results []interface{} sql_query, args, err := sq.Select("*").Limit(limit).Offset(offset).From(table).ToSql() if err != nil { return results, err } @@ -18,11 +18,11 @@ func SelectTable(table string, the_type reflect.Type, limit uint64, offset uint6 defer rows.Close() for rows.Next() { - the_data := reflect.New(the_type) - err = rows.StructScan(the_data.Interface()) + the_data := reflect.New(the_type).Interface() + err = rows.StructScan(the_data) if err != nil { return results, err } - results = append(results, the_data.Elem()) + results = append(results, the_data) } return results, rows.Err() diff --git a/admin/handlers.go b/admin/handlers.go index 6ef5b08..9296cfc 100644 --- a/admin/handlers.go +++ b/admin/handlers.go @@ -2,36 +2,85 @@ package admin import ( "maps" - "fmt" + "strconv" "github.com/gofiber/fiber/v2" "zedshaw.games/webapp/data" "zedshaw.games/webapp/api" ) -func GetPageIndex(c *fiber.Ctx) error { +func GetApiTableIndex(c *fiber.Ctx) error { var tables []string for k := range maps.Keys(data.Models()) { tables = append(tables, k) } - return c.Render("admin/index", fiber.Map{"Tables": tables}) + return c.JSON(tables) } -func GetPageTableIndex(c *fiber.Ctx) error { +func GetApiSelectAll(c *fiber.Ctx) error { table := c.Params("table") if table == "" { return c.Redirect("/admin/") } - fmt.Println("table: ", table) type_is := data.Models()[table] result, err := SelectTable(table, type_is, 20, 0); if err != nil { return api.IfErrNil(err, c) } - return c.Render("admin/table/index", fiber.Map{"Table": result}) + return c.JSON(result) +} + +func GetPageSelectAll(c *fiber.Ctx) error { + return c.Render("admin/table/contents", fiber.Map{"Table": c.Params("table")}) +} + +func GetApiSelectOne(c *fiber.Ctx) error { + table := c.Params("table") + id, err := strconv.ParseInt(c.Params("id"), 10, 64) + if err != nil { return api.IfErrNil(err, c) } + + type_is := data.Models()[table] + + result, err := Get(table, type_is, id) + if err != nil { return api.IfErrNil(err, c) } + + return c.JSON(result.Interface()) +} + +func GetPageSelectOne(c *fiber.Ctx) error { + table := c.Params("table") + id, err := strconv.ParseInt(c.Params("id"), 10, 64) + if err != nil { return api.IfErrNil(err, c) } + + return c.Render("admin/table/view", fiber.Map{ + "Table": table, + "Id": id, + }) +} + + +func PostApiUpdate(c *fiber.Ctx) error { + return c.JSON(fiber.Map{}) +} + +func PutApiInsert(c *fiber.Ctx) error { + return c.JSON(fiber.Map{}) +} + +func DeleteApi(c *fiber.Ctx) error { + return c.JSON(fiber.Map{}) } func Setup(app *fiber.App) { - app.Get("/admin/", GetPageIndex); - app.Get("/admin/table/:table/", GetPageTableIndex); + app.Get("/api/admin/table/", GetApiTableIndex) + + app.Get("/api/admin/table/:table/", GetApiSelectAll) + app.Get("/admin/table/:table/", GetPageSelectAll) + + app.Get("/api/admin/table/:table/:id/", GetApiSelectOne) + app.Get("/admin/table/:table/:id/", GetPageSelectOne) + + app.Post("/api/admin/table/:table/:id/", PostApiUpdate) + app.Put("/api/admin/table/:table/:id/", PutApiInsert) + app.Delete("/api/admin/table/:table/:id/", DeleteApi) } diff --git a/pages/admin/table/index.html b/pages/admin/table/index.html new file mode 100644 index 0000000..5dc131b --- /dev/null +++ b/pages/admin/table/index.html @@ -0,0 +1,19 @@ + + + +

Admin Rows

+ + + + + +
diff --git a/public/admin/table/index.html b/public/admin/table/index.html new file mode 100644 index 0000000..267ccd0 --- /dev/null +++ b/public/admin/table/index.html @@ -0,0 +1,63 @@ + + + + + + + + + + ZedShaw.games + + +
+ + + 🏡 + Live + Streams + Games + Register + Login + + +
+ + + + +

Admin Tables

+ + + + + +
+ + + + + diff --git a/tests/admin_test.go b/tests/admin_test.go index ea8aee6..e2d64f7 100644 --- a/tests/admin_test.go +++ b/tests/admin_test.go @@ -45,9 +45,9 @@ func TestAdminIndexPage(t *testing.T) { for i, row := range all_rows { fmt.Println("row", i, row) } assert.Equal(20, len(all_rows)) - first_row := all_rows[0] + first_row := all_rows[0].(*data.User) - result, err := admin.Get(table, model, first_row.FieldByName("Id").Int()) + result, err := admin.Get(table, model, int64(first_row.Id)) if err != nil { fmt.Println("ERROR", err) } fmt.Println("TABLE: ", result) diff --git a/views/admin/index.html b/views/admin/index.html deleted file mode 100644 index 55b97ce..0000000 --- a/views/admin/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - -

Admin Tables

- - - {{range $index, $element := .Tables}} - - {{ end }} - - -
diff --git a/views/admin/table/contents.html b/views/admin/table/contents.html new file mode 100644 index 0000000..00b2200 --- /dev/null +++ b/views/admin/table/contents.html @@ -0,0 +1,20 @@ + + + +

Admin Tables

+ + + + + +
diff --git a/views/admin/table/view.html b/views/admin/table/view.html new file mode 100644 index 0000000..2acdcea --- /dev/null +++ b/views/admin/table/view.html @@ -0,0 +1,15 @@ + + + +

Admin Tables

+ + + + + +
diff --git a/zed/web.go b/zed/web.go index 7d9b5b5..3ee1889 100644 --- a/zed/web.go +++ b/zed/web.go @@ -34,8 +34,14 @@ func RenderPages(pages_path string, target string, layout string) { prefixed_path := append([]string{target}, split_path...) target_path := filepath.Join(prefixed_path...) + _, err := os.Stat(target_path) - // compare time stamps and skip if not newer + if os.IsNotExist(err) { + log.Println("MAKING: ", "MAKE THE DAMN PATH NO FILE") + // os.MkdirAll(target_path, 0750) + } + + // TODO: compare time stamps and skip if not newer out, err := os.OpenFile(target_path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) if err != nil { return Fail(err, "writing file %s", target_path) }