diff options
-rw-r--r-- | main.go | 5 | ||||
-rw-r--r-- | src/dbx/db.go | 49 | ||||
-rw-r--r-- | src/http.go | 1 | ||||
-rw-r--r-- | src/templates.go | 26 | ||||
-rw-r--r-- | src/try/try.go | 14 |
5 files changed, 48 insertions, 47 deletions
@@ -13,6 +13,7 @@ import ( "git.thomasvoss.com/euro-cash.eu/src" "git.thomasvoss.com/euro-cash.eu/src/dbx" "git.thomasvoss.com/euro-cash.eu/src/email" + . "git.thomasvoss.com/euro-cash.eu/src/try" ) func main() { @@ -37,7 +38,9 @@ func main() { if *debugp { go watch() } - dbx.Init() + + dbx.Init(Try2(os.OpenRoot("src/dbx/sql")).FS()) + app.BuildTemplates(Try2(os.OpenRoot("src/templates")).FS()) app.Run(*port) } diff --git a/src/dbx/db.go b/src/dbx/db.go index 9be23f0..5bd65a5 100644 --- a/src/dbx/db.go +++ b/src/dbx/db.go @@ -2,66 +2,49 @@ package dbx import ( "database/sql" - "embed" "fmt" "io/fs" "log" - "path/filepath" "reflect" "sort" "strings" "github.com/mattn/go-sqlite3" + + . "git.thomasvoss.com/euro-cash.eu/src/try" ) var ( + db *sql.DB DBName string - - db *sql.DB - //go:embed "sql/*.sql" - migrations embed.FS ) -func Init() { - var err error - if db, err = sql.Open("sqlite3", DBName); err != nil { - log.Fatal(err) - } - if err = db.Ping(); err != nil { - log.Fatal(err) - } - - if err := applyMigrations("sql"); err != nil { - log.Fatal(err) - } +func Init(sqlDir fs.FS) { + db = Try2(sql.Open("sqlite3", DBName)) + Try(db.Ping()) + Try(applyMigrations(sqlDir)) /* TODO: Remove debug code */ - if err := CreateUser(User{ + Try(CreateUser(User{ Email: "mail@thomasvoss.com", Username: "Thomas", Password: "69", AdminP: true, - }); err != nil { - log.Fatal(err) - } - if err := CreateUser(User{ + })) + Try(CreateUser(User{ Email: "foo@BAR.baz", Username: "Foobar", Password: "420", AdminP: false, - }); err != nil { - log.Fatal(err) - } - if _, err := GetMintages("ad"); err != nil { - log.Fatal(err) - } + })) + Try2(GetMintages("ad")) } func Close() { db.Close() } -func applyMigrations(dir string) error { +func applyMigrations(dir fs.FS) error { var latest int migratedp := true @@ -90,7 +73,7 @@ func applyMigrations(dir string) error { latest = -1 } - files, err := fs.ReadDir(migrations, dir) + files, err := fs.ReadDir(dir, ".") if err != nil { return err } @@ -110,7 +93,7 @@ func applyMigrations(dir string) error { sort.Strings(scripts) for _, f := range scripts[latest+1:] { - qry, err := migrations.ReadFile(filepath.Join(dir, f)) + qry, err := fs.ReadFile(dir, f) if err != nil { return err } @@ -141,7 +124,7 @@ func applyMigrations(dir string) error { } if last != "" { - qry, err := migrations.ReadFile(filepath.Join(dir, last)) + qry, err := fs.ReadFile(dir, last) if err != nil { return err } diff --git a/src/http.go b/src/http.go index c9896b5..a5897b4 100644 --- a/src/http.go +++ b/src/http.go @@ -27,7 +27,6 @@ func Run(port int) { mwareC := chain(mwareB, countryHandler) // [C]ountry mwareM := chain(mwareC, mintageHandler) // [M]intage - /* TODO: Put this all in an embed.FS */ mux.Handle("GET /codes/", fs) mux.Handle("GET /designs/", fs) mux.Handle("GET /favicon.ico", fs) diff --git a/src/templates.go b/src/templates.go index df14138..8479759 100644 --- a/src/templates.go +++ b/src/templates.go @@ -1,9 +1,9 @@ package app import ( - "embed" "fmt" "html/template" + "io/fs" "log" "strings" @@ -18,10 +18,8 @@ type templateData struct { } var ( - //go:embed templates/*.html.tmpl - templateFS embed.FS - notFoundTmpl = buildTemplate("-404") - errorTmpl = buildTemplate("-error") + notFoundTmpl *template.Template + errorTmpl *template.Template templates map[string]*template.Template funcmap = map[string]any{ "denoms": denoms, @@ -33,11 +31,15 @@ var ( } ) -func init() { - ents, err := templateFS.ReadDir("templates") +func BuildTemplates(dir fs.FS) { + ents, err := fs.ReadDir(dir, ".") if err != nil { - log.Fatalln(err) + log.Fatal(err) } + + notFoundTmpl = buildTemplate(dir, "-404") + errorTmpl = buildTemplate(dir, "-error") + templates = make(map[string]*template.Template, len(ents)) for _, e := range ents { path := "/" @@ -48,19 +50,19 @@ func init() { case name != "index": path += strings.ReplaceAll(name, "-", "/") } - templates[path] = buildTemplate(name) + templates[path] = buildTemplate(dir, name) } } -func buildTemplate(name string) *template.Template { +func buildTemplate(dir fs.FS, name string) *template.Template { names := [...]string{"-base", "-navbar", name} for i, s := range names { - names[i] = "templates/" + s + ".html.tmpl" + names[i] = s + ".html.tmpl" } return template.Must(template. New("-base.html.tmpl"). Funcs(funcmap). - ParseFS(templateFS, names[:]...)) + ParseFS(dir, names[:]...)) } func asHTML(s string) template.HTML { diff --git a/src/try/try.go b/src/try/try.go new file mode 100644 index 0000000..fc086d1 --- /dev/null +++ b/src/try/try.go @@ -0,0 +1,14 @@ +package try + +import "log" + +func Try(e error) { + if e != nil { + log.Fatal(e) + } +} + +func Try2[T any](x T, e error) T { + Try(e) + return x +} |