@accounter/server 0.0.9-alpha-20251231083050-a0e737863ca2a9fa68506d15357e55d9287972cb → 0.0.9-alpha-20251231163357-33d4c33fec5e21dad2e04d1f293f6248d2550588
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.
- package/CHANGELOG.md +27 -5
- package/README.md +66 -3
- package/dist/server/scripts/seed-admin-context.js +20 -25
- package/dist/server/scripts/seed-admin-context.js.map +1 -1
- package/dist/server/src/__tests__/db-bootstrap.test.js +7 -2
- package/dist/server/src/__tests__/db-bootstrap.test.js.map +1 -1
- package/dist/server/src/__tests__/factories/business.d.ts +1 -1
- package/dist/server/src/__tests__/factories/financial-account.d.ts +1 -1
- package/dist/server/src/__tests__/factories/index.test.js +1 -0
- package/dist/server/src/__tests__/factories/index.test.js.map +1 -1
- package/dist/server/src/__tests__/factories/tax-category.d.ts +1 -1
- package/dist/server/src/__tests__/factories/tax-category.js +1 -1
- package/dist/server/src/__tests__/factories/tax-category.js.map +1 -1
- package/dist/server/src/__tests__/factories/tax-category.test.js +8 -6
- package/dist/server/src/__tests__/factories/tax-category.test.js.map +1 -1
- package/dist/server/src/__tests__/helpers/fixture-loader.d.ts +1 -1
- package/dist/server/src/__tests__/helpers/fixture-loader.js +25 -52
- package/dist/server/src/__tests__/helpers/fixture-loader.js.map +1 -1
- package/dist/server/src/__tests__/helpers/migration-verification.d.ts +1 -1
- package/dist/server/src/__tests__/helpers/migration-verification.js.map +1 -1
- package/dist/server/src/__tests__/helpers/seed-helpers.business.test.js +4 -4
- package/dist/server/src/__tests__/helpers/seed-helpers.business.test.js.map +1 -1
- package/dist/server/src/__tests__/helpers/seed-helpers.d.ts +9 -9
- package/dist/server/src/__tests__/helpers/seed-helpers.js +57 -54
- package/dist/server/src/__tests__/helpers/seed-helpers.js.map +1 -1
- package/dist/server/src/__tests__/seed-admin-context.integration.test.js +2 -1
- package/dist/server/src/__tests__/seed-admin-context.integration.test.js.map +1 -1
- package/dist/server/src/demo-fixtures/__tests__/deterministic-uuid.test.js +3 -2
- package/dist/server/src/demo-fixtures/__tests__/deterministic-uuid.test.js.map +1 -1
- package/dist/server/src/demo-fixtures/__tests__/seed-and-validate.test.d.ts +1 -0
- package/dist/server/src/demo-fixtures/__tests__/seed-and-validate.test.js +69 -0
- package/dist/server/src/demo-fixtures/__tests__/seed-and-validate.test.js.map +1 -0
- package/dist/server/src/demo-fixtures/__tests__/use-case-registry.test.d.ts +1 -0
- package/dist/server/src/demo-fixtures/__tests__/use-case-registry.test.js +26 -0
- package/dist/server/src/demo-fixtures/__tests__/use-case-registry.test.js.map +1 -0
- package/dist/server/src/demo-fixtures/helpers/admin-context.d.ts +10 -0
- package/dist/server/src/demo-fixtures/helpers/admin-context.js +40 -0
- package/dist/server/src/demo-fixtures/helpers/admin-context.js.map +1 -0
- package/dist/server/src/demo-fixtures/helpers/placeholder.d.ts +45 -0
- package/dist/server/src/demo-fixtures/helpers/placeholder.js +50 -0
- package/dist/server/src/demo-fixtures/helpers/placeholder.js.map +1 -0
- package/dist/server/src/demo-fixtures/helpers/seed-exchange-rates.d.ts +21 -0
- package/dist/server/src/demo-fixtures/helpers/seed-exchange-rates.js +26 -0
- package/dist/server/src/demo-fixtures/helpers/seed-exchange-rates.js.map +1 -0
- package/dist/server/src/demo-fixtures/helpers/seed-vat.d.ts +20 -0
- package/dist/server/src/demo-fixtures/helpers/seed-vat.js +30 -0
- package/dist/server/src/demo-fixtures/helpers/seed-vat.js.map +1 -0
- package/dist/server/src/demo-fixtures/use-cases/equity/shareholder-dividend.d.ts +9 -0
- package/dist/server/src/demo-fixtures/use-cases/equity/shareholder-dividend.js +86 -0
- package/dist/server/src/demo-fixtures/use-cases/equity/shareholder-dividend.js.map +1 -0
- package/dist/server/src/demo-fixtures/use-cases/expenses/monthly-expense-foreign-currency.d.ts +12 -0
- package/dist/server/src/demo-fixtures/use-cases/expenses/monthly-expense-foreign-currency.js +375 -0
- package/dist/server/src/demo-fixtures/use-cases/expenses/monthly-expense-foreign-currency.js.map +1 -0
- package/dist/server/src/demo-fixtures/use-cases/income/client-payment-with-refund.d.ts +10 -0
- package/dist/server/src/demo-fixtures/use-cases/income/client-payment-with-refund.js +113 -0
- package/dist/server/src/demo-fixtures/use-cases/income/client-payment-with-refund.js.map +1 -0
- package/dist/server/src/demo-fixtures/use-cases/index.d.ts +41 -0
- package/dist/server/src/demo-fixtures/use-cases/index.js +50 -0
- package/dist/server/src/demo-fixtures/use-cases/index.js.map +1 -0
- package/dist/server/src/demo-fixtures/validate-demo-data.d.ts +1 -0
- package/dist/server/src/demo-fixtures/validate-demo-data.js +117 -0
- package/dist/server/src/demo-fixtures/validate-demo-data.js.map +1 -0
- package/dist/server/src/demo-fixtures/validators/ledger-validators.d.ts +349 -0
- package/dist/server/src/demo-fixtures/validators/ledger-validators.js +602 -0
- package/dist/server/src/demo-fixtures/validators/ledger-validators.js.map +1 -0
- package/dist/server/src/demo-fixtures/validators/ledger-validators.test.d.ts +1 -0
- package/dist/server/src/demo-fixtures/validators/ledger-validators.test.js +247 -0
- package/dist/server/src/demo-fixtures/validators/ledger-validators.test.js.map +1 -0
- package/dist/server/src/demo-fixtures/validators/types.d.ts +69 -0
- package/dist/server/src/demo-fixtures/validators/types.js +8 -0
- package/dist/server/src/demo-fixtures/validators/types.js.map +1 -0
- package/dist/server/src/fixtures/fixture-spec.d.ts +146 -0
- package/dist/server/src/fixtures/fixture-spec.js +2 -0
- package/dist/server/src/fixtures/fixture-spec.js.map +1 -0
- package/dist/server/src/modules/charges-matcher/__tests__/single-match-integration.test.js +4 -0
- package/dist/server/src/modules/charges-matcher/__tests__/single-match-integration.test.js.map +1 -1
- package/dist/server/src/modules/deel/resolvers/deel.resolvers.js +0 -3
- package/dist/server/src/modules/deel/resolvers/deel.resolvers.js.map +1 -1
- package/dist/server/src/modules/ledger/__tests__/ledger-scenario-a.integration.test.js +4 -3
- package/dist/server/src/modules/ledger/__tests__/ledger-scenario-a.integration.test.js.map +1 -1
- package/dist/server/src/modules/ledger/__tests__/ledger-scenario-b.integration.test.js +5 -3
- package/dist/server/src/modules/ledger/__tests__/ledger-scenario-b.integration.test.js.map +1 -1
- package/dist/server/src/shared/constants.d.ts +1 -0
- package/dist/server/src/shared/constants.js +1 -0
- package/dist/server/src/shared/constants.js.map +1 -1
- package/dist/server/src/shared/helpers/misc.js +2 -2
- package/dist/server/src/shared/helpers/misc.js.map +1 -1
- package/docs/demo-staging-guide.md +611 -0
- package/package.json +6 -3
- package/scripts/seed-admin-context.ts +22 -33
- package/src/__tests__/db-bootstrap.test.ts +9 -2
- package/src/__tests__/factories/business.ts +1 -1
- package/src/__tests__/factories/financial-account.ts +1 -1
- package/src/__tests__/factories/index.test.ts +1 -0
- package/src/__tests__/factories/tax-category.test.ts +8 -6
- package/src/__tests__/factories/tax-category.ts +2 -2
- package/src/__tests__/helpers/fixture-loader.ts +26 -61
- package/src/__tests__/helpers/migration-verification.ts +2 -2
- package/src/__tests__/helpers/seed-helpers.business.test.ts +4 -4
- package/src/__tests__/helpers/seed-helpers.ts +66 -75
- package/src/__tests__/seed-admin-context.integration.test.ts +2 -1
- package/src/demo-fixtures/__tests__/deterministic-uuid.test.ts +3 -2
- package/src/demo-fixtures/__tests__/seed-and-validate.test.ts +96 -0
- package/src/demo-fixtures/__tests__/use-case-registry.test.ts +27 -0
- package/src/demo-fixtures/helpers/admin-context.ts +59 -0
- package/src/demo-fixtures/helpers/placeholder.ts +50 -0
- package/src/demo-fixtures/helpers/seed-exchange-rates.ts +29 -0
- package/src/demo-fixtures/helpers/seed-vat.ts +35 -0
- package/src/demo-fixtures/use-cases/equity/shareholder-dividend.ts +88 -0
- package/src/demo-fixtures/use-cases/expenses/monthly-expense-foreign-currency.ts +377 -0
- package/src/demo-fixtures/use-cases/income/client-payment-with-refund.ts +115 -0
- package/src/demo-fixtures/use-cases/index.ts +52 -0
- package/src/demo-fixtures/validate-demo-data.ts +153 -0
- package/src/demo-fixtures/validators/README.md +190 -0
- package/src/demo-fixtures/validators/ledger-validators.test.ts +298 -0
- package/src/demo-fixtures/validators/ledger-validators.ts +711 -0
- package/src/demo-fixtures/validators/types.ts +83 -0
- package/src/fixtures/fixture-spec.ts +158 -0
- package/src/modules/charges-matcher/__tests__/single-match-integration.test.ts +6 -0
- package/src/modules/deel/resolvers/deel.resolvers.ts +0 -3
- package/src/modules/ledger/__tests__/ledger-scenario-a.integration.test.ts +4 -3
- package/src/modules/ledger/__tests__/ledger-scenario-b.integration.test.ts +6 -3
- package/src/shared/constants.ts +2 -0
- package/src/shared/helpers/misc.ts +2 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture-loader.js","sourceRoot":"","sources":["../../../../../src/__tests__/helpers/fixture-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;
|
|
1
|
+
{"version":3,"file":"fixture-loader.js","sourceRoot":"","sources":["../../../../../src/__tests__/helpers/fixture-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration-verification.js","sourceRoot":"","sources":["../../../../../src/__tests__/helpers/migration-verification.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"migration-verification.js","sourceRoot":"","sources":["../../../../../src/__tests__/helpers/migration-verification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,IAAI,EAAmB,MAAM,IAAI,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iDAAiD,CAAC;AAExF,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAQjC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,YAAwC,EACxC,MAAM,GAAG,kBAAkB;IAE3B,IAAI,MAA2B,CAAC;IAChC,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,IAAI,YAAY,YAAY,IAAI,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,CAAC;QAChD,MAAM,GAAG,UAAU,CAAC;QACpB,aAAa,GAAG,IAAI,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,sCAAsC;QACtC,MAAM,GAAG,YAAY,CAAC;IACxB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAC/B,iBAAiB,MAAM,oCAAoC,EAC3D,CAAC,qBAAqB,CAAC,CACxB,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC;QACvC,OAAO;YACL,QAAQ;YACR,mBAAmB,EAAE,qBAAqB;YAC1C,YAAY,EAAE,QAAQ;gBACpB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,qBAAqB,qBAAqB,yBAAyB;SACxE,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,mBAAmB,EAAE,qBAAqB;YAC1C,YAAY,EAAE,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SACtG,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,IAAI,aAAa,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;YACzC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,YAAwC,EACxC,MAAM,GAAG,kBAAkB;IAE3B,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,MAAM,CAAC,YAAY;YACjB,8BAA8B,MAAM,CAAC,mBAAmB,2DAA2D,CACtH,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -48,7 +48,7 @@ describe('ensureBusinessForEntity', () => {
|
|
|
48
48
|
type: 'business',
|
|
49
49
|
});
|
|
50
50
|
// Ensure business with noInvoicesRequired set to true
|
|
51
|
-
await ensureBusinessForEntity(client, entityId, {
|
|
51
|
+
await ensureBusinessForEntity(client, entityId, { isDocumentsOptional: true });
|
|
52
52
|
// Verify business has correct option set
|
|
53
53
|
const result = await client.query(`SELECT id, no_invoices_required FROM ${qualifyTable('businesses')} WHERE id = $1`, [entityId]);
|
|
54
54
|
expect(result.rows).toHaveLength(1);
|
|
@@ -74,10 +74,10 @@ describe('ensureBusinessForEntity', () => {
|
|
|
74
74
|
name: 'Test Business Entity 5',
|
|
75
75
|
type: 'business',
|
|
76
76
|
});
|
|
77
|
-
// Create business with
|
|
78
|
-
await ensureBusinessForEntity(client, entityId, {
|
|
77
|
+
// Create business with isDocumentsOptional = true
|
|
78
|
+
await ensureBusinessForEntity(client, entityId, { isDocumentsOptional: true });
|
|
79
79
|
// Call again with different options (should be no-op)
|
|
80
|
-
await ensureBusinessForEntity(client, entityId, {
|
|
80
|
+
await ensureBusinessForEntity(client, entityId, { isDocumentsOptional: false });
|
|
81
81
|
// Verify original value is preserved
|
|
82
82
|
const result = await client.query(`SELECT no_invoices_required FROM ${qualifyTable('businesses')} WHERE id = $1`, [entityId]);
|
|
83
83
|
expect(result.rows).toHaveLength(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed-helpers.business.test.js","sourceRoot":"","sources":["../../../../../src/__tests__/helpers/seed-helpers.business.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"seed-helpers.business.test.js","sourceRoot":"","sources":["../../../../../src/__tests__/helpers/seed-helpers.business.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import type { PoolClient } from 'pg';
|
|
1
|
+
import type { Client, PoolClient } from 'pg';
|
|
2
|
+
import type { FixtureBusinesses, FixtureTaxCategories } from './fixture-types.js';
|
|
2
3
|
/**
|
|
3
4
|
* Valid financial entity types based on database schema
|
|
4
5
|
*/
|
|
5
6
|
export type FinancialEntityType = 'business' | 'tax_category' | 'tag';
|
|
6
7
|
export interface EnsureFinancialEntityParams {
|
|
8
|
+
id?: string;
|
|
7
9
|
name: string;
|
|
8
10
|
type: FinancialEntityType;
|
|
9
11
|
ownerId?: string;
|
|
@@ -56,10 +58,8 @@ export interface FinancialEntityResult {
|
|
|
56
58
|
* // sameId === adminId
|
|
57
59
|
* ```
|
|
58
60
|
*/
|
|
59
|
-
export declare function ensureFinancialEntity(client: PoolClient, params: EnsureFinancialEntityParams): Promise<FinancialEntityResult>;
|
|
60
|
-
export
|
|
61
|
-
noInvoicesRequired?: boolean;
|
|
62
|
-
}
|
|
61
|
+
export declare function ensureFinancialEntity(client: PoolClient | Client, params: EnsureFinancialEntityParams): Promise<FinancialEntityResult>;
|
|
62
|
+
export type EnsureBusinessForEntityOptions = Partial<Omit<FixtureBusinesses['businesses'][number], 'id'>>;
|
|
63
63
|
/**
|
|
64
64
|
* Ensure a business row exists for a given financial entity id (idempotent)
|
|
65
65
|
*
|
|
@@ -101,10 +101,10 @@ export interface EnsureBusinessForEntityOptions {
|
|
|
101
101
|
* });
|
|
102
102
|
* ```
|
|
103
103
|
*/
|
|
104
|
-
export declare function ensureBusinessForEntity(client: PoolClient, entityId: string, options?: EnsureBusinessForEntityOptions): Promise<void>;
|
|
105
|
-
export
|
|
104
|
+
export declare function ensureBusinessForEntity(client: PoolClient | Client, entityId: string, options?: EnsureBusinessForEntityOptions): Promise<void>;
|
|
105
|
+
export type EnsureTaxCategoryForEntityOptions = Partial<Omit<FixtureTaxCategories['taxCategories'][number], 'id'>> & {
|
|
106
106
|
sortCode?: number;
|
|
107
|
-
}
|
|
107
|
+
};
|
|
108
108
|
/**
|
|
109
109
|
* Ensure a tax_categories row exists for a given financial entity id (idempotent)
|
|
110
110
|
*
|
|
@@ -150,4 +150,4 @@ export interface EnsureTaxCategoryForEntityOptions {
|
|
|
150
150
|
* });
|
|
151
151
|
* ```
|
|
152
152
|
*/
|
|
153
|
-
export declare function ensureTaxCategoryForEntity(client: PoolClient, entityId: string, options?: EnsureTaxCategoryForEntityOptions): Promise<void>;
|
|
153
|
+
export declare function ensureTaxCategoryForEntity(client: PoolClient | Client, entityId: string, options?: EnsureTaxCategoryForEntityOptions): Promise<void>;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { qualifyTable } from './test-db-config.js';
|
|
2
2
|
import { EntityValidationError, SeedError } from './seed-errors.js';
|
|
3
|
+
import { makeUUID } from '../factories/index.js';
|
|
4
|
+
import { UUID_REGEX } from '../../shared/constants.js';
|
|
3
5
|
/**
|
|
4
6
|
* Valid financial entity types for runtime validation
|
|
5
7
|
*/
|
|
@@ -50,7 +52,7 @@ const VALID_ENTITY_TYPES = ['business', 'tax_category', 'tag'];
|
|
|
50
52
|
* ```
|
|
51
53
|
*/
|
|
52
54
|
export async function ensureFinancialEntity(client, params) {
|
|
53
|
-
const { name, type, ownerId } = params;
|
|
55
|
+
const { name, type, ownerId, id: originId } = params;
|
|
54
56
|
// Validate inputs
|
|
55
57
|
const validationErrors = [];
|
|
56
58
|
if (!name || name.trim() === '') {
|
|
@@ -63,29 +65,25 @@ export async function ensureFinancialEntity(client, params) {
|
|
|
63
65
|
throw new EntityValidationError('FinancialEntity', validationErrors, { name, type, ownerId });
|
|
64
66
|
}
|
|
65
67
|
try {
|
|
66
|
-
//
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
`;
|
|
75
|
-
const existingResult = await client.query(selectQuery, [name, type, ownerId ?? null]);
|
|
76
|
-
if (existingResult.rows.length > 0) {
|
|
77
|
-
return { id: existingResult.rows[0].id };
|
|
78
|
-
}
|
|
79
|
-
// Insert new entity
|
|
68
|
+
// Generate deterministic UUID based on type, name, and ownerId for idempotency
|
|
69
|
+
// Same (type, name, ownerId) always generates same ID, ensuring multiple calls are safe
|
|
70
|
+
// Include ownerId in the composite key so different owners get different IDs
|
|
71
|
+
const compositeKey = ownerId ? `${name}:owner=${ownerId}` : name;
|
|
72
|
+
const consistentId = originId ?? makeUUID(type, compositeKey);
|
|
73
|
+
// Use atomic INSERT...ON CONFLICT on PRIMARY KEY (id) to handle concurrent inserts
|
|
74
|
+
// If the deterministic ID already exists (from a previous call or concurrent insert),
|
|
75
|
+
// the conflict handler will safely return the existing row
|
|
80
76
|
const insertQuery = `
|
|
81
|
-
INSERT INTO ${qualifyTable('financial_entities')} (name, type, owner_id)
|
|
82
|
-
VALUES ($1, $2, $3)
|
|
77
|
+
INSERT INTO ${qualifyTable('financial_entities')} (id, name, type, owner_id)
|
|
78
|
+
VALUES ($1, $2, $3, $4)
|
|
79
|
+
ON CONFLICT (id) DO UPDATE
|
|
80
|
+
SET id = EXCLUDED.id -- No-op update, just to return the existing id
|
|
83
81
|
RETURNING id
|
|
84
82
|
`;
|
|
85
|
-
const
|
|
86
|
-
const row =
|
|
83
|
+
const result = await client.query(insertQuery, [consistentId, name, type, ownerId ?? null]);
|
|
84
|
+
const row = result.rows[0];
|
|
87
85
|
if (!row) {
|
|
88
|
-
throw new SeedError('INSERT returned no rows', { name, type, ownerId });
|
|
86
|
+
throw new SeedError('INSERT...ON CONFLICT returned no rows', { name, type, ownerId });
|
|
89
87
|
}
|
|
90
88
|
return { id: row.id };
|
|
91
89
|
}
|
|
@@ -139,8 +137,7 @@ export async function ensureFinancialEntity(client, params) {
|
|
|
139
137
|
*/
|
|
140
138
|
export async function ensureBusinessForEntity(client, entityId, options) {
|
|
141
139
|
// Validate entityId format (basic UUID check)
|
|
142
|
-
|
|
143
|
-
if (!uuidPattern.test(entityId)) {
|
|
140
|
+
if (!UUID_REGEX.test(entityId)) {
|
|
144
141
|
throw new EntityValidationError('Business', ['entityId must be a valid UUID'], { entityId });
|
|
145
142
|
}
|
|
146
143
|
try {
|
|
@@ -155,23 +152,36 @@ export async function ensureBusinessForEntity(client, entityId, options) {
|
|
|
155
152
|
if (entityExists.rows.length === 0) {
|
|
156
153
|
throw new EntityValidationError('Business', [`Financial entity ${entityId} not found. Create it first via ensureFinancialEntity.`], { entityId });
|
|
157
154
|
}
|
|
158
|
-
//
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
FROM ${qualifyTable('businesses')}
|
|
162
|
-
WHERE id = $1
|
|
163
|
-
LIMIT 1
|
|
164
|
-
`;
|
|
165
|
-
const existingResult = await client.query(selectQuery, [entityId]);
|
|
166
|
-
if (existingResult.rows.length > 0) {
|
|
167
|
-
return; // Business already exists, preserve existing values
|
|
168
|
-
}
|
|
169
|
-
// Insert new business
|
|
155
|
+
// Use atomic INSERT...ON CONFLICT on PRIMARY KEY (id) to handle concurrent inserts
|
|
156
|
+
// If the deterministic ID already exists (from a previous call or concurrent insert),
|
|
157
|
+
// the conflict handler will safely return the existing row
|
|
170
158
|
const insertQuery = `
|
|
171
|
-
INSERT INTO ${qualifyTable('businesses')} (
|
|
172
|
-
|
|
159
|
+
INSERT INTO ${qualifyTable('businesses')} (
|
|
160
|
+
id, hebrew_name, address, city, zip_code, email, website, phone_number, vat_number,
|
|
161
|
+
exempt_dealer, suggestion_data, optional_vat, country,
|
|
162
|
+
pcn874_record_type_override, can_settle_with_receipt, no_invoices_required
|
|
163
|
+
)
|
|
164
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16)
|
|
165
|
+
ON CONFLICT (id) DO NOTHING
|
|
173
166
|
`;
|
|
174
|
-
await client.query(insertQuery, [
|
|
167
|
+
await client.query(insertQuery, [
|
|
168
|
+
entityId,
|
|
169
|
+
options?.hebrewName,
|
|
170
|
+
options?.address,
|
|
171
|
+
options?.city,
|
|
172
|
+
options?.zipCode,
|
|
173
|
+
options?.email,
|
|
174
|
+
options?.website,
|
|
175
|
+
options?.phoneNumber,
|
|
176
|
+
options?.governmentId, // Maps to vat_number column
|
|
177
|
+
options?.exemptDealer ?? false,
|
|
178
|
+
options?.suggestions ?? null,
|
|
179
|
+
options?.optionalVat ?? false,
|
|
180
|
+
options?.country ?? 'ISR',
|
|
181
|
+
options?.pcn874RecordTypeOverride ?? null,
|
|
182
|
+
options?.isReceiptEnough ?? false,
|
|
183
|
+
options?.isDocumentsOptional ?? false
|
|
184
|
+
]);
|
|
175
185
|
}
|
|
176
186
|
catch (error) {
|
|
177
187
|
if (error instanceof EntityValidationError || error instanceof SeedError) {
|
|
@@ -227,8 +237,7 @@ export async function ensureBusinessForEntity(client, entityId, options) {
|
|
|
227
237
|
*/
|
|
228
238
|
export async function ensureTaxCategoryForEntity(client, entityId, options) {
|
|
229
239
|
// Validate entityId format (basic UUID check)
|
|
230
|
-
|
|
231
|
-
if (!uuidPattern.test(entityId)) {
|
|
240
|
+
if (!UUID_REGEX.test(entityId)) {
|
|
232
241
|
throw new EntityValidationError('TaxCategory', ['entityId must be a valid UUID'], { entityId });
|
|
233
242
|
}
|
|
234
243
|
try {
|
|
@@ -243,23 +252,17 @@ export async function ensureTaxCategoryForEntity(client, entityId, options) {
|
|
|
243
252
|
if (entityExists.rows.length === 0) {
|
|
244
253
|
throw new EntityValidationError('TaxCategory', [`Financial entity ${entityId} not found. Create it first via ensureFinancialEntity.`], { entityId });
|
|
245
254
|
}
|
|
246
|
-
//
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
FROM ${qualifyTable('tax_categories')}
|
|
250
|
-
WHERE id = $1
|
|
251
|
-
LIMIT 1
|
|
252
|
-
`;
|
|
253
|
-
const existingResult = await client.query(selectQuery, [entityId]);
|
|
254
|
-
if (existingResult.rows.length > 0) {
|
|
255
|
-
return; // Tax category already exists, preserve existing values
|
|
256
|
-
}
|
|
257
|
-
// Insert new tax category
|
|
255
|
+
// Use atomic INSERT...ON CONFLICT on PRIMARY KEY (id) to handle concurrent inserts
|
|
256
|
+
// If the deterministic ID already exists (from a previous call or concurrent insert),
|
|
257
|
+
// the conflict handler will safely return the existing row
|
|
258
258
|
const insertQuery = `
|
|
259
|
-
INSERT INTO ${qualifyTable('tax_categories')} (
|
|
260
|
-
|
|
259
|
+
INSERT INTO ${qualifyTable('tax_categories')} (
|
|
260
|
+
id, hashavshevet_name, tax_excluded
|
|
261
|
+
)
|
|
262
|
+
VALUES ($1, $2, $3)
|
|
263
|
+
ON CONFLICT (id) DO NOTHING
|
|
261
264
|
`;
|
|
262
|
-
await client.query(insertQuery, [entityId]);
|
|
265
|
+
await client.query(insertQuery, [entityId, options?.hashavshevetName, options?.taxExcluded ?? false]);
|
|
263
266
|
}
|
|
264
267
|
catch (error) {
|
|
265
268
|
if (error instanceof EntityValidationError || error instanceof SeedError) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed-helpers.js","sourceRoot":"","sources":["../../../../../src/__tests__/helpers/seed-helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"seed-helpers.js","sourceRoot":"","sources":["../../../../../src/__tests__/helpers/seed-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { describe, expect, it, beforeAll, afterAll } from 'vitest';
|
|
2
2
|
import { TestDatabase } from './helpers/db-setup.js';
|
|
3
3
|
import { seedAdminCore } from '../../scripts/seed-admin-context.js';
|
|
4
|
+
import { UUID_REGEX } from '../shared/constants.js';
|
|
4
5
|
describe('seedAdminCore integration', () => {
|
|
5
6
|
let db;
|
|
6
7
|
beforeAll(async () => {
|
|
@@ -16,7 +17,7 @@ describe('seedAdminCore integration', () => {
|
|
|
16
17
|
const { adminEntityId } = await seedAdminCore(client);
|
|
17
18
|
// Verify admin entity exists
|
|
18
19
|
expect(adminEntityId).toBeTruthy();
|
|
19
|
-
expect(adminEntityId).toMatch(
|
|
20
|
+
expect(adminEntityId).toMatch(UUID_REGEX);
|
|
20
21
|
// Verify admin financial entity
|
|
21
22
|
const adminEntity = await client.query(`SELECT * FROM accounter_schema.financial_entities WHERE id = $1`, [adminEntityId]);
|
|
22
23
|
expect(adminEntity.rows).toHaveLength(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seed-admin-context.integration.test.js","sourceRoot":"","sources":["../../../../src/__tests__/seed-admin-context.integration.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;
|
|
1
|
+
{"version":3,"file":"seed-admin-context.integration.test.js","sourceRoot":"","sources":["../../../../src/__tests__/seed-admin-context.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
2
|
import { makeUUID } from '../helpers/deterministic-uuid.js';
|
|
3
|
+
import { UUID5_REGEX } from 'shared/constants.js';
|
|
3
4
|
describe('deterministic-uuid', () => {
|
|
4
5
|
describe('makeUUID', () => {
|
|
5
6
|
it('generates same UUID for same inputs', () => {
|
|
6
7
|
const uuid1 = makeUUID('business', 'acme-consulting-llc');
|
|
7
8
|
const uuid2 = makeUUID('business', 'acme-consulting-llc');
|
|
8
9
|
expect(uuid1).toBe(uuid2);
|
|
9
|
-
expect(uuid1).toMatch(
|
|
10
|
+
expect(uuid1).toMatch(UUID5_REGEX);
|
|
10
11
|
});
|
|
11
12
|
it('generates different UUIDs for different names', () => {
|
|
12
13
|
const uuid1 = makeUUID('business', 'acme-llc');
|
|
@@ -31,7 +32,7 @@ describe('deterministic-uuid', () => {
|
|
|
31
32
|
const uuid = makeUUID('charge', 'monthly-invoice-2024-11');
|
|
32
33
|
// UUID v5 format: xxxxxxxx-xxxx-5xxx-yxxx-xxxxxxxxxxxx
|
|
33
34
|
// where y is one of [8, 9, a, b]
|
|
34
|
-
expect(uuid).toMatch(
|
|
35
|
+
expect(uuid).toMatch(UUID5_REGEX);
|
|
35
36
|
});
|
|
36
37
|
it('handles kebab-case names correctly', () => {
|
|
37
38
|
const uuid1 = makeUUID('business', 'us-supplier-acme-llc');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deterministic-uuid.test.js","sourceRoot":"","sources":["../../../../../src/demo-fixtures/__tests__/deterministic-uuid.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"deterministic-uuid.test.js","sourceRoot":"","sources":["../../../../../src/demo-fixtures/__tests__/deterministic-uuid.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { spawn } from 'child_process';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { dirname, resolve } from 'path';
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = dirname(__filename);
|
|
7
|
+
/**
|
|
8
|
+
* Integration test: Seed demo data and validate
|
|
9
|
+
*
|
|
10
|
+
* This test runs the full seed + validate pipeline to ensure:
|
|
11
|
+
* 1. Seed script completes successfully (exit code 0)
|
|
12
|
+
* 2. Validation script passes all checks (exit code 0)
|
|
13
|
+
* 3. End-to-end data integrity from seed to validation
|
|
14
|
+
*
|
|
15
|
+
* Prerequisites:
|
|
16
|
+
* - Database connection available
|
|
17
|
+
* - ALLOW_DEMO_SEED=1 environment variable set
|
|
18
|
+
* - Migrations applied
|
|
19
|
+
*
|
|
20
|
+
* Note: This is a slow test (~10-30 seconds) and should be run separately
|
|
21
|
+
* or marked as integration test in CI/CD pipelines.
|
|
22
|
+
*/
|
|
23
|
+
describe('Seed and Validate Integration', () => {
|
|
24
|
+
// Increase timeout for this integration test (30 seconds)
|
|
25
|
+
it('seeds demo data and passes validation', async () => {
|
|
26
|
+
// Check for stale migrations before running the test
|
|
27
|
+
if (process.env.SKIP_DEMO_SEED_STALE_MIGRATIONS === '1') {
|
|
28
|
+
throw new Error('Demo-seed test failed: migrations are stale. Run: yarn workspace @accounter/migrations migration:run');
|
|
29
|
+
}
|
|
30
|
+
const workspaceRoot = resolve(__dirname, '../../../../../');
|
|
31
|
+
const seedScriptPath = resolve(workspaceRoot, 'scripts/seed-demo-data.ts');
|
|
32
|
+
const validateScriptPath = resolve(workspaceRoot, 'packages/server/src/demo-fixtures/validate-demo-data.ts');
|
|
33
|
+
const registerEsmPath = resolve(workspaceRoot, 'scripts/register-esm.js');
|
|
34
|
+
// Step 1: Run seed script
|
|
35
|
+
const seedExitCode = await new Promise((resolve, reject) => {
|
|
36
|
+
const seedProcess = spawn('node', ['--import', registerEsmPath, seedScriptPath], {
|
|
37
|
+
cwd: workspaceRoot,
|
|
38
|
+
env: {
|
|
39
|
+
...process.env,
|
|
40
|
+
ALLOW_DEMO_SEED: '1',
|
|
41
|
+
},
|
|
42
|
+
stdio: 'inherit', // Show output for debugging
|
|
43
|
+
});
|
|
44
|
+
seedProcess.on('close', code => {
|
|
45
|
+
resolve(code ?? 1);
|
|
46
|
+
});
|
|
47
|
+
seedProcess.on('error', err => {
|
|
48
|
+
reject(err);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
expect(seedExitCode).toBe(0);
|
|
52
|
+
// Step 2: Run validation script
|
|
53
|
+
const validateExitCode = await new Promise((resolve, reject) => {
|
|
54
|
+
const validateProcess = spawn('node', ['--import', registerEsmPath, validateScriptPath], {
|
|
55
|
+
cwd: workspaceRoot,
|
|
56
|
+
env: process.env,
|
|
57
|
+
stdio: 'inherit',
|
|
58
|
+
});
|
|
59
|
+
validateProcess.on('close', code => {
|
|
60
|
+
resolve(code ?? 1);
|
|
61
|
+
});
|
|
62
|
+
validateProcess.on('error', err => {
|
|
63
|
+
reject(err);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
expect(validateExitCode).toBe(0);
|
|
67
|
+
}, 30000); // 30 second timeout
|
|
68
|
+
});
|
|
69
|
+
//# sourceMappingURL=seed-and-validate.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seed-and-validate.test.js","sourceRoot":"","sources":["../../../../../src/demo-fixtures/__tests__/seed-and-validate.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAExC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;;;;;;;;;;;;;;GAeG;AACH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,0DAA0D;IAC1D,EAAE,CACA,uCAAuC,EACvC,KAAK,IAAI,EAAE;QACT,qDAAqD;QACrD,IAAI,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,GAAG,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,sGAAsG,CACvG,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAC5D,MAAM,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC;QAC3E,MAAM,kBAAkB,GAAG,OAAO,CAChC,aAAa,EACb,yDAAyD,CAC1D,CAAC;QACF,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC;QAE1E,0BAA0B;QAC1B,MAAM,YAAY,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACjE,MAAM,WAAW,GAAG,KAAK,CACvB,MAAM,EACN,CAAC,UAAU,EAAE,eAAe,EAAE,cAAc,CAAC,EAC7C;gBACE,GAAG,EAAE,aAAa;gBAClB,GAAG,EAAE;oBACH,GAAG,OAAO,CAAC,GAAG;oBACd,eAAe,EAAE,GAAG;iBACrB;gBACD,KAAK,EAAE,SAAS,EAAE,4BAA4B;aAC/C,CACF,CAAC;YAEF,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;gBAC7B,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;YAEH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBAC5B,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE7B,gCAAgC;QAChC,MAAM,gBAAgB,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrE,MAAM,eAAe,GAAG,KAAK,CAC3B,MAAM,EACN,CAAC,UAAU,EAAE,eAAe,EAAE,kBAAkB,CAAC,EACjD;gBACE,GAAG,EAAE,aAAa;gBAClB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,SAAS;aACjB,CACF,CAAC;YAEF,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;gBACjC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;YAEH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;gBAChC,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,EACD,KAAK,CACN,CAAC,CAAC,oBAAoB;AACzB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { getAllUseCases } from '../use-cases/index.js';
|
|
3
|
+
describe('Use-Case Registry', () => {
|
|
4
|
+
it('has no duplicate IDs across all categories', () => {
|
|
5
|
+
const allUseCases = getAllUseCases();
|
|
6
|
+
const ids = allUseCases.map(uc => uc.id);
|
|
7
|
+
const unique = new Set(ids);
|
|
8
|
+
expect(unique.size).toBe(ids.length);
|
|
9
|
+
});
|
|
10
|
+
it('all use-cases have required fields', () => {
|
|
11
|
+
const allUseCases = getAllUseCases();
|
|
12
|
+
allUseCases.forEach(uc => {
|
|
13
|
+
expect(uc.id).toBeTruthy();
|
|
14
|
+
expect(uc.name).toBeTruthy();
|
|
15
|
+
expect(uc.category).toBeTruthy();
|
|
16
|
+
expect(uc.fixtures).toBeDefined();
|
|
17
|
+
expect(Array.isArray(uc.fixtures.businesses)).toBe(true);
|
|
18
|
+
expect(Array.isArray(uc.fixtures.taxCategories)).toBe(true);
|
|
19
|
+
expect(Array.isArray(uc.fixtures.financialAccounts)).toBe(true);
|
|
20
|
+
expect(Array.isArray(uc.fixtures.charges)).toBe(true);
|
|
21
|
+
expect(Array.isArray(uc.fixtures.transactions)).toBe(true);
|
|
22
|
+
expect(Array.isArray(uc.fixtures.documents)).toBe(true);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=use-case-registry.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-case-registry.test.js","sourceRoot":"","sources":["../../../../../src/demo-fixtures/__tests__/use-case-registry.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;QACrC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YACvB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC;YAC3B,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YAC7B,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;YAClC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3D,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Client } from 'pg';
|
|
2
|
+
/**
|
|
3
|
+
* Create (or fetch) the Accounter Admin Business financial entity and return its id.
|
|
4
|
+
*
|
|
5
|
+
* Simplified logic:
|
|
6
|
+
* - Looks up existing row by id or by (type='business' AND name='Accounter Admin Business').
|
|
7
|
+
* - If not found, inserts a self-owned business entity with a deterministic id.
|
|
8
|
+
* - Returns the id of the Accounter Admin Business entity.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createAdminBusinessContext(client: Client): Promise<string>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { makeUUID } from './deterministic-uuid.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create (or fetch) the Accounter Admin Business financial entity and return its id.
|
|
4
|
+
*
|
|
5
|
+
* Simplified logic:
|
|
6
|
+
* - Looks up existing row by id or by (type='business' AND name='Accounter Admin Business').
|
|
7
|
+
* - If not found, inserts a self-owned business entity with a deterministic id.
|
|
8
|
+
* - Returns the id of the Accounter Admin Business entity.
|
|
9
|
+
*/
|
|
10
|
+
export async function createAdminBusinessContext(client) {
|
|
11
|
+
const deterministicId = makeUUID('business', 'admin-business');
|
|
12
|
+
// 1) Try find by deterministic id or by semantic key (type+name)
|
|
13
|
+
const findResult = await client.query(`SELECT id
|
|
14
|
+
FROM accounter_schema.financial_entities
|
|
15
|
+
WHERE id = $1 OR (type = 'business' AND name = 'Accounter Admin Business')
|
|
16
|
+
LIMIT 1`, [deterministicId]);
|
|
17
|
+
if (findResult.rows.length > 0) {
|
|
18
|
+
return findResult.rows[0].id;
|
|
19
|
+
}
|
|
20
|
+
// 2) Handle circular FK: financial_entities.owner_id → businesses.id ← businesses.id → financial_entities.id
|
|
21
|
+
// Resolution strategy:
|
|
22
|
+
// a) Insert financial_entity with NULL owner_id (breaks circular dependency temporarily)
|
|
23
|
+
// b) Insert business row (now has valid financial_entity reference)
|
|
24
|
+
// c) Update financial_entity to set owner_id = self (closes the circle)
|
|
25
|
+
//
|
|
26
|
+
// This 3-step process is necessary because PostgreSQL doesn't support DEFERRABLE
|
|
27
|
+
// constraints on our foreign keys, and we need both tables to reference each other.
|
|
28
|
+
const adminId = deterministicId;
|
|
29
|
+
await client.query(`INSERT INTO accounter_schema.financial_entities (id, type, name, owner_id)
|
|
30
|
+
VALUES ($1, 'business', 'Accounter Admin Business', NULL)`, [adminId]);
|
|
31
|
+
// 3) Insert business row (references financial_entity)
|
|
32
|
+
await client.query(`INSERT INTO accounter_schema.businesses (id)
|
|
33
|
+
VALUES ($1)`, [adminId]);
|
|
34
|
+
// 4) Update financial_entity to set owner_id (self-reference)
|
|
35
|
+
await client.query(`UPDATE accounter_schema.financial_entities
|
|
36
|
+
SET owner_id = $1
|
|
37
|
+
WHERE id = $1`, [adminId]);
|
|
38
|
+
return adminId;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=admin-context.js.map
|