diff --git a/internal/database/migrations/20251107013921_create_marketings.down.sql b/internal/database/migrations/20251107013921_create_marketings.down.sql new file mode 100644 index 00000000..df4a0db9 --- /dev/null +++ b/internal/database/migrations/20251107013921_create_marketings.down.sql @@ -0,0 +1,5 @@ +DROP TABLE IF EXISTS marketing_delivery_products CASCADE; + +DROP TABLE IF EXISTS marketing_products CASCADE; + +DROP TABLE IF EXISTS marketings CASCADE; \ No newline at end of file diff --git a/internal/database/migrations/20251107013921_create_marketings.up.sql b/internal/database/migrations/20251107013921_create_marketings.up.sql new file mode 100644 index 00000000..d2a3e24f --- /dev/null +++ b/internal/database/migrations/20251107013921_create_marketings.up.sql @@ -0,0 +1,44 @@ +CREATE TABLE marketings ( + id BIGSERIAL PRIMARY KEY, + so_number VARCHAR(255) UNIQUE NOT NULL, + customer_id BIGINT NOT NULL, + so_docs VARCHAR(20), + so_date DATE NOT NULL, + sales_person_id BIGINT NOT NULL, + notes TEXT, + created_by BIGINT NOT NULL, + created_at TIMESTAMPTZ DEFAULT NOW(), + updated_at TIMESTAMPTZ DEFAULT NOW(), + deleted_at TIMESTAMPTZ +); + +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM pg_tables WHERE tablename = 'customers') THEN + ALTER TABLE marketings + ADD CONSTRAINT fk_marketings_customer_id + FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE RESTRICT; + END IF; + + IF EXISTS (SELECT 1 FROM pg_tables WHERE tablename = 'users') THEN + ALTER TABLE marketings + ADD CONSTRAINT fk_marketings_sales_person_id + FOREIGN KEY (sales_person_id) REFERENCES users(id) ON DELETE RESTRICT; + END IF; + + IF EXISTS (SELECT 1 FROM pg_tables WHERE tablename = 'users') THEN + ALTER TABLE marketings + ADD CONSTRAINT fk_marketings_created_by + FOREIGN KEY (created_by) REFERENCES users(id) ON DELETE RESTRICT; + END IF; +END $$; + +CREATE INDEX idx_marketings_customer_id ON marketings (customer_id); + +CREATE INDEX idx_marketings_sales_person_id ON marketings (sales_person_id); + +CREATE INDEX idx_marketings_created_by ON marketings (created_by); + +CREATE INDEX idx_marketings_so_date ON marketings (so_date); + +CREATE INDEX idx_marketings_deleted_at ON marketings (deleted_at); \ No newline at end of file diff --git a/internal/database/migrations/20251107015122_create_marketing_products.down.sql b/internal/database/migrations/20251107015122_create_marketing_products.down.sql new file mode 100644 index 00000000..c40efdb3 --- /dev/null +++ b/internal/database/migrations/20251107015122_create_marketing_products.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS marketing_products CASCADE; \ No newline at end of file diff --git a/internal/database/migrations/20251107015122_create_marketing_products.up.sql b/internal/database/migrations/20251107015122_create_marketing_products.up.sql new file mode 100644 index 00000000..5490f931 --- /dev/null +++ b/internal/database/migrations/20251107015122_create_marketing_products.up.sql @@ -0,0 +1,34 @@ +CREATE TABLE marketing_products ( + id BIGSERIAL PRIMARY KEY, + marketing_id BIGINT NOT NULL, + product_warehouse_id BIGINT NOT NULL, + qty NUMERIC(15, 3) NOT NULL, + unit_price NUMERIC(15, 3) NOT NULL, + avg_weight NUMERIC(15, 3) NOT NULL, + total_weight NUMERIC(15, 3) NOT NULL, + total_price NUMERIC(15, 3) NOT NULL, + created_at TIMESTAMPTZ DEFAULT NOW(), + updated_at TIMESTAMPTZ DEFAULT NOW(), + deleted_at TIMESTAMPTZ +); + +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM pg_tables WHERE tablename = 'marketings') THEN + ALTER TABLE marketing_products + ADD CONSTRAINT fk_marketing_products_marketing_id + FOREIGN KEY (marketing_id) REFERENCES marketings(id) ON DELETE CASCADE; + END IF; + + IF EXISTS (SELECT 1 FROM pg_tables WHERE tablename = 'product_warehouses') THEN + ALTER TABLE marketing_products + ADD CONSTRAINT fk_marketing_products_product_warehouse_id + FOREIGN KEY (product_warehouse_id) REFERENCES product_warehouses(id) ON DELETE RESTRICT; + END IF; +END $$; + +CREATE INDEX idx_marketing_products_marketing_id ON marketing_products (marketing_id); + +CREATE INDEX idx_marketing_products_product_warehouse_id ON marketing_products (product_warehouse_id); + +CREATE INDEX idx_marketing_products_deleted_at ON marketing_products (deleted_at); \ No newline at end of file diff --git a/internal/database/migrations/20251107015128_create_marketing_product_deliveries.down.sql b/internal/database/migrations/20251107015128_create_marketing_product_deliveries.down.sql new file mode 100644 index 00000000..20da9516 --- /dev/null +++ b/internal/database/migrations/20251107015128_create_marketing_product_deliveries.down.sql @@ -0,0 +1,2 @@ + +DROP TABLE IF EXISTS marketing_delivery_products CASCADE; \ No newline at end of file diff --git a/internal/database/migrations/20251107015128_create_marketing_product_deliveries.up.sql b/internal/database/migrations/20251107015128_create_marketing_product_deliveries.up.sql new file mode 100644 index 00000000..09625c16 --- /dev/null +++ b/internal/database/migrations/20251107015128_create_marketing_product_deliveries.up.sql @@ -0,0 +1,29 @@ +CREATE TABLE marketing_delivery_products ( + id BIGSERIAL PRIMARY KEY, + marketing_product_id BIGINT UNIQUE NOT NULL, + qty NUMERIC(15, 3) NOT NULL, + unit_price NUMERIC(15, 3) NOT NULL, + total_weight NUMERIC(15, 3) NOT NULL, + avg_weight NUMERIC(15, 3) NOT NULL, + total_price NUMERIC(15, 3) NOT NULL, + delivery_date TIMESTAMPTZ, + vehicle_number VARCHAR(50), + created_at TIMESTAMPTZ DEFAULT NOW(), + updated_at TIMESTAMPTZ DEFAULT NOW(), + deleted_at TIMESTAMPTZ +); + +DO $$ +BEGIN + IF EXISTS (SELECT 1 FROM pg_tables WHERE tablename = 'marketing_products') THEN + ALTER TABLE marketing_delivery_products + ADD CONSTRAINT fk_marketing_delivery_products_marketing_product_id + FOREIGN KEY (marketing_product_id) REFERENCES marketing_products(id) ON DELETE CASCADE; + END IF; +END $$; + +CREATE INDEX idx_marketing_delivery_products_marketing_product_id ON marketing_delivery_products (marketing_product_id); + +CREATE INDEX idx_marketing_delivery_products_delivery_date ON marketing_delivery_products (delivery_date); + +CREATE INDEX idx_marketing_delivery_products_deleted_at ON marketing_delivery_products (deleted_at); \ No newline at end of file