3 | | == DDL скрипта |
| 3 | {{{ |
| 4 | DROP TABLE IF EXISTS ORDER_BATCHES; |
| 5 | DROP TABLE IF EXISTS PAYMENTS; |
| 6 | DROP TABLE IF EXISTS ORDERS; |
| 7 | DROP TABLE IF EXISTS BATCHES; |
| 8 | DROP TABLE IF EXISTS PRODUCTS; |
| 9 | DROP TABLE IF EXISTS PRODUCERS; |
| 10 | DROP TABLE IF EXISTS CLIENTS; |
| 11 | DROP TABLE IF EXISTS USERS; |
| 12 | DROP TYPE IF EXISTS currency_enum; |
| 13 | DROP TYPE IF EXISTS payment_status_enum; |
| 14 | DROP TYPE IF EXISTS boolean_enum; |
5 | | {{{#!sql |
6 | | -- DDL for Deleting Tables |
7 | | DROP TABLE IF EXISTS ORDER_PRODUCT; |
8 | | DROP TABLE IF EXISTS INVOICE; |
9 | | DROP TABLE IF EXISTS PAYMENT; |
10 | | DROP TABLE IF EXISTS ORDER; |
11 | | DROP TABLE IF EXISTS TRANSPORT; |
12 | | DROP TABLE IF EXISTS RECEIVER; |
13 | | DROP TABLE IF EXISTS BUYER; |
14 | | DROP TABLE IF EXISTS PRODUCT; |
15 | | DROP TABLE IF EXISTS PRODUCER; |
16 | | |
17 | | -- DDL for Creating Tables |
18 | | |
19 | | -- Creating the PRODUCER table |
20 | | CREATE TABLE PRODUCER ( |
21 | | producer_id SERIAL PRIMARY KEY, |
22 | | company_name VARCHAR(100), |
23 | | country_of_origin VARCHAR(30), |
24 | | tax_id VARCHAR(20), |
25 | | registration_number VARCHAR(30), |
26 | | bank_account_number VARCHAR(20), |
27 | | bank_name VARCHAR(100), |
28 | | swift_number VARCHAR(20), |
29 | | iban VARCHAR(34), |
30 | | export_license_number VARCHAR(20) |
| 16 | CREATE TABLE USERS ( |
| 17 | id UUID PRIMARY KEY, |
| 18 | name VARCHAR(200) NOT NULL, |
| 19 | email VARCHAR(255) UNIQUE NOT NULL, |
| 20 | password TEXT NOT NULL, |
| 21 | is_admin BOOLEAN NOT NULL DEFAULT FALSE |
33 | | -- Creating the PRODUCT table |
34 | | CREATE TABLE PRODUCT ( |
35 | | product_id SERIAL PRIMARY KEY, |
36 | | name VARCHAR(50), |
37 | | hs_code VARCHAR(10), |
38 | | description TEXT, |
39 | | unit_of_measure VARCHAR(10), |
40 | | price DECIMAL(10, 2), |
41 | | producer_id INT REFERENCES PRODUCER(producer_id) |
| 24 | CREATE TABLE CLIENTS ( |
| 25 | id UUID PRIMARY KEY, |
| 26 | name VARCHAR(255) NOT NULL, |
| 27 | country VARCHAR(100), |
| 28 | registration_number VARCHAR(100), |
| 29 | tax_code VARCHAR(100), |
| 30 | contact_person VARCHAR(200), |
| 31 | phone_number VARCHAR(50), |
| 32 | billing_address TEXT, |
| 33 | shipping_address TEXT |
44 | | -- Creating the BUYER table |
45 | | CREATE TABLE BUYER ( |
46 | | buyer_id SERIAL PRIMARY KEY, |
47 | | company_name VARCHAR(100), |
48 | | billing_address VARCHAR(200), |
49 | | country VARCHAR(50), |
50 | | tax_id VARCHAR(20), |
51 | | registration_number VARCHAR(30) |
| 36 | CREATE TABLE PRODUCERS ( |
| 37 | id UUID PRIMARY KEY, |
| 38 | name VARCHAR(255) NOT NULL, |
| 39 | address TEXT, |
| 40 | country VARCHAR(100), |
| 41 | phone_number VARCHAR(50), |
| 42 | email VARCHAR(255) |
54 | | -- Creating the RECEIVER table |
55 | | CREATE TABLE RECEIVER ( |
56 | | receiver_id SERIAL PRIMARY KEY, |
57 | | company_name VARCHAR(100), |
58 | | shipping_address VARCHAR(200), |
59 | | country VARCHAR(50), |
60 | | phone_number VARCHAR(15), |
61 | | contact_person VARCHAR(100) |
| 45 | CREATE TABLE PRODUCTS ( |
| 46 | id UUID PRIMARY KEY, |
| 47 | name VARCHAR(255) NOT NULL, |
| 48 | description TEXT, |
| 49 | hs_code VARCHAR(50), |
| 50 | price NUMERIC(14,4) NOT NULL DEFAULT 0, |
| 51 | producer_id UUID REFERENCES PRODUCERS(id) ON DELETE SET NULL, |
| 52 | unit_of_measure VARCHAR(50) |
64 | | -- Creating the TRANSPORT table |
65 | | CREATE TABLE TRANSPORT ( |
66 | | transport_id SERIAL PRIMARY KEY, |
67 | | carrier_name VARCHAR(100), |
68 | | departure_point VARCHAR(50), |
69 | | arrival_point VARCHAR(50), |
70 | | estimated_departure DATE, |
71 | | estimated_arrival DATE, |
72 | | total_distance DECIMAL(10, 2), |
73 | | special_requirements TEXT, |
74 | | insurance_conditions VARCHAR(200), |
75 | | incoterm VARCHAR(20) |
| 55 | CREATE TABLE BATCHES ( |
| 56 | id UUID PRIMARY KEY, |
| 57 | product_id UUID REFERENCES PRODUCTS(id) ON DELETE CASCADE, |
| 58 | batch_code VARCHAR(100) NOT NULL, |
| 59 | production_date DATE, |
| 60 | expiration_date DATE, |
| 61 | net_weight NUMERIC(12,4), |
| 62 | gross_weight NUMERIC(12,4), |
| 63 | units_per_batch INTEGER |
78 | | -- Creating the ORDER table |
79 | | CREATE TABLE ORDER ( |
80 | | order_id SERIAL PRIMARY KEY, |
81 | | order_date DATE, |
82 | | estimated_delivery_date DATE, |
83 | | status VARCHAR(20), |
84 | | employee_id INT, |
85 | | buyer_id INT REFERENCES BUYER(buyer_id), |
86 | | receiver_id INT REFERENCES RECEIVER(receiver_id), |
87 | | transport_id INT REFERENCES TRANSPORT(transport_id) |
| 66 | CREATE TABLE TRANSPORTS ( |
| 67 | id UUID PRIMARY KEY, |
| 68 | name VARCHAR(255) NOT NULL, |
| 69 | departure_point VARCHAR(255), |
| 70 | arrival_point VARCHAR(255), |
| 71 | estimated_departure_date DATE, |
| 72 | estimated_arrival_date DATE, |
| 73 | incoterm VARCHAR(50), |
| 74 | insurance_conditions TEXT |
90 | | -- Creating the PAYMENT table |
91 | | CREATE TABLE PAYMENT ( |
92 | | payment_id SERIAL PRIMARY KEY, |
93 | | amount DECIMAL(10, 2), |
94 | | exchange_rate DECIMAL(10, 6), |
95 | | currency VARCHAR(3), |
96 | | payment_status VARCHAR(20), |
97 | | payment_method VARCHAR(20), |
98 | | due_date DATE, |
99 | | payment_date DATE, |
100 | | order_id INT REFERENCES ORDER(order_id) |
| 77 | CREATE TABLE ORDERS ( |
| 78 | id UUID PRIMARY KEY, |
| 79 | date DATE NOT NULL, |
| 80 | status VARCHAR(50), |
| 81 | estimated_delivery_date DATE, |
| 82 | buyer_id UUID REFERENCES CLIENTS(id) ON DELETE SET NULL, |
| 83 | receiver_id UUID REFERENCES CLIENTS(id) ON DELETE SET NULL, |
| 84 | transport_id UUID REFERENCES TRANSPORTS(id) ON DELETE SET NULL |
103 | | -- Creating the INVOICE table |
104 | | CREATE TABLE INVOICE ( |
105 | | invoice_key SERIAL PRIMARY KEY, |
106 | | invoice_date DATE, |
107 | | status VARCHAR(20), |
108 | | total_amount DECIMAL(10, 2), |
109 | | order_id INT REFERENCES ORDER(order_id) |
| 87 | CREATE TABLE PAYMENTS ( |
| 88 | id UUID PRIMARY KEY, |
| 89 | order_id UUID UNIQUE REFERENCES ORDERS(id) ON DELETE CASCADE, |
| 90 | amount NUMERIC(18,4) NOT NULL, |
| 91 | currency VARCHAR(10) DEFAULT 'USD', |
| 92 | due_date DATE, |
| 93 | exchange_rate NUMERIC(18,8) DEFAULT 1.0, |
| 94 | payment_date DATE, |
| 95 | payment_method VARCHAR(100), |
| 96 | payment_status VARCHAR(50) |
112 | | -- Creating the ORDER_PRODUCT table (Many-to-Many relationship between ORDER and PRODUCT) |
113 | | CREATE TABLE ORDER_PRODUCT ( |
114 | | order_id INT REFERENCES ORDER(order_id), |
115 | | product_id INT REFERENCES PRODUCT(product_id), |
116 | | PRIMARY KEY (order_id, product_id) |
| 99 | CREATE TABLE ORDER_BATCHES ( |
| 100 | id UUID PRIMARY KEY, |
| 101 | order_id UUID REFERENCES ORDERS(id) ON DELETE CASCADE, |
| 102 | batch_id UUID REFERENCES BATCHES(id) ON DELETE RESTRICT, |
| 103 | quantity INTEGER NOT NULL, |
| 104 | price_per_unit NUMERIC(14,4) NOT NULL, |
| 105 | total_price NUMERIC(18,4) NOT NULL, |
| 106 | created_at TIMESTAMP WITH TIME ZONE DEFAULT now(), |
| 107 | updated_at TIMESTAMP WITH TIME ZONE DEFAULT now() |
122 | | {{{#!sql |
123 | | INSERT INTO PRODUCER (company_name, country_of_origin, tax_id, registration_number, bank_account_number, bank_name, swift_number, iban, export_license_number) VALUES |
124 | | ('Producer A', 'Country X', 'TX123', 'RN123', 'BAN123', 'Bank A', 'SW123', 'IBAN123', 'EL123'); |
| 113 | {{{ |
| 114 | INSERT INTO USERS (id, name, email, password, is_admin) VALUES |
| 115 | ('11111111-1111-1111-1111-111111111111', 'Alice Admin', 'alice@example.com', 'hashed_password_1', TRUE), |
| 116 | ('22222222-2222-2222-2222-222222222222', 'Bob Buyer', 'bob@example.com', 'hashed_password_2', FALSE); |
126 | | INSERT INTO PRODUCT (name, hs_code, description, unit_of_measure, price, producer_id) VALUES |
127 | | ('Product 1', 'HS101', 'Description 1', 'Unit 1', 100.00, 1), |
128 | | ('Product 2', 'HS102', 'Description 2', 'Unit 2', 150.00, 1); |
| 118 | INSERT INTO CLIENTS (id, name, country, registration_number, tax_code, contact_person, phone_number, billing_address, shipping_address) VALUES |
| 119 | ('aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'Acme Imports', 'Italy', 'REG-IT-0001', 'TAXIT0001', 'Giulia Rossi', '+39 06 1234567', 'Via Roma 1, 00100 Roma, Italy', 'Port of Naples, Dock 5'), |
| 120 | ('bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb', 'Global Retailer', 'Germany', 'DE-REG-2020', 'DE-TAX-2020', 'Hans Müller', '+49 30 7654321', 'Hauptstrasse 10, 10115 Berlin, Germany', 'Warehouse 3, Berlin'); |
130 | | INSERT INTO BUYER (company_name, billing_address, country, tax_id, registration_number) VALUES |
131 | | ('Buyer A', 'Address 1', 'Country Y', 'TX456', 'RN456'); |
| 122 | INSERT INTO PRODUCERS (id, name, address, country, phone_number, email) VALUES |
| 123 | ('33333333-3333-3333-3333-333333333333', 'Producer Co.', 'Industrial Park 5, Zona A', 'Spain', '+34 91 1234567', 'sales@producerco.example'), |
| 124 | ('44444444-4444-4444-4444-444444444444', 'Farm Fresh Ltd.', 'Countryside Road 12', 'France', '+33 1 23456789', 'contact@farmfresh.example'); |
133 | | INSERT INTO RECEIVER (company_name, shipping_address, country, phone_number, contact_person) VALUES |
134 | | ('Receiver A', 'Shipping Address 1', 'Country Z', '1234567890', 'Contact A'); |
| 126 | INSERT INTO PRODUCTS (id, name, description, hs_code, price, producer_id, unit_of_measure) VALUES |
| 127 | ('55555555-5555-5555-5555-555555555555', 'Organic Olive Oil', 'Extra virgin olive oil, cold pressed', '150900', 12.5000, '33333333-3333-3333-3333-333333333333', 'L'), |
| 128 | ('66666666-6666-6666-6666-666666666666', 'Canned Tomatoes', 'San Marzano peeled tomatoes', '200210', 1.2000, '44444444-4444-4444-4444-444444444444', 'kg'); |
136 | | INSERT INTO TRANSPORT (carrier_name, departure_point, arrival_point, estimated_departure, estimated_arrival, total_distance, special_requirements, insurance_conditions, incoterm) VALUES |
137 | | ('Transport A', 'Point A', 'Point B', '2022-01-01', '2022-01-02', 1000.00, 'None', 'Condition A', 'FOB'); |
| 130 | INSERT INTO BATCHES (id, product_id, batch_code, production_date, expiration_date, net_weight, gross_weight, units_per_batch) VALUES |
| 131 | ('77777777-7777-7777-7777-777777777777', '55555555-5555-5555-5555-555555555555', 'OO-202509-A', '2025-06-01', '2027-06-01', 1000.0000, 1020.0000, 1000), |
| 132 | ('88888888-8888-8888-8888-888888888888', '66666666-6666-6666-6666-666666666666', 'CT-202509-01', '2025-07-15', '2028-07-15', 500.0000, 510.0000, 500); |
139 | | INSERT INTO ORDER (order_date, estimated_delivery_date, status, employee_id, buyer_id, receiver_id, transport_id) VALUES |
140 | | ('2022-01-01', '2022-02-01', 'Pending', 1, 1, 1, 1); |
| 134 | INSERT INTO TRANSPORTS (id, name, departure_point, arrival_point, estimated_departure_date, estimated_arrival_date, incoterm, insurance_conditions) VALUES |
| 135 | ('99999999-9999-9999-9999-999999999999', 'Mediterranean Sea Freight', 'Port of Valencia', 'Port of Naples', '2025-09-20', '2025-09-25', 'FOB', 'Standard cargo insurance'), |
| 136 | ('aaaaaaaa-0000-aaaa-0000-aaaaaaaa0000', 'Road Carrier EU', 'Berlin Warehouse', 'Acme Imports HQ', '2025-10-01', '2025-10-03', 'DAP', 'Carrier liability'); |
142 | | INSERT INTO PAYMENT (amount, exchange_rate, currency, payment_status, payment_method, due_date, payment_date, order_id) VALUES |
143 | | (1000.00, 1.000000, 'USD', 'Completed', 'Credit Card', '2022-01-15', '2022-01-10', 1); |
| 138 | INSERT INTO ORDERS (id, date, status, estimated_delivery_date, buyer_id, receiver_id, transport_id) VALUES |
| 139 | ('dddddddd-dddd-dddd-dddd-dddddddddddd', '2025-09-01', 'Pending', '2025-10-05', 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', 'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb', '99999999-9999-9999-9999-999999999999'), |
| 140 | ('eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee', '2025-09-10', 'Confirmed', '2025-10-10', 'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb', 'bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb', 'aaaaaaaa-0000-aaaa-0000-aaaaaaaa0000'); |
145 | | INSERT INTO INVOICE (invoice_date, status, total_amount, order_id) VALUES |
146 | | ('2022-01-10', 'Issued', 1000.00, 1); |
| 142 | INSERT INTO PAYMENTS (id, order_id, amount, currency, due_date, exchange_rate, payment_date, payment_method, payment_status) VALUES |
| 143 | ('ffffffff-ffff-ffff-ffff-ffffffffffff', 'dddddddd-dddd-dddd-dddd-dddddddddddd', 12500.0000, 'EUR', '2025-10-01', 1.00000000, NULL, 'Wire Transfer', 'Pending'), |
| 144 | ('11111111-aaaa-1111-aaaa-11111111aaaa', 'eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee', 600.0000, 'EUR', '2025-10-05', 1.00000000, '2025-09-15', 'Credit Card', 'Completed'); |
148 | | INSERT INTO ORDER_PRODUCT (order_id, product_id) VALUES |
149 | | (1, 1), |
150 | | (1, 2); |
| 146 | INSERT INTO ORDER_BATCHES (id, order_id, batch_id, quantity, price_per_unit, total_price, created_at, updated_at) VALUES |
| 147 | ('22222222-2222-2222-2222-222222222222', 'dddddddd-dddd-dddd-dddd-dddddddddddd', '77777777-7777-7777-7777-777777777777', 200, 12.5000, 2500.0000, now(), now()), |
| 148 | ('33333333-3333-3333-3333-333333333333', 'eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee', '88888888-8888-8888-8888-888888888888', 500, 1.2000, 600.0000, now(), now()); |