summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2025-06-13 23:34:29 +0200
committerThomas Voss <mail@thomasvoss.com> 2025-06-13 23:34:46 +0200
commitefbcd857112fdce69006207c853bb1a4a37ca67c (patch)
tree5bb1c72b03e57335bdc6f13224990f28be10c667
parentf9accf7d1ebc1c4b2a07818b0a96c8cd3a73666d (diff)
Migrate towards using os.Root
-rw-r--r--main.go5
-rw-r--r--src/dbx/db.go49
-rw-r--r--src/http.go1
-rw-r--r--src/templates.go26
-rw-r--r--src/try/try.go14
5 files changed, 48 insertions, 47 deletions
diff --git a/main.go b/main.go
index 827491e..20c9fd6 100644
--- a/main.go
+++ b/main.go
@@ -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
+}