diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..a3a24d1 --- /dev/null +++ b/go.mod @@ -0,0 +1,5 @@ +module git.metznet.ca/MetzNet/stampede_2025 + +go 1.24.4 + +require github.com/mattn/go-sqlite3 v1.14.28 diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..42e5bac --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/mattn/go-sqlite3 v1.14.28 h1:ThEiQrnbtumT+QMknw63Befp/ce/nUPgBPMlRFEum7A= +github.com/mattn/go-sqlite3 v1.14.28/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= diff --git a/main.go b/main.go new file mode 100644 index 0000000..dba35f1 --- /dev/null +++ b/main.go @@ -0,0 +1,80 @@ +package main + +import ( + "errors" + "os/signal" + "syscall" + "context" + "os" + "log/slog" + "database/sql" + _ "github.com/mattn/go-sqlite3" +) + +const SQLITE_TABLES string = `` + +func server(db_path string) error { + sigs := make(chan os.Signal, 1) + signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) + + ctx := context.Background() + + seed_db := false + _, err := os.Stat(db_path) + if errors.Is(err, os.ErrNotExist) { + seed_db = true + } else if err != nil { + slog.Error("Failed to stat db file", "path", db_path, "error", err) + return err + } + + db, err := sql.Open("sqlite3", db_path) + if err != nil { + slog.Error("Failed to open db file", "path", db_path, "error", err) + return err + } + + if seed_db { + slog.Info("Seeding database", "path", db_path) + tx, err := db.BeginTx(ctx, nil) + if err != nil { + slog.Error("Failed to start tx for db init", "error", err) + return err + } + + _, err = tx.Exec(SQLITE_TABLES) + if err != nil { + slog.Error("Failed to exec tables for db init", "error", err) + return err + } + + err = tx.Commit() + if err != nil { + slog.Error("Failed to commit tx for db init", "error", err) + return err + } + } + + slog.Info("Starting server", "path", db_path) + run := true + for run { + select { + case <-sigs: + run = false + } + } + + err = db.Close() + if err != nil { + slog.Error("Failed to close db", "path", db_path, "error", err) + } + + return nil +} + +func main() { + err := server(os.Args[1]) + if err != nil { + panic(err) + } +}