From 49d33b23663d58594488472e4e6fe9823015165b Mon Sep 17 00:00:00 2001 From: Lewis Dale Date: Wed, 8 May 2024 09:00:58 +0100 Subject: [PATCH] Day 9 content, connecting to database --- data/database.go | 8 ++++++++ go.mod | 2 ++ go.sum | 2 ++ main.go | 20 ++++++++++++++++++++ sites/sites.go | 41 +++++++++++++++++++++++++++++++++++++++++ test.sqlite3 | Bin 0 -> 8192 bytes 6 files changed, 73 insertions(+) create mode 100644 data/database.go create mode 100644 go.sum create mode 100644 sites/sites.go create mode 100644 test.sqlite3 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 0000000000000000000000000000000000000000..9f08f6b0ca6db320358d3e04424f87194e766cc9 GIT binary patch literal 8192 zcmeI#PfNov7zXfUOoYOyw_V?ZFopdon{!e;SZ9=BTW6PnJB?~17P?K=sAoOxGkNxd znGGj;5(F>uJS3rcQ$qON-od4xYDKrR`6SlVVq1)Jc0|M&E1Fp_a~*CzmbG=3`=3%| z_33NL{Kf4NGXsGD1Rwwb2tWV=5P$##AOHaf{4as$ZN6D9m-$OY$Jd$4O_!aomO?iY zo)jd#V_(p!L_1cRP%o6?Ohgo3ND7C(PyMJDc+rT?#i(lC%vG#aGB#bh>;+;Vy`WDg z;?x`ZlDfkv5}_P_o>Z-AJW(XYmAUKVzN+;w&%T$e-ID!gdh-Rd7iK{q009U<00Izz z00bZa0SG_<0ucC90he#ER;AN)ntL^;U2_h|>A3BEx83yBQ<^7nrs|1$ywmzVcN>lD MYtcOH@VAe92V2ifvj6}9 literal 0 HcmV?d00001