89 lines
2.6 KiB
Nim
89 lines
2.6 KiB
Nim
import db_connector/db_sqlite, strutils
|
|
|
|
import ../a3pkg/models
|
|
|
|
type
|
|
Database = ref object
|
|
db: DbConn
|
|
|
|
proc newDatabase1*(filename = "db5.sqlite3"): Database =
|
|
new result
|
|
result.db = open(filename, "", "", "")
|
|
|
|
proc close*(db: DbConn) =
|
|
db.close()
|
|
|
|
proc setupProducts*(db: DbConn) =
|
|
db.exec(sql"""
|
|
CREATE TABLE IF NOT EXISTS products (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name VARCHAR(255) NOT NULL,
|
|
description VARCHAR(1000) NOT NULL,
|
|
type VARCHAR(255) NOT NULL,
|
|
name_page VARCHAR(255) NOT NULL,
|
|
price REAL NOT NULL,
|
|
created_at TEXT DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
updated_at TEXT DEFAULT CURRENT_TIMESTAMP NOT NULL,
|
|
pic_URL VARCHAR(255) NOT NULL,
|
|
quantity INTEGER NOT NULL
|
|
);
|
|
""")
|
|
|
|
proc setupProductsIndex*(db: DbConn) =
|
|
db.exec(sql"""
|
|
CREATE UNIQUE INDEX IF NOT EXISTS products_name_idx ON products (name);
|
|
""")
|
|
|
|
proc createPost*(db: DbConn, product:Products): int64 =
|
|
var newID = db.insertID(sql"INSERT INTO products (name, description, type, Page_name, price, pic_URL, quantity) VALUES (?, ?, ?, ?, ?);",
|
|
product.name, product.description, product.productType, product.pageName, product.price, product.pic_URL, product.quantity)
|
|
return newID
|
|
|
|
proc availableProducts*(db: DbConn): seq[Products]=
|
|
var rows = db.getAllRows(sql"SELECT * FROM products WHERE quantity > 0")
|
|
var products: seq[Products]
|
|
for a, b in rows:
|
|
var product: Products
|
|
product.id = parseInt(b[0])
|
|
product.name = b[1]
|
|
product.description = b[2]
|
|
product.productType = b[3]
|
|
product.pageName = b[4]
|
|
product.price = parseFloat(b[5])
|
|
product.picURL = b[8]
|
|
product.quantity = parseInt(b[9])
|
|
|
|
products.add(product)
|
|
|
|
return products
|
|
|
|
proc getProduct*(db: DbConn, name: string): Products =
|
|
var row = db.getRow(sql"SELECT * FROM products WHERE name = ?", name)
|
|
var product: Products
|
|
product.id = parseInt(row[0])
|
|
product.name = row[1]
|
|
product.description = row[2]
|
|
product.productType = row[3]
|
|
product.pageName = row[4]
|
|
product.price = parseFloat(row[5])
|
|
product.picURL = row[8]
|
|
product.quantity = parseInt(row[9])
|
|
|
|
return product
|
|
|
|
proc getProductById*(db: DbConn, id: int): Products =
|
|
var row = db.getRow(sql"SELECT * FROM products WHERE id = ?", id)
|
|
var product: Products
|
|
product.id = parseInt(row[0])
|
|
product.name = row[1]
|
|
product.description = row[2]
|
|
product.productType = row[3]
|
|
product.pageName = row[4]
|
|
product.price = parseFloat(row[5])
|
|
product.picURL = row[8]
|
|
product.quantity = parseInt(row[9])
|
|
|
|
return product
|
|
|
|
proc drop*(db: DbConn) =
|
|
db.exec(sql"DROP TABLE IF EXISTS products") |