From 6c5e3d22134f9cfe30a0ff1b951c709381c4a64d Mon Sep 17 00:00:00 2001 From: Mikayla Dobson Date: Sat, 2 Mar 2024 17:47:13 +0000 Subject: [PATCH] setup for sqlite --- data/seed.go | 51 ------------------- data/sql.go | 54 -------------------- {data => db}/entities.go | 2 +- db/seed.go | 103 ++++++++++++++++++++++++++++++++++++++ db/seed.sql | 28 +++++++++++ db/sql.go | 104 +++++++++++++++++++++++++++++++++++++++ example.db | Bin 0 -> 20480 bytes main.go | 5 +- routes.go | 4 +- templates/item-row.html | 8 +-- 10 files changed, 246 insertions(+), 113 deletions(-) delete mode 100644 data/seed.go delete mode 100644 data/sql.go rename {data => db}/entities.go (97%) create mode 100644 db/seed.go create mode 100644 db/seed.sql create mode 100644 db/sql.go create mode 100644 example.db diff --git a/data/seed.go b/data/seed.go deleted file mode 100644 index d15d007..0000000 --- a/data/seed.go +++ /dev/null @@ -1,51 +0,0 @@ -package data - -func getSeedData() (items []Item, boxes []Box, boxitems []BoxItem) { - items = []Item{ - { - ID: 1, - Name: "Toothbrush", - Stage: Essentials, - Category: Bathroom, - }, - { - ID: 2, - Name: "Toothpaste", - Stage: Essentials, - Category: Bathroom, - }, - { - ID: 3, - Name: "TV", - Stage: StageTwo, - Category: Bedroom, - }, - { - ID: 4, - Name: "Micro USB Bundle", - Stage: StageOne, - Category: Office, - }, - } - - plasticTubDescription := "Plastic tub with blue lid" - - boxes = []Box{ - { - ID: 1, - Name: "Cable Box", - Description: &plasticTubDescription, - Stage: StageOne, - }, - } - - boxitems = []BoxItem{ - { - ID: 1, - BoxID: 1, - ItemID: 4, - }, - } - - return -} diff --git a/data/sql.go b/data/sql.go deleted file mode 100644 index 92e7f5c..0000000 --- a/data/sql.go +++ /dev/null @@ -1,54 +0,0 @@ -package data - -import ( - "database/sql" - "github.com/mattn/go-sqlite3" -) - -func CreateClient() (db *sql.DB, err error) { - return sql.Open("sqlite3", "./example.db") -} - -func GetAllItems() (result []Item, err error) { - db, err := CreateClient() - if err != nil { - return nil, err - } - - defer db.Close() - - rows, err := db.Query("SELECT * FROM items") - if err != nil { - return nil, err - } - - defer rows.Close() - - for rows.Next() { - item := Item{} - - err = rows.Scan(&item.ID, &item.Name, &item.Notes, &item.Description, &item.Stage, &item.Category) - - if err != nil { - return nil, err - } - - result = append(result, item) - } - - return -} - -func GetItemByID(id int) (item Item, err error) { - db, err := CreateClient() - if err != nil { - return Item{}, err - } - - defer db.Close() - - row := db.QueryRow("SELECT * FROM items WHERE id = ?", id) - err = row.Scan(&item.ID, &item.Name, &item.Notes, &item.Description, &item.Stage, &item.Category) - - return -} diff --git a/data/entities.go b/db/entities.go similarity index 97% rename from data/entities.go rename to db/entities.go index 79e7428..e2c2798 100644 --- a/data/entities.go +++ b/db/entities.go @@ -1,4 +1,4 @@ -package data +package db // enums type PackingStage int diff --git a/db/seed.go b/db/seed.go new file mode 100644 index 0000000..6aeddb6 --- /dev/null +++ b/db/seed.go @@ -0,0 +1,103 @@ +package db + +import ( + "database/sql" + "os" +) + +func GetSeedData() (items []Item, boxes []Box, boxitems []BoxItem) { + items = []Item{ + { + ID: 1, + Name: "Toothbrush", + Stage: Essentials, + Category: Bathroom, + }, + { + ID: 2, + Name: "Toothpaste", + Stage: Essentials, + Category: Bathroom, + }, + { + ID: 3, + Name: "TV", + Stage: StageTwo, + Category: Bedroom, + }, + { + ID: 4, + Name: "Micro USB Bundle", + Stage: StageOne, + Category: Office, + }, + } + + plasticTubDescription := "Plastic tub with blue lid" + + boxes = []Box{ + { + ID: 1, + Name: "Cable Box", + Description: &plasticTubDescription, + Stage: StageOne, + }, + } + + boxitems = []BoxItem{ + { + ID: 1, + BoxID: 1, + ItemID: 4, + }, + } + + return +} + +func CreateTables(client *sql.DB) (int64, error) { + script, err := os.ReadFile("/home/mikayla/go/go-htmx-tailwind-example/db/seed.sql") + if err != nil { + panic(err) + } + + result, err := client.Exec(string(script)) + if err != nil { + panic(err) + } + + return result.RowsAffected() +} + +func SeedDB() (int64, error) { + client, err := CreateClient() + if err != nil { + return -1, err + } + + defer client.Close() + + CreateTables(client) + + items, boxes, _ := GetSeedData() + insertCount := 0 + + // loop through initial items and run post request for each + for i := range(items) { + _, err := PostItem(items[i]) + if err != nil { + return -1, err + } + insertCount++ + } + + for i := range(boxes) { + _, err := PostBox(boxes[i]) + if err != nil { + return -1, err + } + insertCount++ + } + + return int64(insertCount), nil +} diff --git a/db/seed.sql b/db/seed.sql new file mode 100644 index 0000000..0290d71 --- /dev/null +++ b/db/seed.sql @@ -0,0 +1,28 @@ +-- CREATE DATABASE IF NOT EXISTS inventory; +-- USE inventory; + +CREATE TABLE IF NOT EXISTS items ( + ID INTEGER PRIMARY KEY, + Name TEXT NOT NULL, + Notes TEXT, + Description TEXT, + Stage INTEGER, + Category INTEGER +); + +CREATE TABLE IF NOT EXISTS boxes ( + ID INTEGER PRIMARY KEY, + Name TEXT NOT NULL, + Notes TEXT, + Description TEXT, + Stage INTEGER, + Category INTEGER +); + +CREATE TABLE IF NOT EXISTS boxitems ( + ItemID INTEGER, + BoxID INTEGER, + PRIMARY KEY (ItemID, BoxID), + FOREIGN KEY (ItemID) REFERENCES items(ID), + FOREIGN KEY (BoxID) REFERENCES boxes(ID) +); diff --git a/db/sql.go b/db/sql.go new file mode 100644 index 0000000..25b2162 --- /dev/null +++ b/db/sql.go @@ -0,0 +1,104 @@ +package db + +import ( + "database/sql" +) + +func CreateClient() (db *sql.DB, err error) { + return sql.Open("sqlite3", "./example.db") +} + +func GetAllItems() (result []Item, err error) { + db, err := CreateClient() + if err != nil { + return nil, err + } + + defer db.Close() + + rows, err := db.Query("SELECT * FROM items") + if err != nil { + return nil, err + } + + defer rows.Close() + + for rows.Next() { + item := Item{} + + err = rows.Scan(&item.ID, &item.Name, &item.Notes, &item.Description, &item.Stage, &item.Category) + + if err != nil { + return nil, err + } + + result = append(result, item) + } + + return +} + +func GetItemByID(id int) (item Item, err error) { + db, err := CreateClient() + if err != nil { + return Item{}, err + } + + defer db.Close() + + row := db.QueryRow("SELECT * FROM items WHERE id = ?", id) + err = row.Scan(&item.ID, &item.Name, &item.Notes, &item.Description, &item.Stage, &item.Category) + + return +} + +func PostItem(item Item) (int64, error) { + db, err := CreateClient() + if err != nil { + return -1, err + } + + defer db.Close() + + query := `INSERT INTO items (name, notes, description, stage, category) + VALUES (?, ?, ?, ?, ?)` + + result, err := db.Exec(query, item.Name, item.Notes, item.Description, item.Stage, item.Category) + + if err != nil { + return -1, err + } + + return result.LastInsertId() +} + + + +func PostBox(box Box) (int64, error) { + db, err := CreateClient() + if err != nil { + return -1, err + } + + defer db.Close() + + query := `INSERT INTO boxes (name, notes, description, stage, category) VALUES (?, ?, ?, ?, ?)` + + result, err := db.Exec(query, box.Name, box.Notes, box.Description, box.Stage, box.Category) + + if err != nil { + return -1, err + } + + return result.LastInsertId() +} + +// func PostBoxItem(itemid int, boxid int) (int64, error) { +// db, err := CreateClient() +// if err != nil { +// return -1, err +// } + +// defer db.Close() +// // query := +// } diff --git a/example.db b/example.db new file mode 100644 index 0000000000000000000000000000000000000000..4a16fd6e01d6d3f766b8594a072bd4be63352e80 GIT binary patch literal 20480 zcmeI&J#W)M7zglklGaJ2{tJ8-r!aw{Ui1d9GA**-sc?sWI_^f>N6?s-zM=fQmHN_LOjAeu%V zGDZlgsAEeVY0IllA-z#oEz@7ut&lq}-&U&cNuhE{s8#(?xvY-XB_j?22tWV=5P$## zAOHafKw$F)R?qT!z0uI#=+YhfVi+t{Q8o?JYoTNFmcyCTYWFxxqpVqGs+lU&>@w4G z_yMW~)VtFv>0)dxh)OTrR7FH2BFta+5Mhe(3xZ`foNUl?r-C{Bsl%)zb)58iKjVQ^qH_bMIVw z!7LN)OZQA%RqnV_oCWjOX|!yt_O$GZHsY*jFzIyb+U&A$#S? z2^;zg!F+FQs5<`-Q=|G{ee{n80SG_<0uX=z1Rwwb2tWV=5P-l23zVb1q5j|CCycE@ X00Izz00bZa0SG_<0uX=z1PJ*7*CqQK literal 0 HcmV?d00001 diff --git a/main.go b/main.go index 3088e67..0ca95fa 100644 --- a/main.go +++ b/main.go @@ -11,9 +11,11 @@ import ( "syscall" "time" + "github.com/innocuous-symmetry/moving-mgmt/db" + "github.com/jritsema/gotoolbox" "github.com/jritsema/gotoolbox/web" - "github.com/mattn/go-sqlite3" + _ "github.com/mattn/go-sqlite3" ) var ( @@ -31,6 +33,7 @@ func main() { //exit process immediately upon sigterm handleSigTerms() + db.SeedDB() //parse templates var err error diff --git a/routes.go b/routes.go index 3fe8bca..e82ba52 100644 --- a/routes.go +++ b/routes.go @@ -2,7 +2,7 @@ package main import ( "net/http" - sql "github.com/innocuous-symmetry/moving-mgmt/data" + db "github.com/innocuous-symmetry/moving-mgmt/db" "github.com/jritsema/gotoolbox/web" ) @@ -18,7 +18,7 @@ import ( // Cancel -> GET /company -> nothing, companys.html func index(r *http.Request) *web.Response { - result, err := sql.GetAllItems() + result, err := db.GetAllItems() if err != nil { panic(err) } diff --git a/templates/item-row.html b/templates/item-row.html index 13bcebf..312eca2 100644 --- a/templates/item-row.html +++ b/templates/item-row.html @@ -5,7 +5,7 @@ {{.Category}} {{.Description}} {{.Notes}} - + +