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")
 | 
						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
 | 
					// This is what a handler looks like
 | 
				
			||||||
func getRoot(w http.ResponseWriter, r *http.Request) {
 | 
					func handler(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
	fmt.Printf("got / request\n")
 | 
						fmt.Println("Request received")
 | 
				
			||||||
	go delayPrint()
 | 
						go delayPrint() // This will run in the background
 | 
				
			||||||
	io.WriteString(w, "This is my website!\n")
 | 
						io.WriteString(w, "This is my website!\n")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func main() {
 | 
					func dbConnect() *sqlx.DB {
 | 
				
			||||||
	println("Starting server...")
 | 
					 | 
				
			||||||
	// Check for the environment variable
 | 
						// Check for the environment variable
 | 
				
			||||||
	dbpath := os.Getenv("SQLITE_DB_PATH")
 | 
						dbpath := os.Getenv("SQLITE_DB_PATH")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,21 +75,60 @@ func main() {
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		panic(err)
 | 
							panic(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	defer db.Close()
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	err = db.Ping()
 | 
						err = db.Ping()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		panic(err)
 | 
							panic(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Slide into the database dms with some slick SQL
 | 
						// Run the migrations
 | 
				
			||||||
	db.MustExec("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT)")
 | 
						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
 | 
						// Mounting the handler
 | 
				
			||||||
	// http.HandleFunc("/", getRoot)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	fs := http.FileServer(http.Dir("static"))
 | 
						fs := http.FileServer(http.Dir("static"))
 | 
				
			||||||
	http.Handle("/", fs)
 | 
						http.Handle("/", fs)
 | 
				
			||||||
 | 
						http.HandleFunc("/hello", handler)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Start the server on port 8080
 | 
						// Start the server on port 8080
 | 
				
			||||||
	err = http.ListenAndServe(":8080", nil)
 | 
						err = http.ListenAndServe(":8080", nil)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue