@loomcore/api 0.1.75 → 0.1.77

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +77 -77
  3. package/dist/__tests__/postgres-test-migrations/postgres-test-schema.js +290 -239
  4. package/dist/__tests__/postgres.test-database.js +8 -8
  5. package/dist/databases/migrations/migration-runner.js +21 -21
  6. package/dist/databases/operations/__tests__/models/client-report.model.d.ts +25 -0
  7. package/dist/databases/operations/__tests__/models/client-report.model.js +3 -1
  8. package/dist/databases/operations/__tests__/models/policy.model.d.ts +32 -0
  9. package/dist/databases/operations/__tests__/models/policy.model.js +10 -0
  10. package/dist/databases/postgres/commands/postgres-batch-update.command.js +7 -7
  11. package/dist/databases/postgres/commands/postgres-create-many.command.js +4 -4
  12. package/dist/databases/postgres/commands/postgres-create.command.js +4 -4
  13. package/dist/databases/postgres/commands/postgres-full-update-by-id.command.js +13 -13
  14. package/dist/databases/postgres/commands/postgres-partial-update-by-id.command.js +7 -7
  15. package/dist/databases/postgres/commands/postgres-update.command.js +7 -7
  16. package/dist/databases/postgres/migrations/postgres-initial-schema.js +197 -197
  17. package/dist/databases/postgres/postgres.database.js +17 -17
  18. package/dist/databases/postgres/utils/build-join-clauses.js +277 -24
  19. package/dist/databases/postgres/utils/build-select-clause.js +38 -7
  20. package/dist/databases/postgres/utils/does-table-exist.util.js +4 -4
  21. package/dist/databases/postgres/utils/transform-join-results.js +102 -6
  22. package/package.json +92 -92
