diff --git a/api/controllers/itemController.go b/api/controllers/itemController.go new file mode 100644 index 0000000..e69de29 diff --git a/api/queries/ItemQueries.go b/api/queries/ItemQueries.go new file mode 100644 index 0000000..e09e3cc --- /dev/null +++ b/api/queries/ItemQueries.go @@ -0,0 +1,77 @@ +package queries + +const CREATE_ITEM = ` +INSERT INTO item(item_name, in_season) VALUES ($1, $2); +` + +const CREATE_ITEM_PRICE = ` +INSERT INTO item_price_history(item_id, price) VALUES ($1, $2); +` + +const SET_ITEM_PRICE_VALID_TO_DATE = ` +UPDATE item_price_history SET valid_to = now() +FROM ( + SELECT item_id, MAX(valid_from) FROM item_price_history WHERE item_id = $1 +) as o +WHERE item_id IN o.item_id +` + +const GET_ITEM_PRICE = ` +SELECT + oi.item_id, + oi.order_id, + i.item_name, + oi.quantity, + oi.made, + oi.created_at, + oi.quantity * iph.price AS total_price, + iph.price AS unit_price +FROM + order_item oi + INNER JOIN item i ON oi.item_id = i.id + AND oi.item_id = $1 + AND oi.order_id = $2 + INNER JOIN item_price_history iph ON iph.item_id = i.id + AND iph.valid_from <= oi.created_at + AND (iph.valid_to IS NULL OR iph.valid_to > oi.created_at); +` + +const ADD_ITEM_TO_ORDER = ` +INSERT INTO order_item (item_id, order_id, quantity, created_at) VALUES ($1, $2, $3, $4) ON CONFLICT (item_id, order_id) DO UPDATE SET + quantity = $3, + created_at = $4` + +const SET_QUANTITY = ` +UPDATE order_item SET quantity = $1 WHERE item_id = $2 AND order_id = $3; +` + +const SET_MADE = ` +UPDATE order_item SET made = $1 WHERE item_id = $2 AND order_id = $3; +` + +const GET_ORDER_ITEMS = ` +SELECT + oi.item_id, + oi.order_id, + i.item_name, + oi.quantity, + oi.made, + oi.created_at, + oi.quantity * iph.price AS total_price, + iph.price AS unit_price +FROM + order_item oi + INNER JOIN item i ON oi.item_id = i.init_db_pool + AND oi.order_id = $1 + INNER JOIN item_price_history iph ON iph.item_id = i.id + AND iph.valid_from <= oi.created_at + AND (iph.valid_to IS NULL OR iph.valid_to > oi.created_at); +` + +const REMOVE_ITEM_FROM_ORDER = ` +DELETE FROM order_item WHERE item_id = $1 AND order_id = $2; +` + +const SET_ITEM_IS_IN_SEASON = ` +UPDATE item SET in_season = $1 WHERE id = $2; +` diff --git a/api/queries/OrderQueries.go b/api/queries/OrderQueries.go index e69de29..db51478 100644 --- a/api/queries/OrderQueries.go +++ b/api/queries/OrderQueries.go @@ -0,0 +1,31 @@ +package queries + +const CREATE_ORDER = ` +INSERT INTO order_record(user_id, orderer, date_due, date_placed) VALUES ($1, $2, $3, $4); +` + +const SET_ORDER_FILLED = ` +UPDATE order_record SET filled = $1 WHERE id = $2 +` + +const SET_ORDER_DELIVERED = ` +UPDATE order_record SET delivered = $1 WHERE id = $2 +` + +const SET_ORDER_PAID = ` +UPDATE order_record SET amount_paid = $1 WHERE id = $2 +` + +const GET_ORDER_TOTAL_AND_BALANCE = ` +SELECT + SUM(oi.quantity * iph.price) AS order_total, + order_total - orec.amount_paid AS balance +FROM + order_item oi + INNER JOIN item i ON oi.item_id = i.init_db_pool + AND oi.order_id = $1 + INNER JOIN order_record orec ON oi.order_id = orec.order_id + INNER JOIN item_price_history iph ON iph.item_id = i.id + AND iph.valid_from <= oi.created_at + AND (iph.valid_to IS NULL OR iph.valid_to > oi.created_at); +` diff --git a/db/schema initialization.sql b/db/schema initialization.sql index 27935b7..e72cdd4 100644 --- a/db/schema initialization.sql +++ b/db/schema initialization.sql @@ -2,6 +2,7 @@ CREATE TABLE IF NOT EXISTS ordr_user ( id SERIAL NOT NULL PRIMARY KEY, sub_id TEXT UNIQUE NOT NULL, user_name TEXT NOT NULL, + position TEXT DEFAULT "", active BOOLEAN NOT NULL DEFAULT TRUE, is_admin BOOLEAN NOT NULL DEFAULT FALSE ); @@ -12,6 +13,7 @@ CREATE TABLE IF NOT EXISTS order_record ( orderer TEXT NOT NULL, date_due TIMESTAMP NOT NULL, date_placed TIMESTAMP NOT NULL DEFAULT now(), + amount_paid REAL NOT NULL DEFAULT 0, filled BOOLEAN NOT NULL DEFAULT FALSE, delivered BOOLEAN NOT NULL DEFAULT FALSE );