Files
stack/deploy/db_migrations/basket-svc/0001_create_base_tables.up.sql
2025-11-23 21:49:18 +01:00

52 lines
1.5 KiB
PL/PgSQL

CREATE EXTENSION IF NOT EXISTS "pgcrypto";
CREATE SCHEMA "basket" AUTHORIZATION egommerce;
CREATE TABLE IF NOT EXISTS basket.basket
(
id uuid NOT NULL DEFAULT gen_random_uuid(),
"state" character varying NOT NULL DEFAULT 'new',
created_at timestamp without time zone NOT NULL DEFAULT now(),
updated_at timestamp without time zone,
PRIMARY KEY (id)
);
ALTER TABLE IF EXISTS basket.basket OWNER to egommerce;
CREATE TABLE IF NOT EXISTS basket.basket_item
(
id uuid NOT NULL DEFAULT gen_random_uuid(),
basket_id uuid NOT NULL,
product_id uuid NOT NULL,
quantity integer NOT NULL DEFAULT 1,
price double precision NOT NULL DEFAULT 0.00,
created_at timestamp without time zone NOT NULL DEFAULT now(),
updated_at timestamp without time zone,
PRIMARY KEY (id),
CONSTRAINT basket_item_basket_fkey FOREIGN KEY (basket_id)
REFERENCES basket.basket (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
NOT VALID
);
ALTER TABLE IF EXISTS basket.basket_item OWNER to egommerce;
CREATE FUNCTION basket.update_basket_timestamp()
RETURNS trigger
LANGUAGE 'plpgsql'
VOLATILE
AS $BODY$
BEGIN
UPDATE basket.basket SET updated_at = NOW() WHERE id = NEW.basket_id;
RETURN NEW;
END;
$BODY$;
ALTER FUNCTION basket.update_basket_timestamp() OWNER TO egommerce;
CREATE TRIGGER trigger_update_basket_timestamp
AFTER INSERT OR UPDATE OR DELETE ON basket.basket_item
FOR EACH ROW
EXECUTE FUNCTION basket.update_basket_timestamp();