diff --git a/data/crud.go b/data/crud.go index ba5e0cb..a0adb5d 100644 --- a/data/crud.go +++ b/data/crud.go @@ -1,16 +1,33 @@ package data import ( + "log" "github.com/gofiber/fiber/v2" _ "github.com/mattn/go-sqlite3" "github.com/jmoiron/sqlx" + "zedshaw.games/webapp/util" ) -func SelectJson[T any](db *sqlx.DB, c *fiber.Ctx, err error, sql string, args ...interface{}) error { +var DB *sqlx.DB + +func Setup(driver string, url string) { + var err error + + DB, err = sqlx.Connect(driver, url) + if err != nil { + log.Fatalln(err) + } +} + +func Shutdown() { + DB.Close() +} + +func SelectJson[T any](c *fiber.Ctx, err error, sql string, args ...interface{}) error { var result []T if err != nil { goto fail } - err = db.Select(&result, sql, args...) + err = DB.Select(&result, sql, args...) if err != nil { goto fail } return c.JSON(&result) @@ -18,11 +35,11 @@ func SelectJson[T any](db *sqlx.DB, c *fiber.Ctx, err error, sql string, args .. fail: return err } -func GetJson[T any](db *sqlx.DB, c *fiber.Ctx, err error, sql string, args ...interface{}) error { +func GetJson[T any](c *fiber.Ctx, err error, sql string, args ...interface{}) error { var result T if err != nil { goto fail } - err = db.Get(&result, sql, args...) + err = DB.Get(&result, sql, args...) if err != nil { goto fail } return c.JSON(&result) @@ -30,11 +47,9 @@ func GetJson[T any](db *sqlx.DB, c *fiber.Ctx, err error, sql string, args ...in fail: return err } -func Insert(db *sqlx.DB, err error, sql_query string, args ...interface{}) error { +func Insert(err error, sql_query string, args ...interface{}) (error) { + defer util.HandlePanic("Insert") if err != nil { return err } - - db.MustExec(sql_query, args...) + DB.MustExec(sql_query, args...) return err } - - diff --git a/go.mod b/go.mod index 3dc5c6c..7dd815a 100644 --- a/go.mod +++ b/go.mod @@ -88,7 +88,6 @@ require ( github.com/tursodatabase/libsql-client-go v0.0.0-20240902231107-85af5b9d094d // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasthttp v1.62.0 // indirect - github.com/valyala/quicktemplate v1.8.0 // indirect github.com/vertica/vertica-sql-go v1.3.3 // indirect github.com/ydb-platform/ydb-go-genproto v0.0.0-20241112172322-ea1f63298f77 // indirect github.com/ydb-platform/ydb-go-sdk/v3 v3.108.1 // indirect @@ -120,7 +119,6 @@ require ( tool ( github.com/air-verse/air github.com/pressly/goose/v3/cmd/goose - github.com/valyala/quicktemplate/qtc golang.org/x/pkgsite/cmd/pkgsite golang.org/x/tools/cmd/goimports ) diff --git a/go.sum b/go.sum index 70e444b..34a84c6 100644 --- a/go.sum +++ b/go.sum @@ -386,8 +386,6 @@ github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6Kllzaw github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.62.0 h1:8dKRBX/y2rCzyc6903Zu1+3qN0H/d2MsxPPmVNamiH0= github.com/valyala/fasthttp v1.62.0/go.mod h1:FCINgr4GKdKqV8Q0xv8b+UxPV+H/O5nNFo3D+r54Htg= -github.com/valyala/quicktemplate v1.8.0 h1:zU0tjbIqTRgKQzFY1L42zq0qR3eh4WoQQdIdqCysW5k= -github.com/valyala/quicktemplate v1.8.0/go.mod h1:qIqW8/igXt8fdrUln5kOSb+KWMaJ4Y8QUsfd1k6L2jM= github.com/vertica/vertica-sql-go v1.3.3 h1:fL+FKEAEy5ONmsvya2WH5T8bhkvY27y/Ik3ReR2T+Qw= github.com/vertica/vertica-sql-go v1.3.3/go.mod h1:jnn2GFuv+O2Jcjktb7zyc4Utlbu9YVqpHH/lx63+1M4= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= diff --git a/main.go b/main.go index 363a60e..0bea608 100644 --- a/main.go +++ b/main.go @@ -5,29 +5,20 @@ import ( "os" "os/signal" "syscall" - "zedshaw.games/webapp/api" - "zedshaw.games/webapp/data" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/logger" "github.com/gofiber/template/html/v2" _ "github.com/mattn/go-sqlite3" - "github.com/jmoiron/sqlx" - sq "github.com/Masterminds/squirrel" recov "github.com/gofiber/fiber/v2/middleware/recover" - "github.com/gofiber/fiber/v2/middleware/session" + + "zedshaw.games/webapp/api" + "zedshaw.games/webapp/data" ) func main() { log.SetFlags(log.LstdFlags | log.Lshortfile) - db, err := sqlx.Connect("sqlite3", "db.sqlite3") - if err != nil { - log.Fatalln(err) - } - - store := session.New() - engine := html.New("./views", ".html") app := fiber.New(fiber.Config{ @@ -38,68 +29,11 @@ func main() { app.Use(logger.New()) app.Use(recov.New()) - // handler that returns one json from a sql database - app.Get("/api/stream/", func (c *fiber.Ctx) error { - sess, err := store.Get(c) - sess.Set("fuck", "off") - - sql, args, err := sq.Select("*").From("stream").ToSql() - err = data.SelectJson[data.Stream](db, c, err, sql, args...) - - return api.IfErrNil(err, c) - }) - - app.Get("/api/stream/:id", func (c *fiber.Ctx) error { - sql, args, err := sq.Select("*").From("stream").Where("id", c.Params("id")).ToSql() - - err = data.GetJson[data.Stream](db, c, err, sql, args...) - return api.IfErrNil(err, c) - }) - - app.Get("/api/stream/:id/links", func (c *fiber.Ctx) error { - sql, args, err := sq.Select("*").From("stream_link").Where("stream_id", c.Params("id")).ToSql() - - err = data.SelectJson[data.Link](db, c, err, sql, args...) - - return api.IfErrNil(err, c) - }) - - app.Post("/api/login", func (c *fiber.Ctx) error { - login, err := api.ReceivePost[data.Login](c) - if(err != nil) { goto fail } - - log.Printf("username: %s; password: %s", login.Username, login.Password); - - return c.Redirect("/") - - fail: - return api.IfErrNil(err, c) - }) - - app.Post("/api/link", func (c *fiber.Ctx) error { - var sql string - var args []interface{} - - link, err := api.ReceivePost[data.Link](c) - if err != nil { goto fail } - - sql, args, err = sq.Insert("stream_link").Columns("stream_id", "url", "description").Values(link.StreamId, link.Url, link.Description).ToSql() - - err = data.Insert(db, err, sql, args...) - return c.Redirect("/live/") - - fail: - return api.IfErrNil(err, c) - }) + api.Setup(app) + data.Setup("sqlite3", "db.sqlite3") app.Static("/", "./public") - app.Get("/test/:name/", func (c *fiber.Ctx) error { - return c.Render(c.Params("name"), fiber.Map{ - "Title": "Hello, World!", - }) - }) - go func() { if err := app.Listen(":5001"); err != nil { log.Panic(err) @@ -113,8 +47,8 @@ func main() { log.Println("Shutdown now...") _ = app.Shutdown() - log.Println("Running cleanup...") - db.Close() + api.Shutdown() + data.Shutdown() log.Println("Done.") } diff --git a/util/util.go b/util/util.go new file mode 100644 index 0000000..245747b --- /dev/null +++ b/util/util.go @@ -0,0 +1,13 @@ +package util + +import ( + "log" +) + +func HandlePanic(message string) func() { + return func() { + if r := recover(); r != nil { + log.Println(message, r) + } + } +}