diff --git a/data/database.go b/data/database.go new file mode 100644 index 0000000..a2a2926 --- /dev/null +++ b/data/database.go @@ -0,0 +1,8 @@ +package data + +import "database/sql" + +func Connect(file string) *sql.DB { + db, _ := sql.Open("sqlite3", file) + return db +} diff --git a/go.mod b/go.mod index 00b83c9..e59bee4 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module lewisdale.dev/oopsie go 1.22.2 + +require github.com/mattn/go-sqlite3 v1.14.22 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..e8d092a --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= +github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= diff --git a/main.go b/main.go index abdbb5b..674aa17 100644 --- a/main.go +++ b/main.go @@ -2,14 +2,34 @@ package main import ( "net/http" + + _ "github.com/mattn/go-sqlite3" + "lewisdale.dev/oopsie/data" + "lewisdale.dev/oopsie/sites" ) +const createSitesTable = `CREATE TABLE IF NOT EXISTS sites ( +id INTEGER NOT NULL PRIMARY KEY, +created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, +name TEXT NOT NULL, +url TEXT NOT NULL +);` + func main() { + db := data.Connect("test.sqlite3") + + sites.CreateTable(db) + + site := sites.Site{Name: "Lewisdale.dev", Url: "https://lewisdale.dev"} + site.Save(db) + http.HandleFunc("GET /", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("This was a GET request!")) }) + http.HandleFunc("POST /", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("This was a POST request!")) }) + http.ListenAndServe(":8000", nil) } diff --git a/sites/sites.go b/sites/sites.go new file mode 100644 index 0000000..13d6a77 --- /dev/null +++ b/sites/sites.go @@ -0,0 +1,41 @@ +package sites + +import ( + "database/sql" + "fmt" +) + +const createSitesTable = `CREATE TABLE IF NOT EXISTS sites ( +id INTEGER NOT NULL PRIMARY KEY, +created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, +name TEXT NOT NULL, +url TEXT NOT NULL +);` + +func CreateTable(db *sql.DB) { + if _, err := db.Exec(createSitesTable); err != nil { + fmt.Println(fmt.Errorf(err.Error())) + } +} + +type Site struct { + id uint64 + created_at uint64 + Name string + Url string +} + +func (s *Site) Save(db *sql.DB) { + if s.id != 0 { + query := `UPDATE SITES + SET + name=?, + url=? + WHERE id =? + ` + db.Exec(query, s.Name, s.Url, s.id) + } else { + query := `INSERT INTO SITES (name, url) VALUES (?, ?)` + db.Exec(query, s.Name, s.Url) + } +} diff --git a/test.sqlite3 b/test.sqlite3 new file mode 100644 index 0000000..9f08f6b Binary files /dev/null and b/test.sqlite3 differ