Well well well
This commit is contained in:
		
							parent
							
								
									4af9d5d9c3
								
							
						
					
					
						commit
						514331411f
					
				
					 1 changed files with 82 additions and 9 deletions
				
			
		| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue