codeprinter
codeprinter
AISLES (
2 ID BIGINT PRIMARY KEY,
3 HALL_ID BIGINT NOT NULL,
4 NAME VARCHAR NOT NULL,
5 MANAGER BIGINT NOT NULL,
6 CREATED_AT TIMESTAMP NOT NULL,
7 CREATED_BY BIGINT NOT NULL,
8 UPDATED_AT TIMESTAMP NOT NULL,
9 UPDATED_BY BIGINT NOT NULL,
10 DELETED_AT TIMESTAMP,
11 DELETED_BY BIGINT
12 );
13 CREATE INDEX AISLES_NAME_index_az ON C##INVENTORY.AISLES (NAME);
14 CREATE INDEX AISLES_DELETED_AT_index_az ON C##INVENTORY.AISLES (DELETED_AT);
15 CREATE INDEX IDX_AISLES_DELETED_AT ON C##INVENTORY.AISLES (DELETED_AT);
16
17 CREATE TABLE C##INVENTORY.BRANDS (
18 ID BIGINT PRIMARY KEY,
19 SLUG VARCHAR NOT NULL UNIQUE,
20 NAME VARCHAR NOT NULL UNIQUE,
21 CREATED_AT TIMESTAMP NOT NULL,
22 UPDATED_AT TIMESTAMP NOT NULL,
23 DELETED_AT TIMESTAMP
24 );
25 CREATE INDEX BRANDS_DELETED_AT_index_az ON C##INVENTORY.BRANDS (DELETED_AT);
26 CREATE INDEX IDX_BRANDS_DELETED_AT ON C##INVENTORY.BRANDS (DELETED_AT);
27 COMMENT ON COLUMN C##INVENTORY.BRANDS.SLUG IS 'ex: "google"';
28 COMMENT ON COLUMN C##INVENTORY.BRANDS.NAME IS 'ex: "Google"';
29
30 CREATE TABLE C##INVENTORY.DELIVERIES (
31 ID BIGINT PRIMARY KEY,
32 REASON delivery_reason NOT NULL,
33 ACCEPTED BOOLEAN NOT NULL CHECK (ACCEPTED IN ('Y', 'N')),
34 PURCHASE_ORDER_ID BIGINT,
35 WAREHOUSE_ID BIGINT NOT NULL,
36 WAREHOUSE_EMPLOYEE_ID BIGINT NOT NULL,
37 SUPPLIER_ID BIGINT NOT NULL,
38 SUPPLIER_EMPLOYEE_ID BIGINT NOT NULL,
39 DELIVERED_AT TIMESTAMP NOT NULL
40 );
41
42 CREATE TABLE C##INVENTORY.DELIVERY_ITEMS (
43 DELIVERY_ID BIGINT REFERENCES C##INVENTORY.DELIVERIES(ID),
44 PHYSICAL_PRODUCT_ID BIGINT,
45 PRIMARY KEY (DELIVERY_ID, PHYSICAL_PRODUCT_ID)
46 );
47
48 CREATE TABLE C##INVENTORY.EMPLOYEES (
49 ID BIGINT PRIMARY KEY,
50 FIRST_NAME VARCHAR NOT NULL,
51 LAST_NAME VARCHAR NOT NULL,
52 EMAIL VARCHAR,
53 PHONE VARCHAR,
54 CREATED_AT TIMESTAMP NOT NULL,
55 CREATED_BY BIGINT NOT NULL,
56 UPDATED_AT TIMESTAMP NOT NULL,
57 UPDATED_BY BIGINT NOT NULL,
58 DELETED_AT TIMESTAMP,
59 DELETED_BY BIGINT
60 );
61 CREATE INDEX name ON C##INVENTORY.EMPLOYEES (FIRST_NAME, LAST_NAME);
62 CREATE INDEX EMPLOYEES_EMAIL_index_az ON C##INVENTORY.EMPLOYEES (EMAIL);
63 CREATE INDEX EMPLOYEES_DELETED_AT_index_az ON C##INVENTORY.EMPLOYEES (DELETED_AT);
64 CREATE INDEX IDX_EMPLOYEES_NAME ON C##INVENTORY.EMPLOYEES (FIRST_NAME, LAST_NAME);
65 CREATE INDEX IDX_EMPLOYEES_EMAIL ON C##INVENTORY.EMPLOYEES (EMAIL);
66 CREATE INDEX IDX_EMPLOYEES_DELETED_AT ON C##INVENTORY.EMPLOYEES (DELETED_AT);
67 ALTER TABLE C##INVENTORY.AISLES ADD CONSTRAINT FOREIGN KEY (MANAGER) REFERENCES
C##INVENTORY.EMPLOYEES(ID);
68
69 CREATE TABLE C##INVENTORY.HALLS (
70 ID BIGINT PRIMARY KEY,
71 WAREHOUSE_ID BIGINT NOT NULL,
72 NAME VARCHAR NOT NULL,
73 MANAGER BIGINT NOT NULL REFERENCES C##INVENTORY.EMPLOYEES(ID),
74 CREATED_AT TIMESTAMP NOT NULL,
75 CREATED_BY BIGINT NOT NULL,
76 UPDATED_AT TIMESTAMP NOT NULL,
77 UPDATED_BY BIGINT NOT NULL,
78 DELETED_AT TIMESTAMP,
79 DELETED_BY BIGINT
80 );
81 CREATE INDEX HALLS_NAME_index_az ON C##INVENTORY.HALLS (NAME);
82 CREATE INDEX HALLS_DELETED_AT_index_az ON C##INVENTORY.HALLS (DELETED_AT);
83 CREATE INDEX IDX_HALLS_DELETED_AT ON C##INVENTORY.HALLS (DELETED_AT);
84 ALTER TABLE C##INVENTORY.AISLES ADD CONSTRAINT FOREIGN KEY (HALL_ID) REFERENCES
C##INVENTORY.HALLS(ID);
85
86 CREATE TABLE C##INVENTORY.INVENTORIES (
87 ID BIGINT PRIMARY KEY,
88 NAME VARCHAR NOT NULL,
89 WAREHOUSE_ID BIGINT NOT NULL,
90 HALL_ID BIGINT REFERENCES C##INVENTORY.HALLS(ID),
91 AISLE_ID BIGINT REFERENCES C##INVENTORY.AISLES(ID),
92 PLANNED TIMESTAMP,
93 FINISHED TIMESTAMP,
94 CREATED_AT TIMESTAMP NOT NULL,
95 CREATED_BY BIGINT NOT NULL,
96 UPDATED_AT TIMESTAMP NOT NULL,
97 UPDATED_BY BIGINT NOT NULL
98 );
99
100 CREATE TABLE C##INVENTORY.INVENTORY_MEMBERS (
101 INVENTORY_ID BIGINT REFERENCES C##INVENTORY.INVENTORIES(ID),
102 WAREHOUSE_ID BIGINT,
103 EMPLOYEE_ID BIGINT,
104 PRIMARY KEY (INVENTORY_ID, WAREHOUSE_ID, EMPLOYEE_ID)
105 );
106
107 CREATE TABLE C##INVENTORY.INVENTORY_OBSERVATIONS (
108 ID BIGINT PRIMARY KEY,
109 INVENTORY_ID BIGINT REFERENCES C##INVENTORY.INVENTORIES(ID),
110 PHYSICAL_PRODUCT_ID BIGINT NOT NULL,
111 STATUS INVENTORY_STATUS NOT NULL,
112 MESSAGE TEXT,
113 CREATED_AT TIMESTAMP NOT NULL,
114 CREATED_BY BIGINT NOT NULL,
115 UPDATED_AT TIMESTAMP NOT NULL,
116 UPDATED_BY BIGINT NOT NULL,
117 DELETED_AT TIMESTAMP,
118 DELETED_BY BIGINT
119 );
120 CREATE INDEX INVENTORY_OBSERVATIONS_DELETED_AT_index_az ON
C##INVENTORY.INVENTORY_OBSERVATIONS (DELETED_AT);
121 CREATE INDEX IDX_INVENTORY_OBSERVATIONS_DELETED_AT ON
C##INVENTORY.INVENTORY_OBSERVATIONS (DELETED_AT);
122
123 CREATE TABLE C##INVENTORY.PHYSICAL_PRODUCTS (
124 ID BIGINT PRIMARY KEY,
125 PRODUCT_VERSION_ID BIGINT NOT NULL,
126 SNID VARCHAR(12) NOT NULL UNIQUE,
127 EXPIRATION TIMESTAMP,
128 REMARKS TEXT,
129 STORED BIGINT,
130 CREATED_AT TIMESTAMP NOT NULL,
131 UPDATED_AT TIMESTAMP NOT NULL,
132 DELETED_AT TIMESTAMP
133 );
134 CREATE INDEX PHYSICAL_PRODUCTS_DELETED_AT_index_az ON C##INVENTORY.PHYSICAL_PRODUCTS
(DELETED_AT);
135 CREATE INDEX IDX_PHYSICAL_PRODUCTS_DELETED_AT ON C##INVENTORY.PHYSICAL_PRODUCTS
(DELETED_AT);
136 COMMENT ON COLUMN C##INVENTORY.PHYSICAL_PRODUCTS.SNID IS 'serial number of this
product';
137 COMMENT ON COLUMN C##INVENTORY.PHYSICAL_PRODUCTS.EXPIRATION IS 'when Product has an
expiration date, null otherwise';
138 ALTER TABLE C##INVENTORY.DELIVERY_ITEMS ADD CONSTRAINT FOREIGN KEY
(PHYSICAL_PRODUCT_ID) REFERENCES C##INVENTORY.PHYSICAL_PRODUCTS(ID);
139 ALTER TABLE C##INVENTORY.INVENTORY_OBSERVATIONS ADD CONSTRAINT FOREIGN KEY
(PHYSICAL_PRODUCT_ID) REFERENCES C##INVENTORY.PHYSICAL_PRODUCTS(ID);
140
141 CREATE TABLE C##INVENTORY.PICKUPS (
142 ID BIGINT PRIMARY KEY,
143 REASON pickup_reason NOT NULL,
144 ACCEPTED BOOLEAN NOT NULL CHECK (ACCEPTED IN ('Y', 'N')),
145 WAREHOUSE_ID BIGINT NOT NULL,
146 WAREHOUSE_EMPLOYEE_ID BIGINT NOT NULL,
147 SUPPLIER_ID BIGINT NOT NULL,
148 SUPPLIER_EMPLOYEE_ID BIGINT NOT NULL,
149 DELIVERED_AT TIMESTAMP NOT NULL
150 );
151
152 CREATE TABLE C##INVENTORY.PICKUP_ITEMS (
153 PICKUP_ID BIGINT REFERENCES C##INVENTORY.PICKUPS(ID),
154 PHYSICAL_PRODUCT_ID BIGINT REFERENCES C##INVENTORY.PHYSICAL_PRODUCTS(ID),
155 PRIMARY KEY (PICKUP_ID, PHYSICAL_PRODUCT_ID)
156 );
157
158 CREATE TABLE C##INVENTORY.PRODUCTS (
159 ID BIGINT PRIMARY KEY,
160 SLUG VARCHAR NOT NULL UNIQUE,
161 NAME VARCHAR NOT NULL UNIQUE,
162 BRAND BIGINT REFERENCES C##INVENTORY.BRANDS(ID),
163 CATEGORY VARCHAR,
164 SUBCATEGORY VARCHAR,
165 WIDTH FLOAT NOT NULL,
166 LENGTH FLOAT NOT NULL,
167 HEIGHT FLOAT NOT NULL,
168 WEIGHT FLOAT NOT NULL,
169 REMARKS TEXT,
170 CREATED_AT TIMESTAMP NOT NULL,
171 UPDATED_AT TIMESTAMP NOT NULL,
172 DELETED_AT TIMESTAMP
173 );
174 CREATE INDEX PRODUCTS_DELETED_AT_index_az ON C##INVENTORY.PRODUCTS (DELETED_AT);
175 CREATE INDEX IDX_PRODUCTS_DELETED_AT ON C##INVENTORY.PRODUCTS (DELETED_AT);
176 COMMENT ON COLUMN C##INVENTORY.PRODUCTS.SLUG IS 'ex: "pixel-8-pro"';
177 COMMENT ON COLUMN C##INVENTORY.PRODUCTS.NAME IS 'ex: "Pixel 8 Pro"';
178 COMMENT ON COLUMN C##INVENTORY.PRODUCTS.CATEGORY IS 'ex: "Phones"';
179 COMMENT ON COLUMN C##INVENTORY.PRODUCTS.SUBCATEGORY IS 'ex: "Smartphones"';
180 COMMENT ON COLUMN C##INVENTORY.PRODUCTS.WIDTH IS 'typical width of the product in
millis, see PRODUCT_VERSIONS for the real one';
181 COMMENT ON COLUMN C##INVENTORY.PRODUCTS.LENGTH IS 'typical length of the product in
millis, see PRODUCT_VERSIONS for the real one';
182 COMMENT ON COLUMN C##INVENTORY.PRODUCTS.HEIGHT IS 'typical height of the product in
millis, see PRODUCT_VERSIONS for the real one';
183 COMMENT ON COLUMN C##INVENTORY.PRODUCTS.WEIGHT IS 'typical weight of the product in
grams, see PRODUCT_VERSIONS for the real one';
184 COMMENT ON COLUMN C##INVENTORY.PRODUCTS.REMARKS IS 'ex: fragile';
185
186 CREATE TABLE C##INVENTORY.PRODUCT_VERSIONS (
187 ID BIGINT PRIMARY KEY,
188 PRODUCT_ID BIGINT NOT NULL REFERENCES C##INVENTORY.PRODUCTS(ID),
189 SKU VARCHAR(12) NOT NULL UNIQUE,
190 EAN VARCHAR(13) NOT NULL UNIQUE,
191 NAME VARCHAR NOT NULL UNIQUE,
192 SPECS JSON NOT NULL,
193 WIDTH FLOAT NOT NULL,
194 LENGTH FLOAT NOT NULL,
195 HEIGHT FLOAT NOT NULL,
196 WEIGHT FLOAT NOT NULL,
197 REMARKS TEXT,
198 CREATED_AT TIMESTAMP NOT NULL,
199 UPDATED_AT TIMESTAMP NOT NULL,
200 DELETED_AT TIMESTAMP
201 );
202 CREATE INDEX PRODUCT_VERSIONS_DELETED_AT_index_az ON C##INVENTORY.PRODUCT_VERSIONS
(DELETED_AT);
203 CREATE INDEX IDX_PRODUCT_VERSIONS_DELETED_AT ON C##INVENTORY.PRODUCT_VERSIONS
(DELETED_AT);
204 COMMENT ON COLUMN C##INVENTORY.PRODUCT_VERSIONS.SKU IS 'internal id';
205 COMMENT ON COLUMN C##INVENTORY.PRODUCT_VERSIONS.EAN IS 'european id';
206 COMMENT ON COLUMN C##INVENTORY.PRODUCT_VERSIONS.NAME IS 'ex: "Pixel 8 Pro Menthe 128
Go"';
207 COMMENT ON COLUMN C##INVENTORY.PRODUCT_VERSIONS.SPECS IS 'specificities of this
version, ex: `{color: "Menthe", storage: 128}`';
208 COMMENT ON COLUMN C##INVENTORY.PRODUCT_VERSIONS.WIDTH IS 'in millis';
209 COMMENT ON COLUMN C##INVENTORY.PRODUCT_VERSIONS.LENGTH IS 'in millis';
210 COMMENT ON COLUMN C##INVENTORY.PRODUCT_VERSIONS.HEIGHT IS 'in millis';
211 COMMENT ON COLUMN C##INVENTORY.PRODUCT_VERSIONS.WEIGHT IS 'in grams';
212 ALTER TABLE C##INVENTORY.PHYSICAL_PRODUCTS ADD CONSTRAINT FOREIGN KEY
(PRODUCT_VERSION_ID) REFERENCES C##INVENTORY.PRODUCT_VERSIONS(ID);
213
214 CREATE TABLE C##INVENTORY.PURCHASE_ORDERS (
215 ID BIGINT PRIMARY KEY,
216 SUPPLIER_ID BIGINT NOT NULL,
217 PRICE DOUBLE NOT NULL,
218 CURRENCY global_currency NOT NULL CHECK (CURRENCY IN ('USD', 'EUR')),
219 DETAILS TEXT,
220 NOTES TEXT,
221 CREATED_AT TIMESTAMP NOT NULL,
222 CREATED_BY BIGINT NOT NULL,
223 UPDATED_AT TIMESTAMP NOT NULL,
224 UPDATED_BY BIGINT NOT NULL,
225 SENT_AT TIMESTAMP,
226 SENT_BY BIGINT,
227 PAID_AT TIMESTAMP,
228 DELIVERED_AT TIMESTAMP,
229 VALIDATED_AT TIMESTAMP,
230 VALIDATED_BY BIGINT
231 );
232 COMMENT ON COLUMN C##INVENTORY.PURCHASE_ORDERS.PRICE IS 'total price, computed from
items price x quantity';
233 COMMENT ON COLUMN C##INVENTORY.PURCHASE_ORDERS.DETAILS IS 'additional text for the
supplier';
234 COMMENT ON COLUMN C##INVENTORY.PURCHASE_ORDERS.NOTES IS 'internal text for employees';
235 COMMENT ON COLUMN C##INVENTORY.PURCHASE_ORDERS.SENT_AT IS 'can''t be updated once
sent';
236 ALTER TABLE C##INVENTORY.DELIVERIES ADD CONSTRAINT FOREIGN KEY (PURCHASE_ORDER_ID)
REFERENCES C##INVENTORY.PURCHASE_ORDERS(ID);
237
238 CREATE TABLE C##INVENTORY.PURCHASE_ORDER_ITEMS (
239 PURCHASE_ORDER_ID BIGINT REFERENCES C##INVENTORY.PURCHASE_ORDERS(ID),
240 PRODUCT_VERSION_ID BIGINT REFERENCES C##INVENTORY.PRODUCT_VERSIONS(ID),
241 QUANTITY INT NOT NULL,
242 PRICE DOUBLE NOT NULL,
243 CREATED_AT TIMESTAMP NOT NULL,
244 CREATED_BY BIGINT NOT NULL,
245 UPDATED_AT TIMESTAMP NOT NULL,
246 UPDATED_BY BIGINT NOT NULL,
247 PRIMARY KEY (PURCHASE_ORDER_ID, PRODUCT_VERSION_ID)
248 );
249
250 CREATE TABLE C##INVENTORY.RACKS (
251 ID BIGINT PRIMARY KEY,
252 AISLE_ID BIGINT NOT NULL REFERENCES C##INVENTORY.AISLES(ID),
253 NAME VARCHAR NOT NULL,
254 CREATED_AT TIMESTAMP NOT NULL,
255 CREATED_BY BIGINT NOT NULL,
256 UPDATED_AT TIMESTAMP NOT NULL,
257 UPDATED_BY BIGINT NOT NULL,
258 DELETED_AT TIMESTAMP,
259 DELETED_BY BIGINT
260 );
261 CREATE INDEX RACKS_NAME_index_az ON C##INVENTORY.RACKS (NAME);
262 CREATE INDEX RACKS_DELETED_AT_index_az ON C##INVENTORY.RACKS (DELETED_AT);
263 CREATE INDEX IDX_RACKS_DELETED_AT ON C##INVENTORY.RACKS (DELETED_AT);
264
265 CREATE TABLE C##INVENTORY.SHELF_POSITIONS (
266 ID BIGINT PRIMARY KEY,
267 SHELF_ID BIGINT NOT NULL,
268 NAME VARCHAR NOT NULL,
269 CREATED_AT TIMESTAMP NOT NULL,
270 CREATED_BY BIGINT NOT NULL,
271 UPDATED_AT TIMESTAMP NOT NULL,
272 UPDATED_BY BIGINT NOT NULL,
273 DELETED_AT TIMESTAMP,
274 DELETED_BY BIGINT
275 );
276 CREATE INDEX SHELF_POSITIONS_NAME_index_az ON C##INVENTORY.SHELF_POSITIONS (NAME);
277 CREATE INDEX SHELF_POSITIONS_DELETED_AT_index_az ON C##INVENTORY.SHELF_POSITIONS
(DELETED_AT);
278 CREATE INDEX IDX_SHELF_POSITIONS_DELETED_AT ON C##INVENTORY.SHELF_POSITIONS
(DELETED_AT);
279 ALTER TABLE C##INVENTORY.PHYSICAL_PRODUCTS ADD CONSTRAINT FOREIGN KEY (STORED)
REFERENCES C##INVENTORY.SHELF_POSITIONS(ID);
280
281 CREATE TABLE C##INVENTORY.SHELVES (
282 ID BIGINT PRIMARY KEY,
283 RACK_ID BIGINT NOT NULL REFERENCES C##INVENTORY.RACKS(ID),
284 NAME VARCHAR NOT NULL,
285 CREATED_AT TIMESTAMP NOT NULL,
286 CREATED_BY BIGINT NOT NULL,
287 UPDATED_AT TIMESTAMP NOT NULL,
288 UPDATED_BY BIGINT NOT NULL,
289 DELETED_AT TIMESTAMP,
290 DELETED_BY BIGINT
291 );
292 CREATE INDEX SHELVES_NAME_index_az ON C##INVENTORY.SHELVES (NAME);
293 CREATE INDEX SHELVES_DELETED_AT_index_az ON C##INVENTORY.SHELVES (DELETED_AT);
294 CREATE INDEX IDX_SHELVES_DELETED_AT ON C##INVENTORY.SHELVES (DELETED_AT);
295 ALTER TABLE C##INVENTORY.SHELF_POSITIONS ADD CONSTRAINT FOREIGN KEY (SHELF_ID)
REFERENCES C##INVENTORY.SHELVES(ID);
296
297 CREATE TABLE C##INVENTORY.SUPPLIERS (
298 ID BIGINT PRIMARY KEY,
299 NAME VARCHAR NOT NULL,
300 LEVEL INT NOT NULL,
301 CURRENCY global_currency NOT NULL CHECK (CURRENCY IN ('USD', 'EUR')),
302 CREATED_AT TIMESTAMP NOT NULL,
303 UPDATED_AT TIMESTAMP NOT NULL,
304 DELETED_AT TIMESTAMP
305 );
306 CREATE INDEX SUPPLIERS_NAME_index_az ON C##INVENTORY.SUPPLIERS (NAME);
307 CREATE INDEX SUPPLIERS_DELETED_AT_index_az ON C##INVENTORY.SUPPLIERS (DELETED_AT);
308 CREATE INDEX IDX_SUPPLIERS_NAME ON C##INVENTORY.SUPPLIERS (NAME);
309 CREATE INDEX IDX_SUPPLIERS_DELETED_AT ON C##INVENTORY.SUPPLIERS (DELETED_AT);
310 COMMENT ON COLUMN C##INVENTORY.SUPPLIERS.LEVEL IS 'the lower, the more priority is
given to this supplier';
311 ALTER TABLE C##INVENTORY.PURCHASE_ORDERS ADD CONSTRAINT FOREIGN KEY (SUPPLIER_ID)
REFERENCES C##INVENTORY.SUPPLIERS(ID);
312
313 CREATE TABLE C##INVENTORY.SUPPLIER_EMPLOYEES (
314 SUPPLIER_ID BIGINT REFERENCES C##INVENTORY.SUPPLIERS(ID),
315 EMPLOYEE_ID BIGINT REFERENCES C##INVENTORY.EMPLOYEES(ID),
316 ROLE supplier_role NOT NULL,
317 START TIMESTAMP,
318 END TIMESTAMP,
319 CREATED_AT TIMESTAMP NOT NULL,
320 CREATED_BY BIGINT NOT NULL,
321 UPDATED_AT TIMESTAMP NOT NULL,
322 UPDATED_BY BIGINT NOT NULL,
323 DELETED_AT TIMESTAMP,
324 DELETED_BY BIGINT,
325 PRIMARY KEY (SUPPLIER_ID, EMPLOYEE_ID)
326 );
327 CREATE INDEX SUPPLIER_EMPLOYEES_DELETED_AT_index_az ON C##INVENTORY.SUPPLIER_EMPLOYEES
(DELETED_AT);
328 CREATE INDEX IDX_SUPPLIER_EMPLOYEES_DELETED_AT ON C##INVENTORY.SUPPLIER_EMPLOYEES
(DELETED_AT);
329 ALTER TABLE C##INVENTORY.DELIVERIES ADD CONSTRAINT FOREIGN KEY (SUPPLIER_EMPLOYEE_ID)
REFERENCES C##INVENTORY.SUPPLIER_EMPLOYEES(EMPLOYEE_ID);
330 ALTER TABLE C##INVENTORY.PICKUPS ADD CONSTRAINT FOREIGN KEY (SUPPLIER_EMPLOYEE_ID)
REFERENCES C##INVENTORY.SUPPLIER_EMPLOYEES(EMPLOYEE_ID);
331 ALTER TABLE C##INVENTORY.DELIVERIES ADD CONSTRAINT FOREIGN KEY (SUPPLIER_ID)
REFERENCES C##INVENTORY.SUPPLIER_EMPLOYEES(SUPPLIER_ID);
332 ALTER TABLE C##INVENTORY.PICKUPS ADD CONSTRAINT FOREIGN KEY (SUPPLIER_ID) REFERENCES
C##INVENTORY.SUPPLIER_EMPLOYEES(SUPPLIER_ID);
333
334 CREATE TABLE C##INVENTORY.SUPPLIER_PRICES (
335 SUPPLIER_ID BIGINT REFERENCES C##INVENTORY.SUPPLIERS(ID),
336 PRODUCT_VERSION_ID BIGINT REFERENCES C##INVENTORY.PRODUCT_VERSIONS(ID),
337 PRICE DOUBLE NOT NULL,
338 CREATED_AT TIMESTAMP NOT NULL,
339 UPDATED_AT TIMESTAMP NOT NULL,
340 DELETED_AT TIMESTAMP,
341 PRIMARY KEY (SUPPLIER_ID, PRODUCT_VERSION_ID)
342 );
343 CREATE INDEX SUPPLIER_PRICES_DELETED_AT_index_az ON C##INVENTORY.SUPPLIER_PRICES
(DELETED_AT);
344 CREATE INDEX IDX_SUPPLIER_PRICES_DELETED_AT ON C##INVENTORY.SUPPLIER_PRICES
(DELETED_AT);
345
346 CREATE TABLE C##INVENTORY.WAREHOUSES (
347 ID BIGINT PRIMARY KEY,
348 NAME VARCHAR NOT NULL UNIQUE,
349 ADDRESS GLOBAL_ADDRESS NOT NULL,
350 MANAGER BIGINT NOT NULL REFERENCES C##INVENTORY.EMPLOYEES(ID),
351 CREATED_AT TIMESTAMP NOT NULL,
352 CREATED_BY BIGINT NOT NULL,
353 UPDATED_AT TIMESTAMP NOT NULL,
354 UPDATED_BY BIGINT NOT NULL,
355 DELETED_AT TIMESTAMP,
356 DELETED_BY BIGINT
357 );
358 CREATE INDEX WAREHOUSES_DELETED_AT_index_az ON C##INVENTORY.WAREHOUSES (DELETED_AT);
359 CREATE INDEX IDX_WAREHOUSES_DELETED_AT ON C##INVENTORY.WAREHOUSES (DELETED_AT);
360 ALTER TABLE C##INVENTORY.HALLS ADD CONSTRAINT FOREIGN KEY (WAREHOUSE_ID) REFERENCES
C##INVENTORY.WAREHOUSES(ID);
361 ALTER TABLE C##INVENTORY.INVENTORIES ADD CONSTRAINT FOREIGN KEY (WAREHOUSE_ID)
REFERENCES C##INVENTORY.WAREHOUSES(ID);
362
363 CREATE TABLE C##INVENTORY.WAREHOUSE_EMPLOYEES (
364 WAREHOUSE_ID BIGINT REFERENCES C##INVENTORY.WAREHOUSES(ID),
365 EMPLOYEE_ID BIGINT REFERENCES C##INVENTORY.EMPLOYEES(ID),
366 ROLE warehouse_role NOT NULL,
367 START TIMESTAMP,
368 END TIMESTAMP,
369 CREATED_AT TIMESTAMP NOT NULL,
370 CREATED_BY BIGINT NOT NULL,
371 UPDATED_AT TIMESTAMP NOT NULL,
372 UPDATED_BY BIGINT NOT NULL,
373 DELETED_AT TIMESTAMP,
374 DELETED_BY BIGINT,
375 PRIMARY KEY (WAREHOUSE_ID, EMPLOYEE_ID)
376 );
377 CREATE INDEX WAREHOUSE_EMPLOYEES_DELETED_AT_index_az ON
C##INVENTORY.WAREHOUSE_EMPLOYEES (DELETED_AT);
378 CREATE INDEX IDX_WAREHOUSE_EMPLOYEES_DELETED_AT ON C##INVENTORY.WAREHOUSE_EMPLOYEES
(DELETED_AT);
379 ALTER TABLE C##INVENTORY.DELIVERIES ADD CONSTRAINT FOREIGN KEY
(WAREHOUSE_EMPLOYEE_ID) REFERENCES C##INVENTORY.WAREHOUSE_EMPLOYEES(EMPLOYEE_ID);
380 ALTER TABLE C##INVENTORY.PICKUPS ADD CONSTRAINT FOREIGN KEY (WAREHOUSE_EMPLOYEE_ID)
REFERENCES C##INVENTORY.WAREHOUSE_EMPLOYEES(EMPLOYEE_ID);
381 ALTER TABLE C##INVENTORY.INVENTORY_MEMBERS ADD CONSTRAINT FOREIGN KEY (EMPLOYEE_ID)
REFERENCES C##INVENTORY.WAREHOUSE_EMPLOYEES(EMPLOYEE_ID);
382 ALTER TABLE C##INVENTORY.DELIVERIES ADD CONSTRAINT FOREIGN KEY (WAREHOUSE_ID)
REFERENCES C##INVENTORY.WAREHOUSE_EMPLOYEES(WAREHOUSE_ID);
383 ALTER TABLE C##INVENTORY.PICKUPS ADD CONSTRAINT FOREIGN KEY (WAREHOUSE_ID) REFERENCES
C##INVENTORY.WAREHOUSE_EMPLOYEES(WAREHOUSE_ID);
384 ALTER TABLE C##INVENTORY.INVENTORY_MEMBERS ADD CONSTRAINT FOREIGN KEY (WAREHOUSE_ID)
REFERENCES C##INVENTORY.WAREHOUSE_EMPLOYEES(WAREHOUSE_ID);
385
386 CREATE TABLE C##INVENTORY.WAREHOUSE_IDENTITY_PROOFS (
387 WAREHOUSE_ID BIGINT REFERENCES C##INVENTORY.WAREHOUSES(ID),
388 EMPLOYEE_ID BIGINT REFERENCES C##INVENTORY.EMPLOYEES(ID),
389 KIND identity_proof_kind,
390 VALUE VARCHAR NOT NULL,
391 EXPIRE TIMESTAMP,
392 CREATED_AT TIMESTAMP NOT NULL,
393 CREATED_BY BIGINT NOT NULL,
394 PRIMARY KEY (WAREHOUSE_ID, EMPLOYEE_ID, KIND)
395 );
396 COMMENT ON TABLE C##INVENTORY.WAREHOUSE_IDENTITY_PROOFS IS 'how to check the employee
is identified, can be several';
397
398 CREATE TABLE analytics.Entities (
399 _id ObjectId PRIMARY KEY,
400 kind string NOT NULL,
401 id string NOT NULL,
402 name string NOT NULL,
403 properties json NOT NULL,
404 createdAt timestamp NOT NULL,
405 updatedAt timestamp NOT NULL,
406 UNIQUE (kind, id)
407 );
408 CREATE INDEX Entities_name_index_az ON analytics.Entities (name);
409
410 CREATE TABLE analytics.Events (
411 _id ObjectId PRIMARY KEY,
412 id uuid NOT NULL UNIQUE,
413 name string NOT NULL,
414 source event_source NOT NULL,
415 details json NOT NULL,
416 entities json NOT NULL,
417 createdAt timestamp NOT NULL
418 );
419 CREATE INDEX Events_name_index_az ON analytics.Events (name);
420 CREATE INDEX Events_createdAt_index_az ON analytics.Events (createdAt);
421 COMMENT ON COLUMN analytics.Events.id IS 'UUIDv7 to be time ordered';
422 COMMENT ON COLUMN analytics.Events.name IS 'in form of `$context__$object__$action`';
423 COMMENT ON COLUMN analytics.Events.source IS 'the name of the system which emitted
this event';
424 COMMENT ON COLUMN analytics.Events.details IS 'any additional info for the event';
425 COMMENT ON COLUMN analytics.Events.entities IS '{[kind: string]: {id: string, name:
string}[]}';
426
427 CREATE TABLE billing.CustomerAddresses (
428 CustomerAddressesId bigint PRIMARY KEY,
429 Name varchar NOT NULL,
430 Street varchar NOT NULL,
431 City varchar NOT NULL,
432 State varchar NOT NULL,
433 ZipCode varchar NOT NULL,
434 Country bigint NOT NULL,
435 Complements text,
436 CreatedAt timestamp NOT NULL,
437 CreatedBy bigint NOT NULL,
438 DeletedAt timestamp,
439 DeletedBy bigint
440 );
441 CREATE INDEX CustomerAddresses_DeletedAt_index_az ON billing.CustomerAddresses
(DeletedAt);
442 CREATE INDEX IdxCustomerAddressesDeletedAt ON billing.CustomerAddresses (DeletedAt);
443
444 CREATE TABLE billing.CustomerMembers (
445 CustomerId bigint,
446 UserId bigint,
447 CanEdit boolean NOT NULL,
448 CanInvite boolean NOT NULL,
449 CanBuy boolean NOT NULL,
450 BudgetAllowance int,
451 CreatedAt timestamp NOT NULL,
452 CreatedBy bigint NOT NULL,
453 UpdatedAt timestamp NOT NULL,
454 UpdatedBy bigint NOT NULL,
455 DeletedAt timestamp,
456 DeletedBy bigint,
457 PRIMARY KEY (CustomerId, UserId)
458 );
459 CREATE INDEX CustomerMembers_DeletedAt_index_az ON billing.CustomerMembers
(DeletedAt);
460 CREATE INDEX IdxCustomerMembersDeletedAt ON billing.CustomerMembers (DeletedAt);
461
462 CREATE TABLE billing.CustomerPaymentMethods (
463 CustomerPaymentMethodId bigint PRIMARY KEY,
464 CustomerId bigint NOT NULL,
465 Name varchar NOT NULL,
466 Kind payment_kind NOT NULL CHECK (([Kind]='paypal' OR [Kind]='card')),
467 Details json NOT NULL CHECK ((isjson([Details])=(1))),
468 CreatedAt timestamp NOT NULL,
469 CreatedBy bigint NOT NULL,
470 UpdatedAt timestamp NOT NULL,
471 UpdatedBy bigint NOT NULL,
472 DeletedAt timestamp,
473 DeletedBy bigint
474 );
475 CREATE INDEX CustomerPaymentMethods_DeletedAt_index_az ON
billing.CustomerPaymentMethods (DeletedAt);
476 CREATE INDEX IdxCustomerPaymentMethodsDeletedAt ON billing.CustomerPaymentMethods
(DeletedAt);
477
478 CREATE TABLE billing.Customers (
479 CustomerId bigint PRIMARY KEY,
480 Name varchar NOT NULL,
481 BillingAddress bigint REFERENCES billing.CustomerAddresses(CustomerAddressesId),
482 Siret varchar,
483 TVA varchar,
484 CreatedAt timestamp NOT NULL,
485 CreatedBy bigint NOT NULL,
486 UpdatedAt timestamp NOT NULL,
487 UpdatedBy bigint NOT NULL,
488 DeletedAt timestamp,
489 DeletedBy bigint
490 );
491 CREATE INDEX Customers_DeletedAt_index_az ON billing.Customers (DeletedAt);
492 CREATE INDEX IdxCustomersDeletedAt ON billing.Customers (DeletedAt);
493 ALTER TABLE billing.CustomerMembers ADD CONSTRAINT FOREIGN KEY (CustomerId)
REFERENCES billing.Customers(CustomerId);
494 ALTER TABLE billing.CustomerPaymentMethods ADD CONSTRAINT FOREIGN KEY (CustomerId)
REFERENCES billing.Customers(CustomerId);
495
496 CREATE TABLE billing.InvoiceLines (
497 InvoiceId bigint,
498 Index int,
499 ProductVersionId bigint,
500 Description text,
501 Price double NOT NULL,
502 Quantity int NOT NULL,
503 PRIMARY KEY (InvoiceId, Index)
504 );
505
506 CREATE TABLE billing.Invoices (
507 InvoiceId bigint PRIMARY KEY,
508 Reference varchar NOT NULL UNIQUE,
509 CartId bigint,
510 CustomerId bigint NOT NULL REFERENCES billing.Customers(CustomerId),
511 BillingAddress bigint NOT NULL REFERENCES
billing.CustomerAddresses(CustomerAddressesId),
512 TotalPrice double NOT NULL,
513 Currency global_currency NOT NULL CHECK (([Currency]='USD' OR [Currency]='EUR')),
514 PaidAt timestamp,
515 CreatedAt timestamp NOT NULL,
516 CreatedBy bigint
517 );
518 ALTER TABLE billing.InvoiceLines ADD CONSTRAINT FOREIGN KEY (InvoiceId) REFERENCES
billing.Invoices(InvoiceId);
519 ALTER TABLE analytics.Events ADD CONSTRAINT FOREIGN KEY (entities) REFERENCES
billing.Invoices(InvoiceId);
520 ALTER TABLE analytics.Entities ADD CONSTRAINT FOREIGN KEY (id) REFERENCES
billing.Invoices(InvoiceId);
521
522 CREATE TABLE billing.Payments (
523 PaymentId bigint PRIMARY KEY,
524 InvoiceId bigint NOT NULL REFERENCES billing.Invoices(InvoiceId),
525 PaymentMethodId bigint REFERENCES
billing.CustomerPaymentMethods(CustomerPaymentMethodId),
526 Amount double NOT NULL,
527 Currency global_currency NOT NULL CHECK (([Currency]='USD' OR [Currency]='EUR')),
528 CreatedAt timestamp NOT NULL
529 );
530
531 CREATE TABLE catalog.assets (
532 id bigint PRIMARY KEY,
533 kind asset_kind NOT NULL,
534 format asset_format NOT NULL,
535 size asset_size NOT NULL,
536 path varchar NOT NULL,
537 alt varchar NOT NULL,
538 width int NOT NULL,
539 height int NOT NULL,
540 weight int NOT NULL,
541 created_at timestamp NOT NULL,
542 updated_at timestamp NOT NULL,
543 deleted_at timestamp
544 );
545 CREATE INDEX assets_deleted_at_index_az ON catalog.assets (deleted_at);
546 CREATE INDEX idx_assets_deleted_at ON catalog.assets (deleted_at);
547
548 CREATE TABLE catalog.categories (
549 id bigint PRIMARY KEY,
550 parent bigint REFERENCES catalog.categories(id),
551 depth int NOT NULL,
552 slug varchar NOT NULL UNIQUE,
553 name varchar NOT NULL,
554 description text,
555 description_html text,
556 created_at timestamp NOT NULL,
557 updated_at timestamp NOT NULL,
558 deleted_at timestamp
559 );
560 CREATE INDEX categories_deleted_at_index_az ON catalog.categories (deleted_at);
561 CREATE INDEX idx_categories_deleted_at ON catalog.categories (deleted_at);
562 COMMENT ON COLUMN catalog.categories.depth IS 'easily accessible information of number
of parents';
563
564 CREATE TABLE catalog.category_assets (
565 category_id bigint REFERENCES catalog.categories(id),
566 asset_id bigint REFERENCES catalog.assets(id),
567 placement category_asset_placement NOT NULL,
568 created_at timestamp NOT NULL,
569 updated_at timestamp NOT NULL,
570 deleted_at timestamp,
571 PRIMARY KEY (category_id, asset_id)
572 );
573 CREATE INDEX category_assets_deleted_at_index_az ON catalog.category_assets
(deleted_at);
574 CREATE INDEX idx_category_assets_deleted_at ON catalog.category_assets (deleted_at);
575
576 CREATE TABLE catalog.product_alternatives (
577 product_id bigint,
578 alternative_product_id bigint,
579 created_at timestamp NOT NULL,
580 updated_at timestamp NOT NULL,
581 deleted_at timestamp,
582 PRIMARY KEY (product_id, alternative_product_id)
583 );
584 CREATE INDEX product_alternatives_deleted_at_index_az ON catalog.product_alternatives
(deleted_at);
585 CREATE INDEX idx_product_alternatives_deleted_at ON catalog.product_alternatives
(deleted_at);
586
587 CREATE TABLE catalog.product_assets (
588 product_id bigint,
589 asset_id bigint REFERENCES catalog.assets(id),
590 placement category_asset_placement NOT NULL,
591 created_at timestamp NOT NULL,
592 updated_at timestamp NOT NULL,
593 deleted_at timestamp,
594 PRIMARY KEY (product_id, asset_id)
595 );
596 CREATE INDEX product_assets_deleted_at_index_az ON catalog.product_assets
(deleted_at);
597 CREATE INDEX idx_product_assets_deleted_at ON catalog.product_assets (deleted_at);
598
599 CREATE TABLE catalog.product_cross_sell_options (
600 product_id bigint,
601 product_version_id bigint,
602 label varchar NOT NULL,
603 created_at timestamp NOT NULL,
604 updated_at timestamp NOT NULL,
605 deleted_at timestamp,
606 PRIMARY KEY (product_id, product_version_id)
607 );
608 CREATE INDEX product_cross_sell_options_deleted_at_index_az ON
catalog.product_cross_sell_options (deleted_at);
609 CREATE INDEX idx_product_cross_sell_options_deleted_at ON
catalog.product_cross_sell_options (deleted_at);
610
611 CREATE TABLE catalog.product_review_assets (
612 product_review_id bigint,
613 asset_id bigint REFERENCES catalog.assets(id),
614 created_at timestamp NOT NULL,
615 created_by bigint NOT NULL,
616 deleted_at timestamp,
617 deleted_by bigint,
618 PRIMARY KEY (product_review_id, asset_id)
619 );
620 CREATE INDEX product_review_assets_deleted_at_index_az ON
catalog.product_review_assets (deleted_at);
621 CREATE INDEX idx_product_review_assets_deleted_at ON catalog.product_review_assets
(deleted_at);
622
623 CREATE TABLE catalog.product_review_feedbacks (
624 product_review_id bigint,
625 kind feedback_kind,
626 created_at timestamp NOT NULL,
627 created_by bigint,
628 deleted_at timestamp,
629 deleted_by bigint,
630 PRIMARY KEY (product_review_id, created_by, kind)
631 );
632 CREATE INDEX product_review_feedbacks_deleted_at_index_az ON
catalog.product_review_feedbacks (deleted_at);
633 CREATE INDEX idx_product_review_feedbacks_deleted_at ON
catalog.product_review_feedbacks (deleted_at);
634
635 CREATE TABLE catalog.product_reviews (
636 id bigint PRIMARY KEY,
637 product_id bigint NOT NULL,
638 product_version_id bigint,
639 invoice_id bigint REFERENCES billing.Invoices(InvoiceId),
640 physical_product_id bigint REFERENCES C##INVENTORY.PHYSICAL_PRODUCTS(ID),
641 rating int NOT NULL,
642 review text,
643 created_at timestamp NOT NULL,
644 created_by bigint NOT NULL,
645 updated_at timestamp NOT NULL,
646 updated_by bigint NOT NULL,
647 deleted_at timestamp,
648 deleted_by bigint
649 );
650 CREATE INDEX product_reviews_deleted_at_index_az ON catalog.product_reviews
(deleted_at);
651 CREATE INDEX idx_product_reviews_deleted_at ON catalog.product_reviews (deleted_at);
652 ALTER TABLE catalog.product_review_assets ADD CONSTRAINT FOREIGN KEY
(product_review_id) REFERENCES catalog.product_reviews(id);
653 ALTER TABLE catalog.product_review_feedbacks ADD CONSTRAINT FOREIGN KEY
(product_review_id) REFERENCES catalog.product_reviews(id);
654
655 CREATE TABLE catalog.product_version_assets (
656 product_version_id bigint,
657 asset_id bigint REFERENCES catalog.assets(id),
658 placement category_asset_placement NOT NULL,
659 created_at timestamp NOT NULL,
660 updated_at timestamp NOT NULL,
661 deleted_at timestamp,
662 PRIMARY KEY (product_version_id, asset_id)
663 );
664 CREATE INDEX product_version_assets_deleted_at_index_az ON
catalog.product_version_assets (deleted_at);
665 CREATE INDEX idx_product_version_assets_deleted_at ON catalog.product_version_assets
(deleted_at);
666
667 CREATE TABLE catalog.product_versions (
668 id bigint PRIMARY KEY REFERENCES C##INVENTORY.PRODUCT_VERSIONS(ID),
669 product_id bigint NOT NULL,
670 name varchar NOT NULL,
671 specs json NOT NULL,
672 price double NOT NULL,
673 stock int NOT NULL,
674 created_at timestamp NOT NULL,
675 updated_at timestamp NOT NULL,
676 deleted_at timestamp
677 );
678 CREATE INDEX product_versions_deleted_at_index_az ON catalog.product_versions
(deleted_at);
679 CREATE INDEX idx_product_versions_deleted_at ON catalog.product_versions (deleted_at);
680 COMMENT ON COLUMN catalog.product_versions.specs IS 'ex: `{color: "Bleu Azur",
storage: 128}`';
681 COMMENT ON COLUMN catalog.product_versions.stock IS 'informative stock, may not be
accurate';
682 ALTER TABLE catalog.product_cross_sell_options ADD CONSTRAINT FOREIGN KEY
(product_version_id) REFERENCES catalog.product_versions(id);
683 ALTER TABLE catalog.product_version_assets ADD CONSTRAINT FOREIGN KEY
(product_version_id) REFERENCES catalog.product_versions(id);
684 ALTER TABLE catalog.product_reviews ADD CONSTRAINT FOREIGN KEY (product_version_id)
REFERENCES catalog.product_versions(id);
685 ALTER TABLE billing.InvoiceLines ADD CONSTRAINT FOREIGN KEY (ProductVersionId)
REFERENCES catalog.product_versions(id);
686
687 CREATE TABLE catalog.products (
688 id bigint PRIMARY KEY REFERENCES C##INVENTORY.PRODUCTS(ID),
689 slug varchar NOT NULL UNIQUE,
690 name varchar NOT NULL,
691 category_id bigint NOT NULL REFERENCES catalog.categories(id),
692 description text,
693 description_html text,
694 versions json NOT NULL,
695 attributes json NOT NULL,
696 stock int NOT NULL,
697 created_at timestamp NOT NULL,
698 updated_at timestamp NOT NULL,
699 deleted_at timestamp
700 );
701 CREATE INDEX products_deleted_at_index_az ON catalog.products (deleted_at);
702 CREATE INDEX idx_products_deleted_at ON catalog.products (deleted_at);
703 COMMENT ON COLUMN catalog.products.description IS 'TODO: handle i18n';
704 COMMENT ON COLUMN catalog.products.versions IS 'ex: `[{key: "color", label: "Couleur",
values: [{name: "Bleu Azur", value: "#95bbe2"}]}, {key: "storage", name: "Taille",
values: [{name: "128GB", value: 128}]}]`';
705 COMMENT ON COLUMN catalog.products.attributes IS 'ex: `[{key: "Marque", value:
"Google"}]`';
706 COMMENT ON COLUMN catalog.products.stock IS 'informative stock, may not be accurate';
707 ALTER TABLE catalog.product_versions ADD CONSTRAINT FOREIGN KEY (product_id)
REFERENCES catalog.products(id);
708 ALTER TABLE catalog.product_cross_sell_options ADD CONSTRAINT FOREIGN KEY
(product_id) REFERENCES catalog.products(id);
709 ALTER TABLE catalog.product_alternatives ADD CONSTRAINT FOREIGN KEY (product_id)
REFERENCES catalog.products(id);
710 ALTER TABLE catalog.product_alternatives ADD CONSTRAINT FOREIGN KEY
(alternative_product_id) REFERENCES catalog.products(id);
711 ALTER TABLE catalog.product_assets ADD CONSTRAINT FOREIGN KEY (product_id) REFERENCES
catalog.products(id);
712 ALTER TABLE catalog.product_reviews ADD CONSTRAINT FOREIGN KEY (product_id)
REFERENCES catalog.products(id);
713
714 CREATE TABLE crm.CampaignMessages (
715 id bigint PRIMARY KEY,
716 campaign_id bigint NOT NULL,
717 contact_id bigint NOT NULL,
718 social_id bigint,
719 sent_to varchar NOT NULL,
720 created_at timestamp NOT NULL,
721 sent_at timestamp,
722 opened_at timestamp,
723 clicked_at timestamp
724 );
725 CREATE INDEX campaign_id ON crm.CampaignMessages (campaign_id);
726 CREATE INDEX contact_id ON crm.CampaignMessages (contact_id);
727 CREATE INDEX social_id ON crm.CampaignMessages (social_id);
728 COMMENT ON COLUMN crm.CampaignMessages.sent_to IS 'can be email, phone number, social
account... depending on campaign kind';
729
730 CREATE TABLE crm.Campaigns (
731 id bigint PRIMARY KEY,
732 name varchar NOT NULL,
733 status campaign_status NOT NULL,
734 starts timestamp,
735 ends timestamp,
736 kind campaign_kind NOT NULL,
737 audience text NOT NULL,
738 subject varchar,
739 message text,
740 created_at timestamp NOT NULL,
741 created_by bigint,
742 updated_at timestamp NOT NULL,
743 updated_by bigint,
744 deleted_at timestamp,
745 deleted_by bigint
746 );
747 CREATE INDEX Campaigns_deleted_at_index_az ON crm.Campaigns (deleted_at);
748 CREATE INDEX idx_campaigns_deleted_at ON crm.Campaigns (deleted_at);
749 COMMENT ON COLUMN crm.Campaigns.audience IS 'DSL for selecting the audience, from
crm.People for email & sms or from crm.SocialAccounts for others';
750 COMMENT ON COLUMN crm.Campaigns.message IS 'HTML with templating using recipient
info';
751 ALTER TABLE crm.CampaignMessages ADD CONSTRAINT FOREIGN KEY (campaign_id) REFERENCES
crm.Campaigns(id);
752
753 CREATE TABLE crm.Coupons (
754 id bigint PRIMARY KEY,
755 discount_id bigint NOT NULL,
756 code varchar NOT NULL UNIQUE,
757 expire_at timestamp,
758 created_at timestamp NOT NULL,
759 created_by bigint NOT NULL,
760 updated_at timestamp NOT NULL,
761 updated_by bigint NOT NULL,
762 deleted_at timestamp NOT NULL,
763 deleted_by bigint NOT NULL
764 );
765 CREATE INDEX discount_id ON crm.Coupons (discount_id);
766 CREATE INDEX idx_coupons_deleted_at ON crm.Coupons (deleted_at);
767 COMMENT ON COLUMN crm.Coupons.code IS 'public code to use the discount';
768
769 CREATE TABLE crm.Discounts (
770 id bigint PRIMARY KEY,
771 name varchar NOT NULL,
772 description varchar NOT NULL,
773 kind discount_kind NOT NULL,
774 value double NOT NULL,
775 enable_at timestamp,
776 expire_at timestamp,
777 created_at timestamp NOT NULL,
778 created_by bigint NOT NULL,
779 updated_at timestamp NOT NULL,
780 updated_by bigint NOT NULL,
781 deleted_at timestamp NOT NULL,
782 deleted_by bigint NOT NULL
783 );
784 CREATE INDEX idx_discounts_deleted_at ON crm.Discounts (deleted_at);
785 ALTER TABLE crm.Coupons ADD CONSTRAINT FOREIGN KEY (discount_id) REFERENCES
crm.Discounts(id);
786
787 CREATE TABLE crm.IssueMessageReactions (
788 id bigint PRIMARY KEY,
789 message_id bigint NOT NULL,
790 kind reaction_kind NOT NULL,
791 created_at timestamp NOT NULL,
792 created_by bigint NOT NULL,
793 deleted_at timestamp,
794 deleted_by bigint
795 );
796 CREATE INDEX IssueMessageReactions_deleted_at_index_az ON crm.IssueMessageReactions
(deleted_at);
797 CREATE INDEX idx_issue_message_reactions_deleted_at ON crm.IssueMessageReactions
(deleted_at);
798 CREATE INDEX message_id ON crm.IssueMessageReactions (message_id);
799
800 CREATE TABLE crm.IssueMessages (
801 id bigint PRIMARY KEY,
802 issue_id bigint NOT NULL,
803 content text NOT NULL,
804 created_at timestamp NOT NULL,
805 created_by bigint NOT NULL,
806 updated_at timestamp NOT NULL,
807 updated_by bigint NOT NULL
808 );
809 CREATE INDEX issue_id ON crm.IssueMessages (issue_id);
810 ALTER TABLE crm.IssueMessageReactions ADD CONSTRAINT FOREIGN KEY (message_id)
REFERENCES crm.IssueMessages(id);
811
812 CREATE TABLE crm.Issues (
813 id bigint PRIMARY KEY,
814 subject varchar NOT NULL,
815 created_at timestamp NOT NULL,
816 created_by bigint NOT NULL,
817 closed_at timestamp,
818 closed_by bigint
819 );
820 CREATE INDEX Issues_closed_at_index_az ON crm.Issues (closed_at);
821 CREATE INDEX idx_issues_closed_at ON crm.Issues (closed_at);
822 ALTER TABLE crm.IssueMessages ADD CONSTRAINT FOREIGN KEY (issue_id) REFERENCES
crm.Issues(id);
823
824 CREATE TABLE crm.LoyaltyCards (
825 );
826
827 CREATE TABLE crm.OrganizationMembers (
828 person_id bigint,
829 organization_id bigint,
830 role varchar NOT NULL,
831 created_at timestamp NOT NULL,
832 created_by bigint,
833 updated_at timestamp NOT NULL,
834 updated_by bigint,
835 deleted_at timestamp,
836 deleted_by bigint,
837 PRIMARY KEY (person_id, organization_id)
838 );
839 CREATE INDEX OrganizationMembers_deleted_at_index_az ON crm.OrganizationMembers
(deleted_at);
840 CREATE INDEX idx_organization_members_deleted_at ON crm.OrganizationMembers
(deleted_at);
841 CREATE INDEX organization_id ON crm.OrganizationMembers (organization_id);
842
843 CREATE TABLE crm.Organizations (
844 id bigint PRIMARY KEY,
845 name varchar NOT NULL,
846 created_at timestamp NOT NULL,
847 created_by bigint,
848 updated_at timestamp NOT NULL,
849 updated_by bigint,
850 deleted_at timestamp,
851 deleted_by bigint
852 );
853 CREATE INDEX Organizations_deleted_at_index_az ON crm.Organizations (deleted_at);
854 CREATE INDEX idx_organizations_deleted_at ON crm.Organizations (deleted_at);
855 ALTER TABLE crm.OrganizationMembers ADD CONSTRAINT FOREIGN KEY (organization_id)
REFERENCES crm.Organizations(id);
856
857 CREATE TABLE crm.People (
858 id bigint PRIMARY KEY,
859 name varchar NOT NULL,
860 email varchar,
861 phone varchar,
862 created_at timestamp NOT NULL,
863 created_by bigint,
864 updated_at timestamp NOT NULL,
865 updated_by bigint,
866 deleted_at timestamp,
867 deleted_by bigint
868 );
869 CREATE INDEX People_deleted_at_index_az ON crm.People (deleted_at);
870 CREATE INDEX idx_people_deleted_at ON crm.People (deleted_at);
871 ALTER TABLE crm.OrganizationMembers ADD CONSTRAINT FOREIGN KEY (person_id) REFERENCES
crm.People(id);
872 ALTER TABLE crm.CampaignMessages ADD CONSTRAINT FOREIGN KEY (contact_id) REFERENCES
crm.People(id);
873
874 CREATE TABLE crm.ProductPicks (
875 );
876
877 CREATE TABLE crm.SocialAccounts (
878 id bigint PRIMARY KEY,
879 network social_network NOT NULL,
880 username varchar NOT NULL,
881 owner_kind social_account_owner_kind,
882 owner_id bigint REFERENCES crm.People(id),
883 created_at timestamp NOT NULL,
884 created_by bigint,
885 updated_at timestamp NOT NULL,
886 updated_by bigint,
887 deleted_at timestamp,
888 deleted_by bigint
889 );
890 CREATE INDEX SocialAccounts_deleted_at_index_az ON crm.SocialAccounts (deleted_at);
891 CREATE INDEX idx_social_accounts_deleted_at ON crm.SocialAccounts (deleted_at);
892 ALTER TABLE crm.CampaignMessages ADD CONSTRAINT FOREIGN KEY (social_id) REFERENCES
crm.SocialAccounts(id);
893
894 CREATE TABLE identity.AuthLogs (
895 id bigint PRIMARY KEY,
896 user_id bigint,
897 email varchar,
898 event auth_event NOT NULL,
899 ip varchar NOT NULL,
900 ip_location geography,
901 user_agent varchar NOT NULL,
902 device_id bigint NOT NULL,
903 created_at timestamp NOT NULL
904 );
905 CREATE INDEX device_id ON identity.AuthLogs (device_id);
906 CREATE INDEX user_id ON identity.AuthLogs (user_id);
907
908 CREATE TABLE identity.Credentials (
909 user_id bigint,
910 provider auth_provider,
911 provider_id varchar,
912 provider_data json CHECK (json_valid(`provider_data`)),
913 used_last timestamp NOT NULL,
914 used_count int NOT NULL,
915 created_at timestamp NOT NULL,
916 updated_at timestamp NOT NULL,
917 PRIMARY KEY (user_id, provider, provider_id)
918 );
919 COMMENT ON COLUMN identity.Credentials.provider IS 'the used provider';
920 COMMENT ON COLUMN identity.Credentials.provider_id IS 'the user id from the provider,
in case of password, stores the hashed password with the salt';
921 COMMENT ON COLUMN identity.Credentials.updated_at IS 'for password change mostly';
922
923 CREATE TABLE identity.Devices (
924 id bigint PRIMARY KEY,
925 sid uuid NOT NULL UNIQUE,
926 user_agent varchar NOT NULL,
927 created_at timestamp NOT NULL
928 );
929 COMMENT ON TABLE identity.Devices IS 'a device is a browser tagged by a random id in
its session';
930 COMMENT ON COLUMN identity.Devices.sid IS 'a unique id stored in the browser to track
it when not logged';
931 COMMENT ON COLUMN identity.Devices.created_at IS 'first time this device is seen';
932 ALTER TABLE identity.AuthLogs ADD CONSTRAINT FOREIGN KEY (device_id) REFERENCES
identity.Devices(id);
933
934 CREATE TABLE identity.PasswordResets (
935 id bigint PRIMARY KEY,
936 email varchar NOT NULL,
937 token varchar NOT NULL,
938 requested_at timestamp NOT NULL,
939 expire_at timestamp NOT NULL,
940 used_at timestamp
941 );
942 CREATE INDEX PasswordResets_email_index_az ON identity.PasswordResets (email);
943 CREATE INDEX PasswordResets_token_index_az ON identity.PasswordResets (token);
944 CREATE INDEX idx_email ON identity.PasswordResets (email);
945 CREATE INDEX idx_token ON identity.PasswordResets (token);
946 COMMENT ON COLUMN identity.PasswordResets.token IS 'the key sent by email to allow to
change the password without being logged';
947
948 CREATE TABLE identity.TrustedDevices (
949 user_id bigint,
950 device_id bigint REFERENCES identity.Devices(id),
951 name varchar,
952 kind device_kind,
953 usage device_usage,
954 used_last timestamp NOT NULL,
955 created_at timestamp NOT NULL,
956 deleted_at timestamp,
957 PRIMARY KEY (user_id, device_id)
958 );
959 CREATE INDEX TrustedDevices_deleted_at_index_az ON identity.TrustedDevices
(deleted_at);
960 CREATE INDEX device_id ON identity.TrustedDevices (device_id);
961 CREATE INDEX idx_deleted_at ON identity.TrustedDevices (deleted_at);
962 COMMENT ON TABLE identity.TrustedDevices IS 'users can add a device to their trusted
ones, so they will have longer session and less security validations';
963
964 CREATE TABLE identity.UserDevices (
965 user_id bigint,
966 device_id bigint REFERENCES identity.Devices(id),
967 linked_at timestamp NOT NULL,
968 unlinked_at timestamp,
969 PRIMARY KEY (user_id, device_id)
970 );
971 CREATE INDEX device_id ON identity.UserDevices (device_id);
972 COMMENT ON TABLE identity.UserDevices IS 'created on user login to know which users
are using which devices';
973 COMMENT ON COLUMN identity.UserDevices.linked_at IS 'on login';
974 COMMENT ON COLUMN identity.UserDevices.unlinked_at IS 'on logout';
975
976 CREATE TABLE identity.Users (
977 id bigint PRIMARY KEY,
978 first_name varchar NOT NULL,
979 last_name varchar NOT NULL,
980 username varchar NOT NULL UNIQUE,
981 email varchar NOT NULL UNIQUE,
982 settings json NOT NULL CHECK (json_valid(`settings`)),
983 created_at timestamp NOT NULL,
984 updated_at timestamp NOT NULL,
985 deleted_at timestamp
986 );
987 CREATE INDEX name ON identity.Users (first_name, last_name);
988 CREATE INDEX Users_deleted_at_index_az ON identity.Users (deleted_at);
989 CREATE INDEX idx_deleted_at ON identity.Users (deleted_at);
990 CREATE INDEX idx_name ON identity.Users (first_name, last_name);
991 ALTER TABLE identity.Credentials ADD CONSTRAINT FOREIGN KEY (user_id) REFERENCES
identity.Users(id);
992 ALTER TABLE identity.UserDevices ADD CONSTRAINT FOREIGN KEY (user_id) REFERENCES
identity.Users(id);
993 ALTER TABLE identity.TrustedDevices ADD CONSTRAINT FOREIGN KEY (user_id) REFERENCES
identity.Users(id);
994 ALTER TABLE identity.AuthLogs ADD CONSTRAINT FOREIGN KEY (user_id) REFERENCES
identity.Users(id);
995 ALTER TABLE C##INVENTORY.EMPLOYEES ADD CONSTRAINT FOREIGN KEY (CREATED_BY) REFERENCES
identity.Users(id);
996 ALTER TABLE C##INVENTORY.EMPLOYEES ADD CONSTRAINT FOREIGN KEY (UPDATED_BY) REFERENCES
identity.Users(id);
997 ALTER TABLE C##INVENTORY.EMPLOYEES ADD CONSTRAINT FOREIGN KEY (DELETED_BY) REFERENCES
identity.Users(id);
998 ALTER TABLE C##INVENTORY.WAREHOUSES ADD CONSTRAINT FOREIGN KEY (CREATED_BY)
REFERENCES identity.Users(id);
999 ALTER TABLE C##INVENTORY.WAREHOUSES ADD CONSTRAINT FOREIGN KEY (UPDATED_BY)
REFERENCES identity.Users(id);
1000 ALTER TABLE C##INVENTORY.WAREHOUSES ADD CONSTRAINT FOREIGN KEY (DELETED_BY)
REFERENCES identity.Users(id);
1001 ALTER TABLE C##INVENTORY.HALLS ADD CONSTRAINT FOREIGN KEY (CREATED_BY) REFERENCES
identity.Users(id);
1002 ALTER TABLE C##INVENTORY.HALLS ADD CONSTRAINT FOREIGN KEY (UPDATED_BY) REFERENCES
identity.Users(id);
1003 ALTER TABLE C##INVENTORY.HALLS ADD CONSTRAINT FOREIGN KEY (DELETED_BY) REFERENCES
identity.Users(id);
1004 ALTER TABLE C##INVENTORY.AISLES ADD CONSTRAINT FOREIGN KEY (CREATED_BY) REFERENCES
identity.Users(id);
1005 ALTER TABLE C##INVENTORY.AISLES ADD CONSTRAINT FOREIGN KEY (UPDATED_BY) REFERENCES
identity.Users(id);
1006 ALTER TABLE C##INVENTORY.AISLES ADD CONSTRAINT FOREIGN KEY (DELETED_BY) REFERENCES
identity.Users(id);
1007 ALTER TABLE C##INVENTORY.RACKS ADD CONSTRAINT FOREIGN KEY (CREATED_BY) REFERENCES
identity.Users(id);
1008 ALTER TABLE C##INVENTORY.RACKS ADD CONSTRAINT FOREIGN KEY (UPDATED_BY) REFERENCES
identity.Users(id);
1009 ALTER TABLE C##INVENTORY.RACKS ADD CONSTRAINT FOREIGN KEY (DELETED_BY) REFERENCES
identity.Users(id);
1010 ALTER TABLE C##INVENTORY.SHELVES ADD CONSTRAINT FOREIGN KEY (CREATED_BY) REFERENCES
identity.Users(id);
1011 ALTER TABLE C##INVENTORY.SHELVES ADD CONSTRAINT FOREIGN KEY (UPDATED_BY) REFERENCES
identity.Users(id);
1012 ALTER TABLE C##INVENTORY.SHELVES ADD CONSTRAINT FOREIGN KEY (DELETED_BY) REFERENCES
identity.Users(id);
1013 ALTER TABLE C##INVENTORY.SHELF_POSITIONS ADD CONSTRAINT FOREIGN KEY (CREATED_BY)
REFERENCES identity.Users(id);
1014 ALTER TABLE C##INVENTORY.SHELF_POSITIONS ADD CONSTRAINT FOREIGN KEY (UPDATED_BY)
REFERENCES identity.Users(id);
1015 ALTER TABLE C##INVENTORY.SHELF_POSITIONS ADD CONSTRAINT FOREIGN KEY (DELETED_BY)
REFERENCES identity.Users(id);
1016 ALTER TABLE C##INVENTORY.WAREHOUSE_EMPLOYEES ADD CONSTRAINT FOREIGN KEY (CREATED_BY)
REFERENCES identity.Users(id);
1017 ALTER TABLE C##INVENTORY.WAREHOUSE_EMPLOYEES ADD CONSTRAINT FOREIGN KEY (UPDATED_BY)
REFERENCES identity.Users(id);
1018 ALTER TABLE C##INVENTORY.WAREHOUSE_EMPLOYEES ADD CONSTRAINT FOREIGN KEY (DELETED_BY)
REFERENCES identity.Users(id);
1019 ALTER TABLE C##INVENTORY.WAREHOUSE_IDENTITY_PROOFS ADD CONSTRAINT FOREIGN KEY
(CREATED_BY) REFERENCES identity.Users(id);
1020 ALTER TABLE C##INVENTORY.SUPPLIER_EMPLOYEES ADD CONSTRAINT FOREIGN KEY (CREATED_BY)
REFERENCES identity.Users(id);
1021 ALTER TABLE C##INVENTORY.SUPPLIER_EMPLOYEES ADD CONSTRAINT FOREIGN KEY (UPDATED_BY)
REFERENCES identity.Users(id);
1022 ALTER TABLE C##INVENTORY.SUPPLIER_EMPLOYEES ADD CONSTRAINT FOREIGN KEY (DELETED_BY)
REFERENCES identity.Users(id);
1023 ALTER TABLE C##INVENTORY.PURCHASE_ORDERS ADD CONSTRAINT FOREIGN KEY (CREATED_BY)
REFERENCES identity.Users(id);
1024 ALTER TABLE C##INVENTORY.PURCHASE_ORDERS ADD CONSTRAINT FOREIGN KEY (UPDATED_BY)
REFERENCES identity.Users(id);
1025 ALTER TABLE C##INVENTORY.PURCHASE_ORDERS ADD CONSTRAINT FOREIGN KEY (SENT_BY)
REFERENCES identity.Users(id);
1026 ALTER TABLE C##INVENTORY.PURCHASE_ORDERS ADD CONSTRAINT FOREIGN KEY (VALIDATED_BY)
REFERENCES identity.Users(id);
1027 ALTER TABLE C##INVENTORY.PURCHASE_ORDER_ITEMS ADD CONSTRAINT FOREIGN KEY (CREATED_BY)
REFERENCES identity.Users(id);
1028 ALTER TABLE C##INVENTORY.PURCHASE_ORDER_ITEMS ADD CONSTRAINT FOREIGN KEY (UPDATED_BY)
REFERENCES identity.Users(id);
1029 ALTER TABLE C##INVENTORY.INVENTORIES ADD CONSTRAINT FOREIGN KEY (CREATED_BY)
REFERENCES identity.Users(id);
1030 ALTER TABLE C##INVENTORY.INVENTORIES ADD CONSTRAINT FOREIGN KEY (UPDATED_BY)
REFERENCES identity.Users(id);
1031 ALTER TABLE C##INVENTORY.INVENTORY_OBSERVATIONS ADD CONSTRAINT FOREIGN KEY
(CREATED_BY) REFERENCES identity.Users(id);
1032 ALTER TABLE C##INVENTORY.INVENTORY_OBSERVATIONS ADD CONSTRAINT FOREIGN KEY
(UPDATED_BY) REFERENCES identity.Users(id);
1033 ALTER TABLE C##INVENTORY.INVENTORY_OBSERVATIONS ADD CONSTRAINT FOREIGN KEY
(DELETED_BY) REFERENCES identity.Users(id);
1034 ALTER TABLE catalog.product_reviews ADD CONSTRAINT FOREIGN KEY (created_by)
REFERENCES identity.Users(id);
1035 ALTER TABLE catalog.product_reviews ADD CONSTRAINT FOREIGN KEY (updated_by)
REFERENCES identity.Users(id);
1036 ALTER TABLE catalog.product_reviews ADD CONSTRAINT FOREIGN KEY (deleted_by)
REFERENCES identity.Users(id);
1037 ALTER TABLE catalog.product_review_assets ADD CONSTRAINT FOREIGN KEY (created_by)
REFERENCES identity.Users(id);
1038 ALTER TABLE catalog.product_review_assets ADD CONSTRAINT FOREIGN KEY (deleted_by)
REFERENCES identity.Users(id);
1039 ALTER TABLE catalog.product_review_feedbacks ADD CONSTRAINT FOREIGN KEY (created_by)
REFERENCES identity.Users(id);
1040 ALTER TABLE catalog.product_review_feedbacks ADD CONSTRAINT FOREIGN KEY (deleted_by)
REFERENCES identity.Users(id);
1041 ALTER TABLE billing.CustomerAddresses ADD CONSTRAINT FOREIGN KEY (CreatedBy)
REFERENCES identity.Users(id);
1042 ALTER TABLE billing.CustomerAddresses ADD CONSTRAINT FOREIGN KEY (DeletedBy)
REFERENCES identity.Users(id);
1043 ALTER TABLE billing.Customers ADD CONSTRAINT FOREIGN KEY (CreatedBy) REFERENCES
identity.Users(id);
1044 ALTER TABLE billing.Customers ADD CONSTRAINT FOREIGN KEY (UpdatedBy) REFERENCES
identity.Users(id);
1045 ALTER TABLE billing.Customers ADD CONSTRAINT FOREIGN KEY (DeletedBy) REFERENCES
identity.Users(id);
1046 ALTER TABLE billing.CustomerMembers ADD CONSTRAINT FOREIGN KEY (UserId) REFERENCES
identity.Users(id);
1047 ALTER TABLE billing.CustomerMembers ADD CONSTRAINT FOREIGN KEY (CreatedBy) REFERENCES
identity.Users(id);
1048 ALTER TABLE billing.CustomerMembers ADD CONSTRAINT FOREIGN KEY (UpdatedBy) REFERENCES
identity.Users(id);
1049 ALTER TABLE billing.CustomerMembers ADD CONSTRAINT FOREIGN KEY (DeletedBy) REFERENCES
identity.Users(id);
1050 ALTER TABLE billing.CustomerPaymentMethods ADD CONSTRAINT FOREIGN KEY (CreatedBy)
REFERENCES identity.Users(id);
1051 ALTER TABLE billing.CustomerPaymentMethods ADD CONSTRAINT FOREIGN KEY (UpdatedBy)
REFERENCES identity.Users(id);
1052 ALTER TABLE billing.CustomerPaymentMethods ADD CONSTRAINT FOREIGN KEY (DeletedBy)
REFERENCES identity.Users(id);
1053 ALTER TABLE billing.Invoices ADD CONSTRAINT FOREIGN KEY (CreatedBy) REFERENCES
identity.Users(id);
1054 ALTER TABLE crm.People ADD CONSTRAINT FOREIGN KEY (created_by) REFERENCES
identity.Users(id);
1055 ALTER TABLE crm.People ADD CONSTRAINT FOREIGN KEY (updated_by) REFERENCES
identity.Users(id);
1056 ALTER TABLE crm.People ADD CONSTRAINT FOREIGN KEY (deleted_by) REFERENCES
identity.Users(id);
1057 ALTER TABLE crm.Organizations ADD CONSTRAINT FOREIGN KEY (created_by) REFERENCES
identity.Users(id);
1058 ALTER TABLE crm.Organizations ADD CONSTRAINT FOREIGN KEY (updated_by) REFERENCES
identity.Users(id);
1059 ALTER TABLE crm.Organizations ADD CONSTRAINT FOREIGN KEY (deleted_by) REFERENCES
identity.Users(id);
1060 ALTER TABLE crm.OrganizationMembers ADD CONSTRAINT FOREIGN KEY (created_by)
REFERENCES identity.Users(id);
1061 ALTER TABLE crm.OrganizationMembers ADD CONSTRAINT FOREIGN KEY (updated_by)
REFERENCES identity.Users(id);
1062 ALTER TABLE crm.OrganizationMembers ADD CONSTRAINT FOREIGN KEY (deleted_by)
REFERENCES identity.Users(id);
1063 ALTER TABLE crm.SocialAccounts ADD CONSTRAINT FOREIGN KEY (created_by) REFERENCES
identity.Users(id);
1064 ALTER TABLE crm.SocialAccounts ADD CONSTRAINT FOREIGN KEY (updated_by) REFERENCES
identity.Users(id);
1065 ALTER TABLE crm.SocialAccounts ADD CONSTRAINT FOREIGN KEY (deleted_by) REFERENCES
identity.Users(id);
1066 ALTER TABLE crm.Campaigns ADD CONSTRAINT FOREIGN KEY (created_by) REFERENCES
identity.Users(id);
1067 ALTER TABLE crm.Campaigns ADD CONSTRAINT FOREIGN KEY (updated_by) REFERENCES
identity.Users(id);
1068 ALTER TABLE crm.Campaigns ADD CONSTRAINT FOREIGN KEY (deleted_by) REFERENCES
identity.Users(id);
1069 ALTER TABLE crm.Issues ADD CONSTRAINT FOREIGN KEY (created_by) REFERENCES
identity.Users(id);
1070 ALTER TABLE crm.Issues ADD CONSTRAINT FOREIGN KEY (closed_by) REFERENCES
identity.Users(id);
1071 ALTER TABLE crm.IssueMessages ADD CONSTRAINT FOREIGN KEY (created_by) REFERENCES
identity.Users(id);
1072 ALTER TABLE crm.IssueMessages ADD CONSTRAINT FOREIGN KEY (updated_by) REFERENCES
identity.Users(id);
1073 ALTER TABLE crm.IssueMessageReactions ADD CONSTRAINT FOREIGN KEY (created_by)
REFERENCES identity.Users(id);
1074 ALTER TABLE crm.IssueMessageReactions ADD CONSTRAINT FOREIGN KEY (deleted_by)
REFERENCES identity.Users(id);
1075 ALTER TABLE crm.Discounts ADD CONSTRAINT FOREIGN KEY (created_by) REFERENCES
identity.Users(id);
1076 ALTER TABLE crm.Discounts ADD CONSTRAINT FOREIGN KEY (updated_by) REFERENCES
identity.Users(id);
1077 ALTER TABLE crm.Discounts ADD CONSTRAINT FOREIGN KEY (deleted_by) REFERENCES
identity.Users(id);
1078 ALTER TABLE crm.Coupons ADD CONSTRAINT FOREIGN KEY (created_by) REFERENCES
identity.Users(id);
1079 ALTER TABLE crm.Coupons ADD CONSTRAINT FOREIGN KEY (updated_by) REFERENCES
identity.Users(id);
1080 ALTER TABLE crm.Coupons ADD CONSTRAINT FOREIGN KEY (deleted_by) REFERENCES
identity.Users(id);
1081 ALTER TABLE analytics.Events ADD CONSTRAINT FOREIGN KEY (entities) REFERENCES
identity.Users(id);
1082 ALTER TABLE analytics.Entities ADD CONSTRAINT FOREIGN KEY (id) REFERENCES
identity.Users(id);
1083
1084 CREATE TABLE referential.Cities (
1085 CityId bigint PRIMARY KEY,
1086 StateId bigint NOT NULL,
1087 Name varchar NOT NULL,
1088 CreatedAt timestamp NOT NULL,
1089 DeletedAt timestamp
1090 );
1091 CREATE INDEX Cities_Name_index_az ON referential.Cities (Name);
1092 CREATE INDEX IDX_Cities_StateId ON referential.Cities (StateId);
1093 CREATE INDEX IDX_Cities_Name ON referential.Cities (Name);
1094 COMMENT ON TABLE referential.Cities IS 'used for auto-competes';
1095
1096 CREATE TABLE referential.Countries (
1097 CountryId bigint PRIMARY KEY,
1098 Code varchar NOT NULL UNIQUE,
1099 Name varchar NOT NULL UNIQUE,
1100 CreatedAt timestamp NOT NULL,
1101 DeletedAt timestamp
1102 );
1103 COMMENT ON TABLE referential.Countries IS 'needs to be referenced for legal reasons';
1104 ALTER TABLE billing.CustomerAddresses ADD CONSTRAINT FOREIGN KEY (Country) REFERENCES
referential.Countries(CountryId);
1105
1106 CREATE TABLE referential.States (
1107 StateId bigint PRIMARY KEY,
1108 CountryId bigint NOT NULL REFERENCES referential.Countries(CountryId),
1109 Code varchar NOT NULL,
1110 Name varchar NOT NULL,
1111 CreatedAt timestamp NOT NULL,
1112 DeletedAt timestamp
1113 );
1114 CREATE INDEX States_Code_index_az ON referential.States (Code);
1115 CREATE INDEX States_Name_index_az ON referential.States (Name);
1116 CREATE INDEX IDX_States_CountryId ON referential.States (CountryId);
1117 CREATE INDEX IDX_States_Code ON referential.States (Code);
1118 CREATE INDEX IDX_States_Name ON referential.States (Name);
1119 COMMENT ON TABLE referential.States IS 'used for auto-competes';
1120 ALTER TABLE referential.Cities ADD CONSTRAINT FOREIGN KEY (StateId) REFERENCES
referential.States(StateId);
1121
1122 CREATE TABLE shipping.Carriers (
1123 _id ObjectId PRIMARY KEY,
1124 id bigint NOT NULL UNIQUE,
1125 registration varchar NOT NULL,
1126 licensePlate varchar NOT NULL,
1127 cargoWidth float NOT NULL,
1128 cargoLength float NOT NULL,
1129 cargoHeight float NOT NULL,
1130 cargoWeight float NOT NULL,
1131 createdAt timestamp NOT NULL,
1132 createdBy bigint NOT NULL REFERENCES identity.Users(id),
1133 updatedAt timestamp NOT NULL,
1134 updatedBy bigint NOT NULL REFERENCES identity.Users(id),
1135 deletedAt timestamp,
1136 deletedBy bigint REFERENCES identity.Users(id)
1137 );
1138 CREATE INDEX Carriers_registration_index_az ON shipping.Carriers (registration);
1139 CREATE INDEX Carriers_deletedAt_index_az ON shipping.Carriers (deletedAt);
1140 COMMENT ON COLUMN shipping.Carriers.cargoWidth IS 'inner cargo width in millimeters';
1141 COMMENT ON COLUMN shipping.Carriers.cargoLength IS 'inner cargo length in
millimeters';
1142 COMMENT ON COLUMN shipping.Carriers.cargoHeight IS 'inner cargo height in
millimeters';
1143 COMMENT ON COLUMN shipping.Carriers.cargoWeight IS 'maximum weight for the cargo, in
kilograms';
1144
1145 CREATE TABLE shipping.ShipmentItems (
1146 _id ObjectId PRIMARY KEY,
1147 shipmentId bigint NOT NULL,
1148 physicalProductId bigint NOT NULL REFERENCES C##INVENTORY.PHYSICAL_PRODUCTS(ID),
1149 invoiceId bigint NOT NULL REFERENCES billing.InvoiceLines(InvoiceId),
1150 invoiceLine int NOT NULL REFERENCES billing.InvoiceLines(Index),
1151 deliveredAt timestamp NOT NULL,
1152 deliveredTo bigint NOT NULL REFERENCES identity.Users(id),
1153 UNIQUE (shipmentId, physicalProductId)
1154 );
1155 CREATE INDEX ShipmentItems_invoiceId_index_az ON shipping.ShipmentItems (invoiceId);
1156 COMMENT ON COLUMN shipping.ShipmentItems.deliveredTo IS 'the User who got the
delivered package';
1157
1158 CREATE TABLE shipping.Shipments (
1159 _id ObjectId PRIMARY KEY,
1160 id bigint NOT NULL UNIQUE,
1161 carrierId bigint NOT NULL REFERENCES shipping.Carriers(id),
1162 createdAt timestamp NOT NULL,
1163 collectedAt timestamp NOT NULL,
1164 collectedBy bigint NOT NULL REFERENCES identity.Users(id),
1165 packagedAt timestamp NOT NULL,
1166 packagedBy bigint NOT NULL REFERENCES identity.Users(id),
1167 loadedAt timestamp NOT NULL,
1168 loadedBy bigint NOT NULL REFERENCES identity.Users(id),
1169 deliveredAt timestamp NOT NULL,
1170 deliveredBy bigint NOT NULL REFERENCES identity.Users(id)
1171 );
1172 ALTER TABLE shipping.ShipmentItems ADD CONSTRAINT FOREIGN KEY (shipmentId) REFERENCES
shipping.Shipments(id);
1173
1174 CREATE TABLE shopping.buyinglist_admins (
1175 buyinglist_id bigint,
1176 admin_id bigint REFERENCES identity.Users(id),
1177 created_at timestamp NOT NULL DEFAULT `now()`,
1178 deleted_at timestamp,
1179 PRIMARY KEY (buyinglist_id, admin_id)
1180 );
1181 CREATE INDEX buyinglist_admins_deleted_at_index_az ON shopping.buyinglist_admins
(deleted_at);
1182 CREATE INDEX buyinglist_admins_deleted_at_idx ON shopping.buyinglist_admins
(deleted_at);
1183
1184 CREATE TABLE shopping.buyinglist_guests (
1185 id bigint PRIMARY KEY,
1186 buyinglist_id bigint NOT NULL,
1187 name varchar NOT NULL,
1188 user_id bigint REFERENCES identity.Users(id),
1189 created_at timestamp NOT NULL DEFAULT `now()`,
1190 deleted_at timestamp
1191 );
1192 CREATE INDEX buyinglist_guests_user_id_index_az ON shopping.buyinglist_guests
(user_id);
1193 CREATE INDEX buyinglist_guests_deleted_at_index_az ON shopping.buyinglist_guests
(deleted_at);
1194 CREATE INDEX buyinglist_guests_deleted_at_idx ON shopping.buyinglist_guests
(deleted_at);
1195 CREATE INDEX buyinglist_guests_user_id_idx ON shopping.buyinglist_guests (user_id);
1196
1197 CREATE TABLE shopping.buyinglist_items (
1198 id bigint PRIMARY KEY,
1199 buyinglist_id bigint NOT NULL,
1200 product_id bigint NOT NULL REFERENCES catalog.products(id),
1201 preferences json,
1202 quantity int,
1203 created_at timestamp NOT NULL DEFAULT `now()`,
1204 created_by bigint NOT NULL REFERENCES identity.Users(id),
1205 deleted_at timestamp,
1206 deleted_by bigint REFERENCES identity.Users(id)
1207 );
1208 CREATE INDEX buyinglist_items_buyinglist_id_index_az ON shopping.buyinglist_items
(buyinglist_id);
1209 CREATE INDEX buyinglist_items_product_id_index_az ON shopping.buyinglist_items
(product_id);
1210 CREATE INDEX buyinglist_items_deleted_at_index_az ON shopping.buyinglist_items
(deleted_at);
1211 CREATE INDEX buyinglist_items_buyinglist_id_idx ON shopping.buyinglist_items
(buyinglist_id);
1212 CREATE INDEX buyinglist_items_deleted_at_idx ON shopping.buyinglist_items
(deleted_at);
1213 CREATE INDEX buyinglist_items_product_id_idx ON shopping.buyinglist_items
(product_id);
1214
1215 CREATE TABLE shopping.buyinglist_participation_items (
1216 participation_id bigint,
1217 item_id bigint REFERENCES shopping.buyinglist_items(id),
1218 quantity int NOT NULL,
1219 PRIMARY KEY (participation_id, item_id)
1220 );
1221
1222 CREATE TABLE shopping.buyinglist_participations (
1223 id bigint PRIMARY KEY,
1224 guest_id bigint NOT NULL REFERENCES shopping.buyinglist_guests(id),
1225 amount double,
1226 message text,
1227 created_at timestamp NOT NULL DEFAULT `now()`
1228 );
1229 CREATE INDEX buyinglist_participations_guest_id_index_az ON
shopping.buyinglist_participations (guest_id);
1230 CREATE INDEX buyinglist_participations_guest_id_idx ON
shopping.buyinglist_participations (guest_id);
1231 ALTER TABLE shopping.buyinglist_participation_items ADD CONSTRAINT FOREIGN KEY
(participation_id) REFERENCES shopping.buyinglist_participations(id);
1232
1233 CREATE TABLE shopping.buyinglists (
1234 id bigint PRIMARY KEY,
1235 name varchar NOT NULL,
1236 date timestamp,
1237 active boolean NOT NULL,
1238 close_at timestamp,
1239 description text NOT NULL,
1240 contact_email varchar,
1241 created_at timestamp NOT NULL DEFAULT `now()`,
1242 created_by bigint NOT NULL REFERENCES identity.Users(id),
1243 updated_at timestamp NOT NULL,
1244 updated_by bigint NOT NULL REFERENCES identity.Users(id),
1245 deleted_at timestamp,
1246 deleted_by bigint REFERENCES identity.Users(id)
1247 );
1248 CREATE INDEX buyinglists_name_index_az ON shopping.buyinglists (name);
1249 CREATE INDEX buyinglists_active_index_az ON shopping.buyinglists (active);
1250 CREATE INDEX buyinglists_deleted_at_index_az ON shopping.buyinglists (deleted_at);
1251 CREATE INDEX buyinglists_active_idx ON shopping.buyinglists (active);
1252 CREATE INDEX buyinglists_deleted_at_idx ON shopping.buyinglists (deleted_at);
1253 CREATE INDEX buyinglists_name_idx ON shopping.buyinglists (name);
1254 COMMENT ON TABLE shopping.buyinglists IS 'like "wedding list"';
1255 ALTER TABLE shopping.buyinglist_admins ADD CONSTRAINT FOREIGN KEY (buyinglist_id)
REFERENCES shopping.buyinglists(id);
1256 ALTER TABLE shopping.buyinglist_guests ADD CONSTRAINT FOREIGN KEY (buyinglist_id)
REFERENCES shopping.buyinglists(id);
1257 ALTER TABLE shopping.buyinglist_items ADD CONSTRAINT FOREIGN KEY (buyinglist_id)
REFERENCES shopping.buyinglists(id);
1258
1259 CREATE TABLE shopping.cart_items (
1260 cart_id bigint,
1261 product_version_id bigint REFERENCES catalog.product_versions(id),
1262 quantity int NOT NULL,
1263 price double NOT NULL,
1264 created_at timestamp NOT NULL,
1265 created_by bigint REFERENCES identity.Users(id),
1266 updated_at timestamp NOT NULL,
1267 updated_by bigint REFERENCES identity.Users(id),
1268 deleted_at timestamp,
1269 deleted_by bigint REFERENCES identity.Users(id),
1270 PRIMARY KEY (cart_id, product_version_id)
1271 );
1272 CREATE INDEX cart_items_deleted_at_index_az ON shopping.cart_items (deleted_at);
1273 CREATE INDEX idx_cart_items_deleted_at ON shopping.cart_items (deleted_at);
1274 COMMENT ON COLUMN shopping.cart_items.price IS 'at the time the product was added to
the card, prevent price changes after a product has been added to a cart';
1275
1276 CREATE TABLE shopping.carts (
1277 id bigint PRIMARY KEY,
1278 owner_kind cart_owner NOT NULL,
1279 owner_id bigint NOT NULL REFERENCES identity.Devices(id),
1280 expire_at timestamp NOT NULL,
1281 created_at timestamp NOT NULL,
1282 updated_at timestamp NOT NULL,
1283 deleted_at timestamp
1284 );
1285 CREATE INDEX carts_deleted_at_index_az ON shopping.carts (deleted_at);
1286 CREATE INDEX idx_carts_deleted_at ON shopping.carts (deleted_at);
1287 COMMENT ON COLUMN shopping.carts.owner_kind IS 'Devices are used for anonymous carts,
otherwise it''s Users';
1288 ALTER TABLE shopping.cart_items ADD CONSTRAINT FOREIGN KEY (cart_id) REFERENCES
shopping.carts(id);
1289 ALTER TABLE billing.Invoices ADD CONSTRAINT FOREIGN KEY (CartId) REFERENCES
shopping.carts(id);
1290 ALTER TABLE analytics.Events ADD CONSTRAINT FOREIGN KEY (entities) REFERENCES
shopping.carts(id);
1291 ALTER TABLE analytics.Entities ADD CONSTRAINT FOREIGN KEY (id) REFERENCES
shopping.carts(id);
1292
1293 CREATE TABLE shopping.price_alerts (
1294 product_version_id bigint REFERENCES catalog.product_versions(id),
1295 created_by bigint REFERENCES identity.Users(id),
1296 created_at timestamp NOT NULL DEFAULT `now()`,
1297 threshold double NOT NULL,
1298 expire_at timestamp,
1299 deleted_at timestamp,
1300 PRIMARY KEY (product_version_id, created_by)
1301 );
1302 CREATE INDEX price_alerts_expire_at_index_az ON shopping.price_alerts (expire_at);
1303 CREATE INDEX price_alerts_deleted_at_index_az ON shopping.price_alerts (deleted_at);
1304 CREATE INDEX price_alerts_deleted_at_idx ON shopping.price_alerts (deleted_at);
1305 CREATE INDEX price_alerts_expire_at_idx ON shopping.price_alerts (expire_at);
1306
1307 CREATE TABLE shopping.product_reactions (
1308 product_version_id bigint REFERENCES catalog.product_versions(id),
1309 created_by bigint REFERENCES identity.Users(id),
1310 created_at timestamp NOT NULL DEFAULT `now()`,
1311 kind reaction_kind NOT NULL,
1312 deleted_at timestamp,
1313 PRIMARY KEY (product_version_id, created_by)
1314 );
1315 CREATE INDEX product_reactions_deleted_at_index_az ON shopping.product_reactions
(deleted_at);
1316 CREATE INDEX product_reactions_deleted_at_idx ON shopping.product_reactions
(deleted_at);
1317
1318 CREATE TABLE shopping.wishlist_items (
1319 wishlist_id bigint,
1320 product_id bigint REFERENCES catalog.products(id),
1321 specs json,
1322 created_at timestamp NOT NULL,
1323 created_by bigint NOT NULL REFERENCES identity.Users(id),
1324 deleted_at timestamp,
1325 deleted_by bigint REFERENCES identity.Users(id),
1326 PRIMARY KEY (wishlist_id, product_id)
1327 );
1328 CREATE INDEX wishlist_items_deleted_at_index_az ON shopping.wishlist_items
(deleted_at);
1329 CREATE INDEX idx_wishlist_items_deleted_at ON shopping.wishlist_items (deleted_at);
1330 COMMENT ON COLUMN shopping.wishlist_items.specs IS 'if the user saved specific
configuration';
1331
1332 CREATE TABLE shopping.wishlist_members (
1333 wishlist_id bigint,
1334 user_id bigint REFERENCES identity.Users(id),
1335 rights wishlist_rights NOT NULL,
1336 created_at timestamp NOT NULL,
1337 created_by bigint NOT NULL REFERENCES identity.Users(id),
1338 updated_at timestamp NOT NULL,
1339 updated_by bigint NOT NULL REFERENCES identity.Users(id),
1340 deleted_at timestamp,
1341 deleted_by bigint REFERENCES identity.Users(id),
1342 PRIMARY KEY (wishlist_id, user_id)
1343 );
1344 CREATE INDEX wishlist_members_deleted_at_index_az ON shopping.wishlist_members
(deleted_at);
1345 CREATE INDEX idx_wishlist_members_deleted_at ON shopping.wishlist_members
(deleted_at);
1346
1347 CREATE TABLE shopping.wishlists (
1348 id bigint PRIMARY KEY,
1349 name varchar NOT NULL,
1350 description text,
1351 public boolean NOT NULL,
1352 created_at timestamp NOT NULL,
1353 created_by bigint NOT NULL REFERENCES identity.Users(id),
1354 updated_at timestamp NOT NULL,
1355 updated_by bigint NOT NULL REFERENCES identity.Users(id),
1356 deleted_at timestamp,
1357 deleted_by bigint REFERENCES identity.Users(id)
1358 );
1359 CREATE INDEX wishlists_deleted_at_index_az ON shopping.wishlists (deleted_at);
1360 CREATE INDEX idx_wishlists_deleted_at ON shopping.wishlists (deleted_at);
1361 ALTER TABLE shopping.wishlist_items ADD CONSTRAINT FOREIGN KEY (wishlist_id)
REFERENCES shopping.wishlists(id);
1362 ALTER TABLE shopping.wishlist_members ADD CONSTRAINT FOREIGN KEY (wishlist_id)
REFERENCES shopping.wishlists(id);
1363