Merge branch 'master' of git.silversoft.se:Imbus/swrm
This commit is contained in:
commit
3265564835
2 changed files with 89 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)
|
||||
|
|
7
server/migrations/0010.sql
Normal file
7
server/migrations/0010.sql
Normal file
|
@ -0,0 +1,7 @@
|
|||
PRAGMA foreign_keys = ON;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id SERIAL PRIMARY KEY,
|
||||
username VARCHAR(255) NOT NULL,
|
||||
password VARCHAR(255) NOT NULL
|
||||
);
|
Loading…
Reference in a new issue