Shoppers/src/a3c/cart.nim
2024-02-08 03:02:04 +05:30

71 lines
2.4 KiB
Nim

import db_connector/db_sqlite, strutils, strtabs
import ../a3pkg/models
proc close*(db: DbConn) =
db.close()
proc setupCart*(db: DbConn) =
db.exec(sql"""
CREATE TABLE IF NOT EXISTS cart (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE ON UPDATE CASCADE,
product_id INTEGER NOT NULL REFERENCES products(id) ON DELETE CASCADE ON UPDATE CASCADE,
quantity INTEGER NOT NULL,
created_at TEXT DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at TEXT DEFAULT CURRENT_TIMESTAMP NOT NULL
)
""")
proc createPost*(db: DbConn, cart: Cart) =
db.exec(sql"INSERT INTO cart (?, ?, ?, ?, ?);", cart.userId, cart.productId, cart.quantity, cart.created_at, cart.updated_at)
proc drop*(db: DbConn) =
db.exec(sql"DROP TABLE IF EXISTS cart")
proc getUserCart*(db: DbConn, userId: int): seq[Cart] =
var
row = db.getAllRows(sql"SELECT * FROM cart WHERE user_id=?", userId)
cartDetails: seq[Cart]
for b, c in row:
var product: Cart
product.id = parseInt(c[0])
product.userId = parseInt(c[1])
product.productId = parseInt(c[2])
product.quantity = parseInt(c[3])
cartDetails.add(product)
return cartDetails
proc addToCart*(db: DbConn, cart: Cart) =
var cartDetails = getUserCart(db, cart.userId)
for d, f in cartDetails:
if f.userId == cart.userId and f.productId == cart.productId:
db.exec(sql"UPDATE cart SET quantity=? WHERE user_id=? AND product_id=?", f.quantity + cart.quantity, cart.userId, cart.productId)
return
db.exec(sql"INSERT INTO cart (user_id, product_id, quantity) VALUES (?, ?, ?)", cart.userId, cart.productId, cart.quantity)
proc removeFromCart*(db: DbConn, cart: Cart) =
db.exec(sql"DELETE FROM cart WHERE user_id=? AND product_id=?", cart.userId, cart.productId)
proc updateCart*(db: DbConn, quantity: string, id: int) =
# echo id
# echo quantity
# echo userId
# echo db.getAllRows(sql"SELECT * FROM cart WHERE user_id=? AND product_id=?;", userId, parseInt(productId))
db.exec(sql"UPDATE cart SET quantity=? WHERE id=?", quantity, id)
# proc updateCart*(db: DbConn, cookies: StringTableRef) =
# echo cookies
# for d, e in cookies:
# if d.contains("_quantity") == true:
# var h = d.split("_")
# echo h
# db.exec(sql"UPDATE cart SET quantity=? WHERE id=?", e, h[0])
# echo parseInt(h[0])
# echo parseInt(e)