diff --git a/.gitignore b/.gitignore index 39377ee..56aafbe 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ *.out static/icons/* +*.db diff --git a/db/db.go b/db/db.go new file mode 100644 index 0000000..12036bd --- /dev/null +++ b/db/db.go @@ -0,0 +1,33 @@ +package db + +import ( + "database/sql" + _ "github.com/mattn/go-sqlite3" + ) + +var Database *sql.DB + +func DbConnect() { + Database, _ = sql.Open("sqlite3", "db.db") +} + +func DbBuild() { + statement, _ := Database.Prepare("CREATE TABLE IF NOT EXISTS Category (id INTEGER PRIMARY KEY, name TEXT)") + statement.Exec() + statement, _ = Database.Prepare("CREATE TABLE IF NOT EXISTS Product (id INTEGER PRIMARY KEY, categoryId INTEGER, name TEXT, description TEXT, imgUrl TEXT, quantity INTEGER, price INTEGER)") + statement.Exec() + statement, _ = Database.Prepare("CREATE TABLE IF NOT EXISTS PurchasementProduct (id INTEGER PRIMARY KEY, purchasementId INTEGER, productId INTEGER, quantity INTEGER, priceTotal INTEGER)") + statement.Exec() + statement, _ = Database.Prepare("CREATE TABLE IF NOT EXISTS Purchasement (id INTEGER PRIMARY KEY, priceTotal TEXT, firstName TEXT, lastName TEXT, paymentMethod INTEGER, deliveryDate TEXT)") + statement.Exec() +} + +func DbInsert(table, columns, values string) { + statement, _ := Database.Prepare("INSERT INTO "+ table +" ("+ columns +") VALUES ("+ values +")") + statement.Exec() +} + +func DbSelect(table, columns string) *sql.Rows { + rows, _ := Database.Query("SELECT "+ columns +" FROM "+ table) + return rows +} diff --git a/initializers/initializers.go b/initializers/initializers.go index 6aec9ff..09e2be7 100644 --- a/initializers/initializers.go +++ b/initializers/initializers.go @@ -2,8 +2,11 @@ package initializers import ( "net/http" + "database/sql" + "strconv" . "Elektromarket/views" . "Elektromarket/models" + . "Elektromarket/db" ) func initializePages() { @@ -19,52 +22,68 @@ func initializePages() { Pages["paymentDone"] = Page{"/paymentDone", "templates/paymentDone.html", map[string]interface{}{}, PaymentDoneView} } -func initializeData() { - Categories = []Category { - {1, "Laptopy"}, - {2, "Komputery"}, - {3, "Smartfony"}, - {4, "Smartwatche"}, - {5, "Monitory"}, - {6, "Drukarki"}, - {7, "Myszki"}, - {8, "Klawiatury"}, - {9, "Akcesoria"}, - } - - Products = []Product { - { - 1, - GetCategoryByName("Laptopy"), - "Apple MacBook Air 128 GB", - "Procesor Intel Core i5 | Pamięć 8 GB | Dysk SSD M.2 PCIe 128 GB | Grafika Intel HD Graphics 6000 | Typ ekranu Błyszczący, LED | System macOS Sierra", - "https://cdn.x-kom.pl/i/setup/images/prod/big/product-big,apple-macbook-air-i58gb128gbhd-6000mac-os-368639,pr_2016_4_28_12_39_54_140.jpg", - 11, - 3999, - }, - { - 2, - GetCategoryByName("Laptopy"), - "Dell Inspiron 5370", - "Procesor Intel Core i5-8250U | Pamięć 8 GB | Dysk SSD M.2 256 GB | Grafika AMD Radeon 530, + Intel UHD Graphics 620 | Typ ekranu Matowy, LED | System Microsoft Windows 10 Home PL", - "https://cdn.x-kom.pl/i/setup/images/prod/big/product-big,dell-inspiron-5370-i5-8250u8gb256win10-r530-fhd-393456,2017/12/pr_2017_12_14_9_40_43_405_10.jpg", - 5, - 3249, - }, - { - 3, - GetCategoryByName("Komputery"), - "Dell Inspiron 3670", - "System Microsoft Windows 10 Home PL | Procesor Intel Core i7-8700 | Grafika NVIDIA GeForce GTX 1050Ti, + Intel UHD Graphics 630 | Pamięć RAM 8 GB | Dysk SSD PCIe 128 GB | Dysk HDD SATA 7200 obr. 1000 GB | Miejsce na dodatkowy wewnętrzny dysk SATA Możliwość montażu dwóch dysków SATA", - "https://cdn.x-kom.pl/i/setup/images/prod/big/product-big,dell-inspiron-3670-i7-87008gb1281000win10-gtx1050ti-447395,2018/9/pr_2018_9_20_15_45_5_770_00.jpg", - 123, - 4299, - }, +func insertCategories() { + for i := range Categories { + DbInsert("Category", "name", "'"+Categories[i].Name+"'") } } +func insertProducts() { + for i := range Products { + DbInsert("Product", "categoryId, name, description, imgUrl, quantity, price","'"+strconv.Itoa(Products[i].Category.Id)+"','"+Products[i].Name+"','"+Products[i].Description+"','"+Products[i].ImgUrl+"','"+strconv.Itoa(Products[i].Quantity)+"','"+strconv.Itoa(Products[i].Price)+"'") + } +} + +func initializeCategories() { + var rows *sql.Rows = DbSelect("Category", "id, name") + var id int + var name string + for rows.Next() { + rows.Scan(&id, &name) + Categories = append(Categories, Category{id, name}) + } +} + +func initializeProducts() { + var rows *sql.Rows = DbSelect("Product", "id, categoryId, name, description, imgUrl, quantity, price") + var id, categoryId, quantity, price int + var name, description, imgUrl string + for rows.Next() { + rows.Scan(&id, &categoryId, &name, &description, &imgUrl, &quantity, &price) + Products = append(Products, Product{id, GetCategoryById(categoryId), name, description, imgUrl, quantity, price}) + } +} + +func initializePurchasements() { + var rows *sql.Rows = DbSelect("Purchasement", "id, priceTotal, firstName, lastName, paymentMethod, deliveryDate") + var rowsProducts *sql.Rows = DbSelect("PurchasementProduct", "id, purchasementId, productId, quantity, priceTotal") + var products map[int][]CartProduct + for rowsProducts.Next() { + var Pid, PpurchasementId, PproductId, Pquantity, PpriceTotal int + rows.Scan(&Pid, &PpurchasementId, &PproductId, &Pquantity, &PpriceTotal) + products[PpurchasementId] = append(products[PpurchasementId], CartProduct{GetProductById(PproductId), Pquantity, PpriceTotal}) + } + for rows.Next() { + var purchasementproducts []CartProduct + var id, priceTotal, paymentMethod int + var firstName, lastName, deliveryDate string + rows.Scan(&id, &priceTotal, &firstName, &lastName, &paymentMethod, &deliveryDate) + for i := range products[id]{ + purchasementproducts = append(purchasementproducts, products[id][i]) + } + Purchasements = append(Purchasements, Purchasement{id, purchasementproducts, priceTotal, firstName, lastName, paymentMethod, deliveryDate}) + if id > LastPurchasementId { + LastPurchasementId = id + } + } +} + func Initialize() { - initializeData() + DbConnect() + DbBuild() + initializeCategories() + initializeProducts() + initializePurchasements() initializePages() for k := range Pages { http.HandleFunc(Pages[k].Path, Pages[k].HandlePage) diff --git a/models/models.go b/models/models.go index 02173f3..4f1d929 100644 --- a/models/models.go +++ b/models/models.go @@ -43,6 +43,7 @@ type Cart struct { } type Purchasement struct { + Id int Products []CartProduct PriceTotal int FirstName string @@ -66,6 +67,7 @@ var Categories []Category var Products []Product var ShoppingCart Cart var Purchasements []Purchasement +var LastPurchasementId int func (p Product) Save() { for i:= range Products { diff --git a/templates/purchasements.html b/templates/purchasements.html index fa2711c..c3dfc15 100644 --- a/templates/purchasements.html +++ b/templates/purchasements.html @@ -9,7 +9,7 @@ {{range $.purchasements}}