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