diff --git a/apps/product-query-svc/adapters/outbound/postgres/migrations/000003_add_users_orders.down.sql b/apps/product-query-svc/adapters/outbound/postgres/migrations/000003_add_users_orders.down.sql new file mode 100644 index 0000000..e45e329 --- /dev/null +++ b/apps/product-query-svc/adapters/outbound/postgres/migrations/000003_add_users_orders.down.sql @@ -0,0 +1,2 @@ +DROP TABLE IF EXISTS orders; +DROP TABLE IF EXISTS users; diff --git a/apps/product-query-svc/adapters/outbound/postgres/migrations/000003_add_users_orders.up.sql b/apps/product-query-svc/adapters/outbound/postgres/migrations/000003_add_users_orders.up.sql new file mode 100644 index 0000000..a2fb184 --- /dev/null +++ b/apps/product-query-svc/adapters/outbound/postgres/migrations/000003_add_users_orders.up.sql @@ -0,0 +1,37 @@ +CREATE EXTENSION IF NOT EXISTS citext; + +CREATE TABLE IF NOT EXISTS users ( + id BIGSERIAL PRIMARY KEY, + name TEXT NOT NULL, + email CITEXT NOT NULL UNIQUE, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); + +-- Create orders table referencing users +CREATE TABLE IF NOT EXISTS orders ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE, + product_name TEXT NOT NULL, + total BIGINT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); + +CREATE INDEX IF NOT EXISTS orders_user_id_idx ON orders(user_id); + +-- Seed sample data +INSERT INTO users (name, email) +VALUES ('Alice', 'alice@example.com'), + ('Bob', 'bob@example.com') +ON CONFLICT (email) DO NOTHING; + +INSERT INTO orders (user_id, product_name, total) +SELECT u.id, p.product_name, p.total +FROM users u +JOIN (VALUES + ('alice@example.com', 'Starter Pack', 4999), + ('alice@example.com', 'Premium Pack', 19999), + ('bob@example.com', 'Gift Card', 2500) +) AS p(email, product_name, total) + ON u.email = p.email +LEFT JOIN orders o ON o.user_id = u.id AND o.product_name = p.product_name +WHERE o.id IS NULL; diff --git a/charts/product-query-svc/migrations/000003_add_users_orders.down.sql b/charts/product-query-svc/migrations/000003_add_users_orders.down.sql new file mode 100644 index 0000000..e45e329 --- /dev/null +++ b/charts/product-query-svc/migrations/000003_add_users_orders.down.sql @@ -0,0 +1,2 @@ +DROP TABLE IF EXISTS orders; +DROP TABLE IF EXISTS users; diff --git a/charts/product-query-svc/migrations/000003_add_users_orders.up.sql b/charts/product-query-svc/migrations/000003_add_users_orders.up.sql new file mode 100644 index 0000000..a2fb184 --- /dev/null +++ b/charts/product-query-svc/migrations/000003_add_users_orders.up.sql @@ -0,0 +1,37 @@ +CREATE EXTENSION IF NOT EXISTS citext; + +CREATE TABLE IF NOT EXISTS users ( + id BIGSERIAL PRIMARY KEY, + name TEXT NOT NULL, + email CITEXT NOT NULL UNIQUE, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); + +-- Create orders table referencing users +CREATE TABLE IF NOT EXISTS orders ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE, + product_name TEXT NOT NULL, + total BIGINT NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); + +CREATE INDEX IF NOT EXISTS orders_user_id_idx ON orders(user_id); + +-- Seed sample data +INSERT INTO users (name, email) +VALUES ('Alice', 'alice@example.com'), + ('Bob', 'bob@example.com') +ON CONFLICT (email) DO NOTHING; + +INSERT INTO orders (user_id, product_name, total) +SELECT u.id, p.product_name, p.total +FROM users u +JOIN (VALUES + ('alice@example.com', 'Starter Pack', 4999), + ('alice@example.com', 'Premium Pack', 19999), + ('bob@example.com', 'Gift Card', 2500) +) AS p(email, product_name, total) + ON u.email = p.email +LEFT JOIN orders o ON o.user_id = u.id AND o.product_name = p.product_name +WHERE o.id IS NULL;