From 514331411fcc97e5c815116492e862b625e9fee4 Mon Sep 17 00:00:00 2001 From: Imbus <> Date: Fri, 2 Feb 2024 16:25:41 +0100 Subject: [PATCH] Well well well --- server/main.go | 91 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 82 insertions(+), 9 deletions(-) diff --git a/server/main.go b/server/main.go index 3ff5e24..d68f33a 100644 --- a/server/main.go +++ b/server/main.go @@ -18,15 +18,49 @@ func delayPrint() { fmt.Printf("delay print\n") } +// Reads files from the migrations directory and runs them +func runMigrations(db *sqlx.DB) error { + // Read the migrations directory + files, err := os.ReadDir("migrations") + if err != nil { + return err + } + + // Run each migration file + for _, file := range files { + // Skip directories + if file.IsDir() { + continue + } + + // Read the migration file + content, err := os.ReadFile("migrations/" + file.Name()) + if err != nil { + return err + } + + // Execute the migration SQL + _, err = db.Exec(string(content)) + if err != nil { + fmt.Printf("Error executing migration %s: %s\n", file.Name(), err) + return err + } + + fmt.Printf("Migration %s executed\n", file.Name()) + } + + fmt.Println("Migrations complete") + return nil +} + // This is what a handler looks like -func getRoot(w http.ResponseWriter, r *http.Request) { - fmt.Printf("got / request\n") - go delayPrint() +func handler(w http.ResponseWriter, r *http.Request) { + fmt.Println("Request received") + go delayPrint() // This will run in the background io.WriteString(w, "This is my website!\n") } -func main() { - println("Starting server...") +func dbConnect() *sqlx.DB { // Check for the environment variable dbpath := os.Getenv("SQLITE_DB_PATH") @@ -41,21 +75,60 @@ func main() { if err != nil { panic(err) } - defer db.Close() err = db.Ping() if err != nil { panic(err) } - // Slide into the database dms with some slick SQL - db.MustExec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT)") + // Run the migrations + err = runMigrations(db) + if err != nil { + panic(err) + } + + return db +} + +func main() { + println("Starting server...") + + // Connect to the database + db := dbConnect() + defer db.Close() + + // Tx is a transaction + tx := db.MustBegin() + tx.MustExec("INSERT INTO users (username, password) VALUES (?, ?)", "John Doe", "a") + err := tx.Commit() + if err != nil { + panic(err) + } + + // This is how you query the database + rows, err := db.Queryx("SELECT * FROM users") + if err != nil { + panic(err) + } + + for rows.Next() { + var user struct { + ID int + Username string + Password string + } + err = rows.StructScan(&user) + if err != nil { + panic(err) + } + fmt.Printf("User: %d %s %s\n", user.ID, user.Username, user.Password) + } // Mounting the handler - // http.HandleFunc("/", getRoot) fs := http.FileServer(http.Dir("static")) http.Handle("/", fs) + http.HandleFunc("/hello", handler) // Start the server on port 8080 err = http.ListenAndServe(":8080", nil)