package admin import ( "maps" "reflect" "fmt" "github.com/gofiber/fiber/v2" "zedshaw.games/webapp/data" . "zedshaw.games/webapp/common" ) func GetApiTableIndex(c *fiber.Ctx) error { var tables []string for k := range maps.Keys(data.Models()) { tables = append(tables, k) } return c.JSON(tables) } func GetApiSelectAll(c *fiber.Ctx) error { table := c.Params("table") if table == "" { return c.Redirect("/admin/table/") } type_is := data.Models()[table] page := c.QueryInt("page", 0) fmt.Println("-------------------------", page) if page < 0 { page = 0 } result, err := SelectTable(table, type_is, 20, uint64(page)); if err != nil { return IfErrNil(err, c) } 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 := c.ParamsInt("id", -1) if err != nil || id < 0 { return IfErrNil(err, c) } type_is := data.Models()[table] result, err := Get(table, type_is, int64(id)) if err != nil { return IfErrNil(err, c) } return c.JSON(result.Interface()) } func GetPageSelectOne(c *fiber.Ctx) error { table := c.Params("table") id, err := c.ParamsInt("id", -1) if err != nil || id < 0 { return IfErrNil(err, c) } return c.Render("admin/table/view", fiber.Map{ "Table": table, "Id": id, }) } func PostApiUpdate(c *fiber.Ctx) error { table := c.Params("table") typeOf := data.Models()[table] obj, err := ReflectOnPost(typeOf, c) if err != nil { return IfErrNil(err, c) } err = Update(table, obj.Elem()) if err != nil { return IfErrNil(err, c) } return c.RedirectBack("/admin/table/", 303) } func GetPageInsert(c *fiber.Ctx) error { table := c.Params("table") return c.Render("admin/table/new", fiber.Map{ "Table": table }) } func GetApiInsert(c *fiber.Ctx) error { table := c.Params("table") typeOf := data.Models()[table] result := reflect.New(typeOf) return c.JSON(result.Interface()) } func PostApiInsert(c *fiber.Ctx) error { table := c.Params("table") typeOf := data.Models()[table] obj, err := ReflectOnPost(typeOf, c) if err != nil { return IfErrNil(err, c) } id, _, err := Insert(table, obj.Elem()) if err != nil { return IfErrNil(err, c) } return c.Redirect(fmt.Sprintf("/admin/table/%s/%d/", table, id), 303) } func DeleteApi(c *fiber.Ctx) error { table := c.Params("table") id, err := c.ParamsInt("id", -1) if err != nil || id < 0 { return IfErrNil(err, c) } err = Delete(table, int64(id)) if err != nil { return IfErrNil(err, c) } return c.JSON(fiber.Map{}) } func Setup(app *fiber.App) { app.Get("/admin/table/", Page("admin/table/index")) app.Get("/api/admin/table/", GetApiTableIndex) app.Get("/api/admin/table/:table/", GetApiSelectAll) app.Get("/admin/table/:table/", GetPageSelectAll) app.Get("/admin/new/table/:table/", GetPageInsert) app.Get("/api/admin/new/table/:table/", GetApiInsert) app.Post("/api/admin/new/table/:table/", PostApiInsert) app.Get("/api/admin/table/:table/:id/", GetApiSelectOne) app.Get("/admin/table/:table/:id/", GetPageSelectOne) app.Post("/api/admin/table/:table/:id/", PostApiUpdate) app.Delete("/api/admin/table/:table/:id/", DeleteApi) }