Simplify error handling during startup

This commit is contained in:
bronku 2025-03-23 21:58:34 +01:00
parent 969dbfb1aa
commit 4b2fcbc58a
5 changed files with 29 additions and 54 deletions

View file

@ -10,10 +10,7 @@ import (
)
func Run() {
h, err := server.New()
if err != nil {
log.Fatal(err)
}
h := server.New()
defer h.Close()
var handler http.Handler = h

View file

@ -19,15 +19,6 @@ func (h *Server) Close() {
}
}
func (h *Server) openStore() error {
var err error
h.s, err = store.OpenStore("./foo.db")
if err != nil {
h.s.Close()
}
return err
}
func (h *Server) loadHandler() {
mux := http.NewServeMux()
@ -38,21 +29,12 @@ func (h *Server) loadHandler() {
h.Handler = mux
}
func New() (*Server, error) {
func New() *Server {
var server Server
var err error
err = server.loadTemplates()
if err != nil {
return nil, err
}
err = server.openStore()
if err != nil {
return nil, err
}
server.loadTemplates()
server.s = store.OpenStore("./foo.db")
server.loadHandler()
return &server, nil
return &server
}

View file

@ -3,16 +3,19 @@ package server
import (
"embed"
"html/template"
"log"
"net/http"
)
//go:embed templates/*
var templates embed.FS
func (h *Server) loadTemplates() error {
func (h *Server) loadTemplates() {
var err error
h.tmpl, err = template.ParseFS(templates, "templates/*")
return err
if err != nil {
log.Fatal(err)
}
}
func (s *Server) render(fetch fetcher, templateName string) http.HandlerFunc {

View file

@ -3,7 +3,7 @@ package store
import (
"embed"
_ "embed"
"errors"
"log"
"strconv"
"strings"
)
@ -11,38 +11,29 @@ import (
//go:embed migrations/*.sql
var migrations embed.FS
func (s *Store) loadFile(file string) error {
func (s *Store) loadFile(file string) {
filename := strings.Split(file, ".")
version, err := strconv.Atoi(filename[0])
if err != nil {
return err
log.Fatal("only allowed files in migrations directory are <version>.txt")
}
if version <= s.version() {
return nil
}
query, err := migrations.ReadFile("migrations/" + file)
if err != nil {
return err
return
}
query, _ := migrations.ReadFile("migrations/" + file)
_, err = s.db.Exec(string(query))
return err
if err != nil {
log.Fatal("error executing migration: ", file)
}
}
func (s *Store) loadMigrations() error {
if s.db == nil {
return errors.New("database doesn't exist")
}
migration_files, err := migrations.ReadDir("migrations")
if err != nil {
return err
}
func (s *Store) loadMigrations() {
migration_files, _ := migrations.ReadDir("migrations")
for _, e := range migration_files {
_ = s.loadFile(e.Name())
s.loadFile(e.Name())
}
return nil
}
func (s *Store) version() int {

View file

@ -2,25 +2,27 @@ package store
import (
"database/sql"
"log"
_ "github.com/mattn/go-sqlite3"
)
type Store struct {
db *sql.DB
db *sql.DB
cakes []Cake
}
func OpenStore(filename string) (*Store, error) {
func OpenStore(filename string) *Store {
var out Store
var err error
out.db, err = sql.Open("sqlite3", filename)
if err != nil {
return &out, err
log.Fatal("Can't open the database", filename, err)
}
err = out.loadMigrations()
return &out, err
out.loadMigrations()
return &out
}
func (s *Store) Close() {