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
+
+
+
+
+