Initial setup of an admin page that dynamically reflects the DB to create the CRUD stuff.

main
Zed A. Shaw 5 days ago
parent 02910b8b93
commit 859e3ad0e3
  1. 4
      Makefile
  2. 7
      admin/handlers.go
  3. 10
      data/models.go
  4. 4
      main.go
  5. 23
      tests/admin_test.go
  6. 1
      views/admin/index.html

@ -15,6 +15,10 @@ test: site
go test zedshaw.games/webapp/tests -c -o runtests$(GO_IS_STUPID_EXE) go test zedshaw.games/webapp/tests -c -o runtests$(GO_IS_STUPID_EXE)
./runtests$(GO_IS_STUPID_EXE) ./runtests$(GO_IS_STUPID_EXE)
test_only:
go test zedshaw.games/webapp/tests -c -o runtests$(GO_IS_STUPID_EXE)
./runtests$(GO_IS_STUPID_EXE) -test.run TestAdminIndexPage
migrate_up: migrate_up:
go tool goose sqlite3 db.sqlite3 -dir migrations up go tool goose sqlite3 db.sqlite3 -dir migrations up

@ -1,10 +1,13 @@
package admin package admin
import (
"github.com/gofiber/fiber/v2"
)
func GetPageIndex(c *fiber.Ctx) error { func GetPageIndex(c *fiber.Ctx) error {
c.Render("admin/index", fiber.Map{}) return c.Render("admin/index", fiber.Map{})
} }
func Setup(app *fiber.App) { func Setup(app *fiber.App) {
app.Get("/admin/", GetIndex); app.Get("/admin/", GetPageIndex);
} }

@ -1,5 +1,7 @@
package data package data
import "reflect"
type Login struct { type Login struct {
Username string `db:"username" validate:"required,max=30"` Username string `db:"username" validate:"required,max=30"`
Password string `db:"password" validate:"required,max=128"` Password string `db:"password" validate:"required,max=128"`
@ -23,3 +25,11 @@ type Stream struct {
Title string `db:"title" json:"title"` Title string `db:"title" json:"title"`
Description string `db:"description" json:"description"` Description string `db:"description" json:"description"`
} }
func Models() map[string]reflect.Type {
return map[string]reflect.Type{
"stream": reflect.TypeFor[Stream](),
"stream_link": reflect.TypeFor[Link](),
"user": reflect.TypeFor[User](),
}
}

@ -15,6 +15,7 @@ import (
"zedshaw.games/webapp/api" "zedshaw.games/webapp/api"
"zedshaw.games/webapp/data" "zedshaw.games/webapp/data"
"zedshaw.games/webapp/config" "zedshaw.games/webapp/config"
"zedshaw.games/webapp/admin"
) )
func main() { func main() {
@ -36,8 +37,9 @@ func main() {
app.Use(logger.New()) app.Use(logger.New())
app.Use(recov.New()) app.Use(recov.New())
api.Setup(app)
data.Setup(config.Settings.Database.Driver, config.Settings.Database.Url) data.Setup(config.Settings.Database.Driver, config.Settings.Database.Url)
api.Setup(app)
admin.Setup(app)
// this sets up graceful shutdown // this sets up graceful shutdown
go func() { go func() {

@ -0,0 +1,23 @@
package tests
import (
"testing"
"fmt"
"reflect"
"zedshaw.games/webapp/data"
// _ "github.com/mattn/go-sqlite3"
// "github.com/jmoiron/sqlx"
)
func TestAdminIndexPage(t *testing.T) {
models := data.Models()
for table, model := range models {
fmt.Printf("\n------\ntable=%s; model=%s\n", table, model.Name())
fields := reflect.VisibleFields(model)
for _, field := range fields {
fmt.Println("\t", field.Name, field.Type, field.Tag)
}
}
}

@ -0,0 +1 @@
<h1>Admin!</h1>
Loading…
Cancel
Save