@@ -5,22 +5,22 @@ export const getPostgresTestSchema = (config) => {
5
5
  name: '00000000000100_schema-test-entities',
6
6
  up: async ({ context: pool }) => {
7
7
  const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
8
- await pool.query(`
9
- CREATE TABLE IF NOT EXISTS "testEntities" (
10
- "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
11
- ${orgColumnDef}
12
- "name" VARCHAR(255) NOT NULL,
13
- "description" TEXT,
14
- "isActive" BOOLEAN,
15
- "tags" TEXT[],
16
- "count" INTEGER,
17
- "_created" TIMESTAMPTZ NOT NULL,
18
- "_createdBy" INTEGER NOT NULL,
19
- "_updated" TIMESTAMPTZ NOT NULL,
20
- "_updatedBy" INTEGER NOT NULL,
21
- "_deleted" TIMESTAMPTZ,
22
- "_deletedBy" INTEGER
23
- )
8
+ await pool.query(`
9
+ CREATE TABLE IF NOT EXISTS "testEntities" (
10
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
11
+ ${orgColumnDef}
12
+ "name" VARCHAR(255) NOT NULL,
13
+ "description" TEXT,
14
+ "isActive" BOOLEAN,
15
+ "tags" TEXT[],
16
+ "count" INTEGER,
17
+ "_created" TIMESTAMPTZ NOT NULL,
18
+ "_createdBy" INTEGER NOT NULL,
19
+ "_updated" TIMESTAMPTZ NOT NULL,
20
+ "_updatedBy" INTEGER NOT NULL,
21
+ "_deleted" TIMESTAMPTZ,
22
+ "_deletedBy" INTEGER
23
+ )
24
24
  `);
25
25
  },
26
26
  down: async ({ context: pool }) => {
@@ -31,12 +31,12 @@ export const getPostgresTestSchema = (config) => {
31
31
  name: '00000000000101_schema-categories',
32
32
  up: async ({ context: pool }) => {
33
33
  const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
34
- await pool.query(`
35
- CREATE TABLE IF NOT EXISTS "categories" (
36
- "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
37
- ${orgColumnDef}
38
- "name" VARCHAR(255) NOT NULL
39
- )
34
+ await pool.query(`
35
+ CREATE TABLE IF NOT EXISTS "categories" (
36
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
37
+ ${orgColumnDef}
38
+ "name" VARCHAR(255) NOT NULL
39
+ )
40
40
  `);
41
41
  },
42
42
  down: async ({ context: pool }) => {
@@ -47,22 +47,22 @@ export const getPostgresTestSchema = (config) => {
47
47
  name: '00000000000102_schema-products',
48
48
  up: async ({ context: pool }) => {
49
49
  const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
50
- await pool.query(`
51
- CREATE TABLE IF NOT EXISTS "products" (
52
- "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
53
- ${orgColumnDef}
54
- "name" VARCHAR(255) NOT NULL,
55
- "description" TEXT,
56
- "internalNumber" VARCHAR(255),
57
- "categoryId" INTEGER NOT NULL,
58
- "_created" TIMESTAMPTZ NOT NULL,
59
- "_createdBy" INTEGER NOT NULL,
60
- "_updated" TIMESTAMPTZ NOT NULL,
61
- "_updatedBy" INTEGER NOT NULL,
62
- "_deleted" TIMESTAMPTZ,
63
- "_deletedBy" INTEGER,
64
- CONSTRAINT "fk_products_category" FOREIGN KEY ("categoryId") REFERENCES "categories"("_id") ON DELETE CASCADE
65
- )
50
+ await pool.query(`
51
+ CREATE TABLE IF NOT EXISTS "products" (
52
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
53
+ ${orgColumnDef}
54
+ "name" VARCHAR(255) NOT NULL,
55
+ "description" TEXT,
56
+ "internalNumber" VARCHAR(255),
57
+ "categoryId" INTEGER NOT NULL,
58
+ "_created" TIMESTAMPTZ NOT NULL,
59
+ "_createdBy" INTEGER NOT NULL,
60
+ "_updated" TIMESTAMPTZ NOT NULL,
61
+ "_updatedBy" INTEGER NOT NULL,
62
+ "_deleted" TIMESTAMPTZ,
63
+ "_deletedBy" INTEGER,
64
+ CONSTRAINT "fk_products_category" FOREIGN KEY ("categoryId") REFERENCES "categories"("_id") ON DELETE CASCADE
65
+ )
66
66
  `);
67
67
  },
68
68
  down: async ({ context: pool }) => {
@@ -73,20 +73,20 @@ export const getPostgresTestSchema = (config) => {
73
73
  name: '00000000000103_schema-test-items',
74
74
  up: async ({ context: pool }) => {
75
75
  const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
76
- await pool.query(`
77
- CREATE TABLE IF NOT EXISTS "testItems" (
78
- "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
79
- ${orgColumnDef}
80
- "name" VARCHAR(255) NOT NULL,
81
- "value" INTEGER,
82
- "eventDate" TIMESTAMPTZ,
83
- "_created" TIMESTAMPTZ NOT NULL,
84
- "_createdBy" INTEGER NOT NULL,
85
- "_updated" TIMESTAMPTZ NOT NULL,
86
- "_updatedBy" INTEGER NOT NULL,
87
- "_deleted" TIMESTAMPTZ,
88
- "_deletedBy" INTEGER
89
- )
76
+ await pool.query(`
77
+ CREATE TABLE IF NOT EXISTS "testItems" (
78
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
79
+ ${orgColumnDef}
80
+ "name" VARCHAR(255) NOT NULL,
81
+ "value" INTEGER,
82
+ "eventDate" TIMESTAMPTZ,
83
+ "_created" TIMESTAMPTZ NOT NULL,
84
+ "_createdBy" INTEGER NOT NULL,
85
+ "_updated" TIMESTAMPTZ NOT NULL,
86
+ "_updatedBy" INTEGER NOT NULL,
87
+ "_deleted" TIMESTAMPTZ,
88
+ "_deletedBy" INTEGER
89
+ )
90
90
  `);
91
91
  },
92
92
  down: async ({ context: pool }) => {
@@ -97,25 +97,25 @@ export const getPostgresTestSchema = (config) => {
97
97
  name: '00000000000105_schema-persons',
98
98
  up: async ({ context: pool }) => {
99
99
  const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
100
- await pool.query(`
101
- CREATE TABLE IF NOT EXISTS "persons" (
102
- "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
103
- ${orgColumnDef}
104
- "external_id" VARCHAR UNIQUE,
105
- "is_agent" BOOLEAN NOT NULL DEFAULT FALSE,
106
- "is_client" BOOLEAN NOT NULL DEFAULT FALSE,
107
- "is_employee" BOOLEAN NOT NULL DEFAULT FALSE,
108
- "first_name" VARCHAR NOT NULL,
109
- "middle_name" VARCHAR,
110
- "date_of_birth" DATE,
111
- "last_name" VARCHAR NOT NULL,
112
- "_created" TIMESTAMPTZ NOT NULL,
113
- "_createdBy" INTEGER NOT NULL,
114
- "_updated" TIMESTAMPTZ NOT NULL,
115
- "_updatedBy" INTEGER NOT NULL,
116
- "_deleted" TIMESTAMPTZ,
117
- "_deletedBy" INTEGER
118
- )
100
+ await pool.query(`
101
+ CREATE TABLE IF NOT EXISTS "persons" (
102
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
103
+ ${orgColumnDef}
104
+ "external_id" VARCHAR UNIQUE,
105
+ "is_agent" BOOLEAN NOT NULL DEFAULT FALSE,
106
+ "is_client" BOOLEAN NOT NULL DEFAULT FALSE,
107
+ "is_employee" BOOLEAN NOT NULL DEFAULT FALSE,
108
+ "first_name" VARCHAR NOT NULL,
109
+ "middle_name" VARCHAR,
110
+ "date_of_birth" DATE,
111
+ "last_name" VARCHAR NOT NULL,
112
+ "_created" TIMESTAMPTZ NOT NULL,
113
+ "_createdBy" INTEGER NOT NULL,
114
+ "_updated" TIMESTAMPTZ NOT NULL,
115
+ "_updatedBy" INTEGER NOT NULL,
116
+ "_deleted" TIMESTAMPTZ,
117
+ "_deletedBy" INTEGER
118
+ )
119
119
  `);
120
120
  },
121
121
  down: async ({ context: pool }) => {
@@ -126,19 +126,19 @@ export const getPostgresTestSchema = (config) => {
126
126
  name: '00000000000105_5_schema-agents',
127
127
  up: async ({ context: pool }) => {
128
128
  const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
129
- await pool.query(`
130
- CREATE TABLE IF NOT EXISTS "agents" (
131
- "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
132
- ${orgColumnDef}
133
- "person_id" INTEGER NOT NULL UNIQUE,
134
- "_created" TIMESTAMPTZ NOT NULL,
135
- "_createdBy" INTEGER NOT NULL,
136
- "_updated" TIMESTAMPTZ NOT NULL,
137
- "_updatedBy" INTEGER NOT NULL,
138
- "_deleted" TIMESTAMPTZ,
139
- "_deletedBy" INTEGER,
140
- CONSTRAINT fk_agents_person_id FOREIGN KEY ("person_id") REFERENCES persons("_id") ON DELETE CASCADE
141
- )
129
+ await pool.query(`
130
+ CREATE TABLE IF NOT EXISTS "agents" (
131
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
132
+ ${orgColumnDef}
133
+ "person_id" INTEGER NOT NULL UNIQUE,
134
+ "_created" TIMESTAMPTZ NOT NULL,
135
+ "_createdBy" INTEGER NOT NULL,
136
+ "_updated" TIMESTAMPTZ NOT NULL,
137
+ "_updatedBy" INTEGER NOT NULL,
138
+ "_deleted" TIMESTAMPTZ,
139
+ "_deletedBy" INTEGER,
140
+ CONSTRAINT fk_agents_person_id FOREIGN KEY ("person_id") REFERENCES persons("_id") ON DELETE CASCADE
141
+ )
142
142
  `);
143
143
  },
144
144
  down: async ({ context: pool }) => {
@@ -149,49 +149,100 @@ export const getPostgresTestSchema = (config) => {
149
149
  name: '00000000000105_6_schema-clients',
150
150
  up: async ({ context: pool }) => {
151
151
  const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
152
- await pool.query(`
153
- CREATE TABLE IF NOT EXISTS "clients" (
154
- "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
155
- ${orgColumnDef}
156
- "external_id" VARCHAR UNIQUE,
157
- "person_id" INTEGER NOT NULL UNIQUE,
158
- "agent_id" INTEGER,
159
- "_created" TIMESTAMPTZ NOT NULL,
160
- "_createdBy" INTEGER NOT NULL,
161
- "_updated" TIMESTAMPTZ NOT NULL,
162
- "_updatedBy" INTEGER NOT NULL,
163
- "_deleted" TIMESTAMPTZ,
164
- "_deletedBy" INTEGER,
165
- CONSTRAINT fk_clients_person_id FOREIGN KEY ("person_id") REFERENCES persons("_id") ON DELETE CASCADE,
166
- CONSTRAINT fk_clients_agent_id FOREIGN KEY ("agent_id") REFERENCES agents("_id") ON DELETE SET NULL
167
- )
152
+ await pool.query(`
153
+ CREATE TABLE IF NOT EXISTS "clients" (
154
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
155
+ ${orgColumnDef}
156
+ "external_id" VARCHAR UNIQUE,
157
+ "person_id" INTEGER NOT NULL UNIQUE,
158
+ "agent_id" INTEGER,
159
+ "_created" TIMESTAMPTZ NOT NULL,
160
+ "_createdBy" INTEGER NOT NULL,
161
+ "_updated" TIMESTAMPTZ NOT NULL,
162
+ "_updatedBy" INTEGER NOT NULL,
163
+ "_deleted" TIMESTAMPTZ,
164
+ "_deletedBy" INTEGER,
165
+ CONSTRAINT fk_clients_person_id FOREIGN KEY ("person_id") REFERENCES persons("_id") ON DELETE CASCADE,
166
+ CONSTRAINT fk_clients_agent_id FOREIGN KEY ("agent_id") REFERENCES agents("_id") ON DELETE SET NULL
167
+ )
168
168
  `);
169
169
  },
170
170
  down: async ({ context: pool }) => {
171
171
  await pool.query('DROP TABLE IF EXISTS "clients"');
172
172
  }
173
173
  });
174
+ migrations.push({
175
+ name: '00000000000105_7_schema-policies',
176
+ up: async ({ context: pool }) => {
177
+ const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
178
+ await pool.query(`
179
+ CREATE TABLE IF NOT EXISTS "policies" (
180
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
181
+ ${orgColumnDef}
182
+ "client_id" INTEGER NOT NULL,
183
+ "amount" NUMERIC NOT NULL,
184
+ "frequency" VARCHAR NOT NULL,
185
+ "_created" TIMESTAMPTZ NOT NULL,
186
+ "_createdBy" INTEGER NOT NULL,
187
+ "_updated" TIMESTAMPTZ NOT NULL,
188
+ "_updatedBy" INTEGER NOT NULL,
189
+ "_deleted" TIMESTAMPTZ,
190
+ "_deletedBy" INTEGER,
191
+ CONSTRAINT fk_policies_client_id FOREIGN KEY ("client_id") REFERENCES clients("_id") ON DELETE CASCADE
192
+ )
193
+ `);
194
+ },
195
+ down: async ({ context: pool }) => {
196
+ await pool.query('DROP TABLE IF EXISTS "policies"');
197
+ }
198
+ });
199
+ migrations.push({
200
+ name: '00000000000105_8_schema-agents-policies',
201
+ up: async ({ context: pool }) => {
202
+ const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
203
+ await pool.query(`
204
+ CREATE TABLE IF NOT EXISTS agents_policies (
205
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
206
+ ${orgColumnDef}
207
+ "policy_id" INTEGER NOT NULL,
208
+ "agent_id" INTEGER NOT NULL,
209
+ "_created" TIMESTAMPTZ NOT NULL,
210
+ "_createdBy" INTEGER NOT NULL,
211
+ "_updated" TIMESTAMPTZ NOT NULL,
212
+ "_updatedBy" INTEGER NOT NULL,
213
+ "_deleted" TIMESTAMPTZ,
214
+ "_deletedBy" INTEGER,
215
+ CONSTRAINT fk_agents_policies_policy_id FOREIGN KEY ("policy_id") REFERENCES policies("_id") ON DELETE CASCADE,
216
+ CONSTRAINT fk_agents_policies_agent_id FOREIGN KEY ("agent_id") REFERENCES agents("_id") ON DELETE CASCADE,
217
+ CONSTRAINT uk_agents_policies_policy_agent UNIQUE ("policy_id", "agent_id")
218
+ )
219
+ `);
220
+ },
221
+ down: async ({ context: pool }) => {
222
+ await pool.query('DROP TABLE IF EXISTS "agents_policies"');
223
+ }
224
+ });
174
225
  migrations.push({
175
226
  name: '00000000000106_schema-email-addresses',
176
227
  up: async ({ context: pool }) => {
177
228
  const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
178
- await pool.query(`
179
- CREATE TABLE IF NOT EXISTS email_addresses (
180
- "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
181
- ${orgColumnDef}
182
- "person_id" INTEGER NOT NULL,
183
- "external_id" VARCHAR UNIQUE,
184
- "email_address" VARCHAR NOT NULL UNIQUE,
185
- "email_address_type" VARCHAR,
186
- "is_default" BOOLEAN NOT NULL,
187
- "_created" TIMESTAMPTZ NOT NULL,
188
- "_createdBy" INTEGER NOT NULL,
189
- "_updated" TIMESTAMPTZ NOT NULL,
190
- "_updatedBy" INTEGER NOT NULL,
191
- "_deleted" TIMESTAMPTZ,
192
- "_deletedBy" INTEGER,
193
- CONSTRAINT fk_email_addresses_person_id FOREIGN KEY ("person_id") REFERENCES persons("_id") ON DELETE CASCADE
194
- )
229
+ await pool.query(`
230
+ CREATE TABLE IF NOT EXISTS email_addresses (
231
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
232
+ ${orgColumnDef}
233
+ "person_id" INTEGER NOT NULL,
234
+ "external_id" VARCHAR UNIQUE,
235
+ "email_address" VARCHAR NOT NULL UNIQUE,
236
+ "email_address_type" VARCHAR,
237
+ "is_default" BOOLEAN NOT NULL,
238
+ "_created" TIMESTAMPTZ NOT NULL,
239
+ "_createdBy" INTEGER NOT NULL,
240
+ "_updated" TIMESTAMPTZ NOT NULL,
241
+ "_updatedBy" INTEGER NOT NULL,
242
+ "_deleted" TIMESTAMPTZ,
243
+ "_deletedBy" INTEGER,
244
+ CONSTRAINT fk_email_addresses_person_id FOREIGN KEY ("person_id") REFERENCES persons("_id") ON DELETE CASCADE
245
+ )
195
246
  `);
196
247
  },
197
248
  down: async ({ context: pool }) => {
@@ -202,21 +253,21 @@ export const getPostgresTestSchema = (config) => {
202
253
  name: '00000000000107_schema-phone-numbers',
203
254
  up: async ({ context: pool }) => {
204
255
  const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
205
- await pool.query(`
206
- CREATE TABLE IF NOT EXISTS phone_numbers (
207
- "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
208
- "_orgId" INTEGER,
209
- "external_id" VARCHAR UNIQUE,
210
- "phone_number" VARCHAR NOT NULL UNIQUE,
211
- "phone_number_type" VARCHAR,
212
- "is_default" BOOLEAN NOT NULL DEFAULT FALSE,
213
- "_created" TIMESTAMPTZ NOT NULL,
214
- "_createdBy" INTEGER NOT NULL,
215
- "_updated" TIMESTAMPTZ NOT NULL,
216
- "_updatedBy" INTEGER NOT NULL,
217
- "_deleted" TIMESTAMPTZ,
218
- "_deletedBy" INTEGER
219
- )
256
+ await pool.query(`
257
+ CREATE TABLE IF NOT EXISTS phone_numbers (
258
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
259
+ "_orgId" INTEGER,
260
+ "external_id" VARCHAR UNIQUE,
261
+ "phone_number" VARCHAR NOT NULL UNIQUE,
262
+ "phone_number_type" VARCHAR,
263
+ "is_default" BOOLEAN NOT NULL DEFAULT FALSE,
264
+ "_created" TIMESTAMPTZ NOT NULL,
265
+ "_createdBy" INTEGER NOT NULL,
266
+ "_updated" TIMESTAMPTZ NOT NULL,
267
+ "_updatedBy" INTEGER NOT NULL,
268
+ "_deleted" TIMESTAMPTZ,
269
+ "_deletedBy" INTEGER
270
+ )
220
271
  `);
221
272
  },
222
273
  down: async ({ context: pool }) => {
@@ -227,25 +278,25 @@ export const getPostgresTestSchema = (config) => {
227
278
  name: '00000000000108_schema-addresses',
228
279
  up: async ({ context: pool }) => {
229
280
  const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
230
- await pool.query(`
231
- CREATE TABLE IF NOT EXISTS addresses (
232
- "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
233
- ${orgColumnDef}
234
- "external_id" VARCHAR UNIQUE,
235
- "address_type" VARCHAR NOT NULL,
236
- "address_line_1" VARCHAR NOT NULL,
237
- "address_line_2" VARCHAR,
238
- "city" VARCHAR NOT NULL,
239
- "state" VARCHAR NOT NULL,
240
- "zip_code" VARCHAR NOT NULL,
241
- "country" VARCHAR NOT NULL,
242
- "_created" TIMESTAMPTZ NOT NULL,
243
- "_createdBy" INTEGER NOT NULL,
244
- "_updated" TIMESTAMPTZ NOT NULL,
245
- "_updatedBy" INTEGER NOT NULL,
246
- "_deleted" TIMESTAMPTZ,
247
- "_deletedBy" INTEGER
248
- )
281
+ await pool.query(`
282
+ CREATE TABLE IF NOT EXISTS addresses (
283
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
284
+ ${orgColumnDef}
285
+ "external_id" VARCHAR UNIQUE,
286
+ "address_type" VARCHAR NOT NULL,
287
+ "address_line_1" VARCHAR NOT NULL,
288
+ "address_line_2" VARCHAR,
289
+ "city" VARCHAR NOT NULL,
290
+ "state" VARCHAR NOT NULL,
291
+ "zip_code" VARCHAR NOT NULL,
292
+ "country" VARCHAR NOT NULL,
293
+ "_created" TIMESTAMPTZ NOT NULL,
294
+ "_createdBy" INTEGER NOT NULL,
295
+ "_updated" TIMESTAMPTZ NOT NULL,
296
+ "_updatedBy" INTEGER NOT NULL,
297
+ "_deleted" TIMESTAMPTZ,
298
+ "_deletedBy" INTEGER
299
+ )
249
300
  `);
250
301
  },
251
302
  down: async ({ context: pool }) => {
@@ -256,22 +307,22 @@ export const getPostgresTestSchema = (config) => {
256
307
  name: '00000000000109_schema-person-addresses',
257
308
  up: async ({ context: pool }) => {
258
309
  const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
259
- await pool.query(`
260
- CREATE TABLE IF NOT EXISTS persons_addresses (
261
- "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
262
- ${orgColumnDef}
263
- "address_id" INTEGER NOT NULL,
264
- "person_id" INTEGER NOT NULL,
265
- "_created" TIMESTAMPTZ NOT NULL,
266
- "_createdBy" INTEGER NOT NULL,
267
- "_updated" TIMESTAMPTZ NOT NULL,
268
- "_updatedBy" INTEGER NOT NULL,
269
- "_deleted" TIMESTAMPTZ,
270
- "_deletedBy" INTEGER,
271
- CONSTRAINT fk_persons_addresses_address_id FOREIGN KEY ("address_id") REFERENCES addresses("_id") ON DELETE CASCADE,
272
- CONSTRAINT fk_persons_addresses_person_id FOREIGN KEY ("person_id") REFERENCES persons("_id") ON DELETE CASCADE,
273
- CONSTRAINT uk_persons_addresses_address_person UNIQUE ("address_id", "person_id")
274
- )
310
+ await pool.query(`
311
+ CREATE TABLE IF NOT EXISTS persons_addresses (
312
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
313
+ ${orgColumnDef}
314
+ "address_id" INTEGER NOT NULL,
315
+ "person_id" INTEGER NOT NULL,
316
+ "_created" TIMESTAMPTZ NOT NULL,
317
+ "_createdBy" INTEGER NOT NULL,
318
+ "_updated" TIMESTAMPTZ NOT NULL,
319
+ "_updatedBy" INTEGER NOT NULL,
320
+ "_deleted" TIMESTAMPTZ,
321
+ "_deletedBy" INTEGER,
322
+ CONSTRAINT fk_persons_addresses_address_id FOREIGN KEY ("address_id") REFERENCES addresses("_id") ON DELETE CASCADE,
323
+ CONSTRAINT fk_persons_addresses_person_id FOREIGN KEY ("person_id") REFERENCES persons("_id") ON DELETE CASCADE,
324
+ CONSTRAINT uk_persons_addresses_address_person UNIQUE ("address_id", "person_id")
325
+ )
275
326
  `);
276
327
  },
277
328
  down: async ({ context: pool }) => {
@@ -282,22 +333,22 @@ export const getPostgresTestSchema = (config) => {
282
333
  name: '00000000000110_schema-person-phone-numbers',
283
334
  up: async ({ context: pool }) => {
284
335
  const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
285
- await pool.query(`
286
- CREATE TABLE IF NOT EXISTS persons_phone_numbers (
287
- "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
288
- ${orgColumnDef}
289
- "phone_number_id" INTEGER NOT NULL,
290
- "person_id" INTEGER NOT NULL,
291
- "_created" TIMESTAMPTZ NOT NULL,
292
- "_createdBy" INTEGER NOT NULL,
293
- "_updated" TIMESTAMPTZ NOT NULL,
294
- "_updatedBy" INTEGER NOT NULL,
295
- "_deleted" TIMESTAMPTZ,
296
- "_deletedBy" INTEGER,
297
- CONSTRAINT fk_persons_phone_numbers_phone_number_id FOREIGN KEY ("phone_number_id") REFERENCES phone_numbers("_id") ON DELETE CASCADE,
298
- CONSTRAINT fk_persons_phone_numbers_person_id FOREIGN KEY ("person_id") REFERENCES persons("_id") ON DELETE CASCADE,
299
- CONSTRAINT uk_persons_phone_numbers_phone_number_person UNIQUE ("phone_number_id", "person_id")
300
- )
336
+ await pool.query(`
337
+ CREATE TABLE IF NOT EXISTS persons_phone_numbers (
338
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
339
+ ${orgColumnDef}
340
+ "phone_number_id" INTEGER NOT NULL,
341
+ "person_id" INTEGER NOT NULL,
342
+ "_created" TIMESTAMPTZ NOT NULL,
343
+ "_createdBy" INTEGER NOT NULL,
344
+ "_updated" TIMESTAMPTZ NOT NULL,
345
+ "_updatedBy" INTEGER NOT NULL,
346
+ "_deleted" TIMESTAMPTZ,
347
+ "_deletedBy" INTEGER,
348
+ CONSTRAINT fk_persons_phone_numbers_phone_number_id FOREIGN KEY ("phone_number_id") REFERENCES phone_numbers("_id") ON DELETE CASCADE,
349
+ CONSTRAINT fk_persons_phone_numbers_person_id FOREIGN KEY ("person_id") REFERENCES persons("_id") ON DELETE CASCADE,
350
+ CONSTRAINT uk_persons_phone_numbers_phone_number_person UNIQUE ("phone_number_id", "person_id")
351
+ )
301
352
  `);
302
353
  },
303
354
  down: async ({ context: pool }) => {
@@ -308,18 +359,18 @@ export const getPostgresTestSchema = (config) => {
308
359
  name: '00000000000111_schema-states',
309
360
  up: async ({ context: pool }) => {
310
361
  const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
311
- await pool.query(`
312
- CREATE TABLE IF NOT EXISTS states (
313
- "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
314
- ${orgColumnDef}
315
- "name" VARCHAR NOT NULL,
316
- "_created" TIMESTAMPTZ NOT NULL,
317
- "_createdBy" INTEGER NOT NULL,
318
- "_updated" TIMESTAMPTZ NOT NULL,
319
- "_updatedBy" INTEGER NOT NULL,
320
- "_deleted" TIMESTAMPTZ,
321
- "_deletedBy" INTEGER
322
- )
362
+ await pool.query(`
363
+ CREATE TABLE IF NOT EXISTS states (
364
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
365
+ ${orgColumnDef}
366
+ "name" VARCHAR NOT NULL,
367
+ "_created" TIMESTAMPTZ NOT NULL,
368
+ "_createdBy" INTEGER NOT NULL,
369
+ "_updated" TIMESTAMPTZ NOT NULL,
370
+ "_updatedBy" INTEGER NOT NULL,
371
+ "_deleted" TIMESTAMPTZ,
372
+ "_deletedBy" INTEGER
373
+ )
323
374
  `);
324
375
  },
325
376
  down: async ({ context: pool }) => {
@@ -330,20 +381,20 @@ export const getPostgresTestSchema = (config) => {
330
381
  name: '00000000000112_schema-districts',
331
382
  up: async ({ context: pool }) => {
332
383
  const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
333
- await pool.query(`
334
- CREATE TABLE IF NOT EXISTS districts (
335
- "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
336
- ${orgColumnDef}
337
- "name" VARCHAR NOT NULL,
338
- "state_id" INTEGER NOT NULL,
339
- "_created" TIMESTAMPTZ NOT NULL,
340
- "_createdBy" INTEGER NOT NULL,
341
- "_updated" TIMESTAMPTZ NOT NULL,
342
- "_updatedBy" INTEGER NOT NULL,
343
- "_deleted" TIMESTAMPTZ,
344
- "_deletedBy" INTEGER,
345
- CONSTRAINT fk_districts_state_id FOREIGN KEY ("state_id") REFERENCES states("_id") ON DELETE CASCADE
346
- )
384
+ await pool.query(`
385
+ CREATE TABLE IF NOT EXISTS districts (
386
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
387
+ ${orgColumnDef}
388
+ "name" VARCHAR NOT NULL,
389
+ "state_id" INTEGER NOT NULL,
390
+ "_created" TIMESTAMPTZ NOT NULL,
391
+ "_createdBy" INTEGER NOT NULL,
392
+ "_updated" TIMESTAMPTZ NOT NULL,
393
+ "_updatedBy" INTEGER NOT NULL,
394
+ "_deleted" TIMESTAMPTZ,
395
+ "_deletedBy" INTEGER,
396
+ CONSTRAINT fk_districts_state_id FOREIGN KEY ("state_id") REFERENCES states("_id") ON DELETE CASCADE
397
+ )
347
398
  `);
348
399
  },
349
400
  down: async ({ context: pool }) => {
@@ -354,20 +405,20 @@ export const getPostgresTestSchema = (config) => {
354
405
  name: '00000000000113_schema-schools',
355
406
  up: async ({ context: pool }) => {
356
407
  const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
357
- await pool.query(`
358
- CREATE TABLE IF NOT EXISTS schools (
359
- "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
360
- ${orgColumnDef}
361
- "name" VARCHAR NOT NULL,
362
- "district_id" INTEGER NOT NULL,
363
- "_created" TIMESTAMPTZ NOT NULL,
364
- "_createdBy" INTEGER NOT NULL,
365
- "_updated" TIMESTAMPTZ NOT NULL,
366
- "_updatedBy" INTEGER NOT NULL,
367
- "_deleted" TIMESTAMPTZ,
368
- "_deletedBy" INTEGER,
369
- CONSTRAINT fk_schools_district_id FOREIGN KEY ("district_id") REFERENCES districts("_id") ON DELETE CASCADE
370
- )
408
+ await pool.query(`
409
+ CREATE TABLE IF NOT EXISTS schools (
410
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
411
+ ${orgColumnDef}
412
+ "name" VARCHAR NOT NULL,
413
+ "district_id" INTEGER NOT NULL,
414
+ "_created" TIMESTAMPTZ NOT NULL,
415
+ "_createdBy" INTEGER NOT NULL,
416
+ "_updated" TIMESTAMPTZ NOT NULL,
417
+ "_updatedBy" INTEGER NOT NULL,
418
+ "_deleted" TIMESTAMPTZ,
419
+ "_deletedBy" INTEGER,
420
+ CONSTRAINT fk_schools_district_id FOREIGN KEY ("district_id") REFERENCES districts("_id") ON DELETE CASCADE
421
+ )
371
422
  `);
372
423
  },
373
424
  down: async ({ context: pool }) => {
@@ -378,22 +429,22 @@ export const getPostgresTestSchema = (config) => {
378
429
  name: '00000000000114_schema-person-schools',
379
430
  up: async ({ context: pool }) => {
380
431
  const orgColumnDef = isMultiTenant ? '"_orgId" INTEGER,' : '';
381
- await pool.query(`
382
- CREATE TABLE IF NOT EXISTS persons_schools (
383
- "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
384
- ${orgColumnDef}
385
- "person_id" INTEGER NOT NULL,
386
- "school_id" INTEGER NOT NULL,
387
- "_created" TIMESTAMPTZ NOT NULL,
388
- "_createdBy" INTEGER NOT NULL,
389
- "_updated" TIMESTAMPTZ NOT NULL,
390
- "_updatedBy" INTEGER NOT NULL,
391
- "_deleted" TIMESTAMPTZ,
392
- "_deletedBy" INTEGER,
393
- CONSTRAINT fk_persons_schools_person_id FOREIGN KEY ("person_id") REFERENCES persons("_id") ON DELETE CASCADE,
394
- CONSTRAINT fk_persons_schools_school_id FOREIGN KEY ("school_id") REFERENCES schools("_id") ON DELETE CASCADE,
395
- CONSTRAINT uk_persons_schools_person_school UNIQUE ("person_id", "school_id")
396
- )
432
+ await pool.query(`
433
+ CREATE TABLE IF NOT EXISTS persons_schools (
434
+ "_id" INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
435
+ ${orgColumnDef}
436
+ "person_id" INTEGER NOT NULL,
437
+ "school_id" INTEGER NOT NULL,
438
+ "_created" TIMESTAMPTZ NOT NULL,
439
+ "_createdBy" INTEGER NOT NULL,
440
+ "_updated" TIMESTAMPTZ NOT NULL,
441
+ "_updatedBy" INTEGER NOT NULL,
442
+ "_deleted" TIMESTAMPTZ,
443
+ "_deletedBy" INTEGER,
444
+ CONSTRAINT fk_persons_schools_person_id FOREIGN KEY ("person_id") REFERENCES persons("_id") ON DELETE CASCADE,
445
+ CONSTRAINT fk_persons_schools_school_id FOREIGN KEY ("school_id") REFERENCES schools("_id") ON DELETE CASCADE,
446
+ CONSTRAINT uk_persons_schools_person_school UNIQUE ("person_id", "school_id")
447
+ )
397
448
  `);
398
449
  },
399
450
  down: async ({ context: pool }) => {