Well well well

This commit is contained in:
Imbus 2024-02-02 16:25:41 +01:00
parent 4af9d5d9c3
commit 514331411f

View file

@ -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)