@nsshunt/stsfhirpg 1.2.27 → 1.2.29

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/dist/index.mjs CHANGED
@@ -13,7 +13,7 @@ import cluster from "cluster";
13
13
  import { Pool } from "pg";
14
14
  import { TinyEmitter } from "tiny-emitter";
15
15
  //#region \0rolldown/runtime.js
16
- var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
16
+ var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
17
17
  //#endregion
18
18
  //#region src/fhir-utils/fhirDateUtils.ts
19
19
  var FHIRDateUtils = class {
@@ -3245,7 +3245,8 @@ var HashUtils = class HashUtils {
3245
3245
  return input.trim().replace(/\s+/g, " ").toLowerCase();
3246
3246
  };
3247
3247
  InitHash = async () => {
3248
- this.h64 = (await e()).h64;
3248
+ const api = await e();
3249
+ this.h64 = api.h64;
3249
3250
  };
3250
3251
  xxhash64Signed(input) {
3251
3252
  if (this.h64) return BigInt.asIntN(64, this.h64(input, this.HASH_SEED));
@@ -4786,19 +4787,46 @@ var PGPoolManager = class extends TinyEmitter {
4786
4787
  }
4787
4788
  };
4788
4789
  //#endregion
4790
+ //#region src/fhir-database/pg/pgfhirdbbase.ts
4791
+ var DBSTSFhirDBBase = class {
4792
+ _options;
4793
+ _poolManager;
4794
+ constructor(options) {
4795
+ this._options = options;
4796
+ this._poolManager = options.poolManager;
4797
+ }
4798
+ async withClient(fname, fn) {
4799
+ let client;
4800
+ try {
4801
+ client = await this._poolManager.connectReadWrite();
4802
+ } catch (error) {
4803
+ this._options.logger.error(`${fname}(): DB: Connection Error: [${error}]`);
4804
+ throw error;
4805
+ }
4806
+ try {
4807
+ return await fn(client);
4808
+ } catch (error) {
4809
+ this._options.logger.error(`${fname}(): DB: Query Error: [${error}]`);
4810
+ throw error;
4811
+ } finally {
4812
+ client.release();
4813
+ }
4814
+ }
4815
+ };
4816
+ //#endregion
4789
4817
  //#region src/fhir-database/pg/pgfhirresource.ts
4790
- var DBSTSResource = class {
4791
- #poolManager;
4792
- constructor(poolManager) {
4793
- this.#poolManager = poolManager;
4818
+ var DBSTSResource = class extends DBSTSFhirDBBase {
4819
+ constructor(options) {
4820
+ super(options);
4794
4821
  }
4795
4822
  async InsertResourceEx(client, data) {
4796
4823
  try {
4797
- await client.query(`
4824
+ return (await client.query(`
4798
4825
  INSERT INTO stsresfhir (
4799
4826
  PID, PARTITION_ID, PARTITION_DATE, RES_ID, RES_TYPE,
4800
4827
  RES_VER, RES_VERSION, RES_PUBLISHED, RES_UPDATED
4801
4828
  ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
4829
+ RETURNING RES_VER
4802
4830
  `, [
4803
4831
  data.PID,
4804
4832
  data.PARTITION_ID,
@@ -4809,146 +4837,90 @@ var DBSTSResource = class {
4809
4837
  data.RES_VERSION,
4810
4838
  BigInt(data.RES_PUBLISHED),
4811
4839
  BigInt(data.RES_UPDATED)
4812
- ]);
4840
+ ])).rows[0]?.res_ver;
4813
4841
  } catch (error) {
4814
- defaultLogger.error(`DBSTSResource:InsertResource(): Query Error: [${error}]`);
4842
+ this._options.logger.error(`DBSTSResource:InsertResource(): Query Error: [${error}]`);
4815
4843
  throw error;
4816
4844
  }
4817
4845
  }
4818
4846
  async InsertResource(data) {
4819
- try {
4820
- const client = await this.#poolManager.connectReadWrite();
4821
- try {
4822
- await this.InsertResourceEx(client, data);
4823
- } catch (error) {
4824
- defaultLogger.error(`DBSTSResource:InsertResource(): Query Error: [${error}]`);
4825
- } finally {
4826
- client.release();
4827
- }
4828
- } catch (error) {
4829
- defaultLogger.error(`DBSTSResource:InsertResource(): Connection Error: [${error}]`);
4830
- }
4847
+ return this.withClient("InsertResource", ((client) => this.InsertResourceEx(client, data)));
4831
4848
  }
4832
4849
  async UpdateResourceRecordEx(client, data) {
4833
4850
  try {
4834
- const res = await client.query(`
4851
+ return (await client.query(`
4835
4852
  UPDATE stsresfhir SET
4836
4853
  RES_VER = RES_VER + 1,
4837
4854
  RES_UPDATED = $1,
4838
4855
  RES_DELETED_AT = NULL
4839
4856
  WHERE RES_ID = $2 AND RES_TYPE = $3 AND RES_VER = $4
4857
+ RETURNING RES_VER
4840
4858
  `, [
4841
4859
  BigInt(data.RES_UPDATED),
4842
4860
  data.RES_ID,
4843
4861
  data.RES_TYPE,
4844
4862
  data.RES_VER
4845
- ]);
4846
- return res.rowCount ? res.rowCount > 0 : false;
4863
+ ])).rows[0]?.res_ver;
4847
4864
  } catch (error) {
4848
- defaultLogger.error(`DBSTSResource:UpdateResourceRecordEx(): Query Error: [${error}]`);
4865
+ this._options.logger.error(`DBSTSResource:UpdateResourceRecordEx(): Query Error: [${error}]`);
4849
4866
  throw error;
4850
4867
  }
4851
4868
  }
4852
4869
  async UpdateResourceRecord(data) {
4853
- try {
4854
- const client = await this.#poolManager.connectReadWrite();
4855
- try {
4856
- return await this.UpdateResourceRecordEx(client, data);
4857
- } catch (error) {
4858
- defaultLogger.error(`DBSTSResource:UpdateResourceRecord-1(): Query Error: [${error}]`);
4859
- } finally {
4860
- client.release();
4861
- }
4862
- } catch (error) {
4863
- defaultLogger.error(`DBSTSResource:UpdateResourceRecord-2(): Connection Error: [${error}]`);
4864
- }
4870
+ return this.withClient("UpdateResourceRecord", ((client) => this.UpdateResourceRecordEx(client, data)));
4865
4871
  }
4866
4872
  async DeleteResourceRecordEx(client, data) {
4867
4873
  try {
4868
- const res = await client.query(`
4874
+ return (await client.query(`
4869
4875
  UPDATE stsresfhir SET
4870
4876
  RES_DELETED_AT = $1,
4871
4877
  RES_VER = RES_VER + 1,
4872
4878
  RES_UPDATED = $2
4873
4879
  WHERE RES_ID = $3 AND RES_TYPE = $4 AND RES_VER = $5
4880
+ RETURNING RES_VER
4874
4881
  `, [
4875
4882
  BigInt(data.RES_DELETED_AT),
4876
4883
  BigInt(data.RES_UPDATED),
4877
4884
  data.RES_ID,
4878
4885
  data.RES_TYPE,
4879
4886
  data.RES_VER
4880
- ]);
4881
- return res.rowCount ? res.rowCount > 0 : false;
4887
+ ])).rows[0]?.res_ver;
4882
4888
  } catch (error) {
4883
- defaultLogger.error(`DBSTSResource:DeleteResourceRecord(): Query Error: [${error}]`);
4889
+ this._options.logger.error(`DBSTSResource:DeleteResourceRecord(): Query Error: [${error}]`);
4884
4890
  throw error;
4885
4891
  }
4886
4892
  }
4887
4893
  async DeleteResourceRecord(data) {
4888
- try {
4889
- const client = await this.#poolManager.connectReadWrite();
4890
- try {
4891
- return await this.DeleteResourceRecordEx(client, data);
4892
- } catch (error) {
4893
- defaultLogger.error(`DBSTSResource:DeleteResourceRecord(): Query Error: [${error}]`);
4894
- } finally {
4895
- client.release();
4896
- }
4897
- } catch (error) {
4898
- defaultLogger.error(`DBSTSResource:DeleteResourceRecord(): Connection Error: [${error}]`);
4899
- }
4894
+ return this.withClient("DeleteResourceRecord", ((client) => this.DeleteResourceRecordEx(client, data)));
4900
4895
  }
4901
4896
  async ReadResourceRecordEx(client, PID) {
4902
4897
  try {
4903
4898
  return (await client.query(`SELECT * FROM stsresfhir WHERE PID = $1`, [PID])).rows[0];
4904
4899
  } catch (error) {
4905
- defaultLogger.error(`DBSTSResource:ReadResourceRecord(): Query Error: [${error}]`);
4900
+ this._options.logger.error(`DBSTSResource:ReadResourceRecord(): Query Error: [${error}]`);
4906
4901
  throw error;
4907
4902
  }
4908
4903
  }
4909
4904
  async ReadResourceRecord(PID) {
4910
- try {
4911
- const client = await this.#poolManager.connectReadOnly();
4912
- try {
4913
- return await this.ReadResourceRecordEx(client, PID);
4914
- } catch (error) {
4915
- defaultLogger.error(`DBSTSResource:ReadResourceRecord(): Query Error: [${error}]`);
4916
- } finally {
4917
- client.release();
4918
- }
4919
- } catch (error) {
4920
- defaultLogger.error(`DBSTSResource:ReadResourceRecord(): Connection Error: [${error}]`);
4921
- }
4905
+ return this.withClient("ReadResourceRecord", ((client) => this.ReadResourceRecordEx(client, PID)));
4922
4906
  }
4923
4907
  async ReadAllResourceRecordsEx(client) {
4924
4908
  try {
4925
4909
  return (await client.query(`SELECT * FROM stsresfhir`)).rows;
4926
4910
  } catch (error) {
4927
- defaultLogger.error(`DBSTSResource:ReadAllResourceRecords(): Query Error: [${error}]`);
4911
+ this._options.logger.error(`DBSTSResource:ReadAllResourceRecords(): Query Error: [${error}]`);
4928
4912
  throw error;
4929
4913
  }
4930
4914
  }
4931
4915
  async ReadAllResourceRecords() {
4932
- try {
4933
- const client = await this.#poolManager.connectReadOnly();
4934
- try {
4935
- return await this.ReadAllResourceRecordsEx(client);
4936
- } catch (error) {
4937
- defaultLogger.error(`DBSTSResource:ReadAllResourceRecords(): Query Error: [${error}]`);
4938
- } finally {
4939
- client.release();
4940
- }
4941
- } catch (error) {
4942
- defaultLogger.error(`DBSTSResource:ReadAllResourceRecords(): Connection Error: [${error}]`);
4943
- }
4916
+ return this.withClient("ReadAllResourceRecords", ((client) => this.ReadAllResourceRecordsEx(client)));
4944
4917
  }
4945
4918
  };
4946
4919
  //#endregion
4947
4920
  //#region src/fhir-database/pg/pgfhirresourceversion.ts
4948
- var DBSTSResourceVersion = class {
4949
- #poolManager;
4950
- constructor(poolManager) {
4951
- this.#poolManager = poolManager;
4921
+ var DBSTSResourceVersion = class extends DBSTSFhirDBBase {
4922
+ constructor(options) {
4923
+ super(options);
4952
4924
  }
4953
4925
  async InsertResourceVersionEx(client, data) {
4954
4926
  const values = [
@@ -4962,81 +4934,49 @@ var DBSTSResourceVersion = class {
4962
4934
  data.RES
4963
4935
  ];
4964
4936
  try {
4965
- await client.query(`
4937
+ return (await client.query(`
4966
4938
  INSERT INTO stsresfhirver (
4967
4939
  PID, PARTITION_ID, PARTITION_DATE,
4968
4940
  RES_ID, RES_TYPE, RES_VER, OPERATION, RES
4969
4941
  ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
4970
- `, values);
4942
+ RETURNING RES_VER
4943
+ `, values)).rows[0]?.res_ver;
4971
4944
  } catch (error) {
4972
- defaultLogger.error(`DBSTSResourceVersion:InsertResourceVersion(): Query Error: [${error}]`);
4973
- defaultLogger.error(`DBSTSResourceVersion:InsertResourceVersion(): --> Values PID: [${values[0]}]`);
4974
- defaultLogger.error(`DBSTSResourceVersion:InsertResourceVersion(): --> Values PARTITION_ID: [${values[1]}]`);
4975
- defaultLogger.error(`DBSTSResourceVersion:InsertResourceVersion(): --> Values PARTITION_DATE: [${values[2]}]`);
4976
- defaultLogger.error(`DBSTSResourceVersion:InsertResourceVersion(): --> Values RES_ID: [${values[3]}]`);
4977
- defaultLogger.error(`DBSTSResourceVersion:InsertResourceVersion(): --> Values RES_TYPE: [${values[4]}]`);
4978
- defaultLogger.error(`DBSTSResourceVersion:InsertResourceVersion(): --> Values RES_VER: [${values[5]}]`);
4979
- defaultLogger.error(`DBSTSResourceVersion:InsertResourceVersion(): --> Values OPERATION: [${values[6]}]`);
4945
+ this._options.logger.error(`DBSTSResourceVersion:InsertResourceVersion(): Query Error: [${error}]`);
4946
+ this._options.logger.error(`DBSTSResourceVersion:InsertResourceVersion(): --> Values PID: [${values[0]}]`);
4947
+ this._options.logger.error(`DBSTSResourceVersion:InsertResourceVersion(): --> Values PARTITION_ID: [${values[1]}]`);
4948
+ this._options.logger.error(`DBSTSResourceVersion:InsertResourceVersion(): --> Values PARTITION_DATE: [${values[2]}]`);
4949
+ this._options.logger.error(`DBSTSResourceVersion:InsertResourceVersion(): --> Values RES_ID: [${values[3]}]`);
4950
+ this._options.logger.error(`DBSTSResourceVersion:InsertResourceVersion(): --> Values RES_TYPE: [${values[4]}]`);
4951
+ this._options.logger.error(`DBSTSResourceVersion:InsertResourceVersion(): --> Values RES_VER: [${values[5]}]`);
4952
+ this._options.logger.error(`DBSTSResourceVersion:InsertResourceVersion(): --> Values OPERATION: [${values[6]}]`);
4980
4953
  throw error;
4981
4954
  }
4982
4955
  }
4983
4956
  async InsertResourceVersion(data) {
4984
- try {
4985
- const client = await this.#poolManager.connectReadWrite();
4986
- try {
4987
- await this.InsertResourceVersionEx(client, data);
4988
- } catch (error) {
4989
- defaultLogger.error(`DBSTSResourceVersion:InsertResourceVersion(): Query Error: [${error}]`);
4990
- } finally {
4991
- client.release();
4992
- }
4993
- } catch (error) {
4994
- defaultLogger.error(`DBSTSResourceVersion:InsertResourceVersion(): Connection Error: [${error}]`);
4995
- }
4957
+ return this.withClient("InsertResourceVersion", ((client) => this.InsertResourceVersionEx(client, data)));
4996
4958
  }
4997
4959
  async ReadResourceVersionRecordEx(client, PID, RES_VER) {
4998
4960
  try {
4999
4961
  return (await client.query(`SELECT * FROM stsresfhirver WHERE PID = $1 AND RES_VER = $2`, [PID, RES_VER])).rows[0];
5000
4962
  } catch (error) {
5001
- defaultLogger.error(`DBSTSResourceVersion:ReadResourceVersionRecord(): Query Error: [${error}]`);
4963
+ this._options.logger.error(`DBSTSResourceVersion:ReadResourceVersionRecord(): Query Error: [${error}]`);
5002
4964
  throw error;
5003
4965
  }
5004
4966
  }
5005
4967
  async ReadResourceVersionRecord(PID, RES_VER) {
5006
- try {
5007
- const client = await this.#poolManager.connectReadWrite();
5008
- try {
5009
- return await this.ReadResourceVersionRecordEx(client, PID, RES_VER);
5010
- } catch (error) {
5011
- defaultLogger.error(`DBSTSResourceVersion:ReadResourceVersionRecord(): Query Error: [${error}]`);
5012
- } finally {
5013
- client.release();
5014
- }
5015
- } catch (error) {
5016
- defaultLogger.error(`DBSTSResourceVersion:ReadResourceVersionRecord(): Connection Error: [${error}]`);
5017
- }
4968
+ return this.withClient("ReadResourceVersionRecord", ((client) => this.ReadResourceVersionRecordEx(client, PID, RES_VER)));
5018
4969
  }
5019
4970
  async ReadAllResourceVersionRecordsEx(client) {
5020
4971
  try {
5021
4972
  return (await client.query(`SELECT * FROM stsresfhirver`)).rows;
5022
4973
  } catch (error) {
5023
- defaultLogger.error(`DBSTSResourceVersion:ReadAllResourceVersionRecords(): Query Error: [${error}]`);
4974
+ this._options.logger.error(`DBSTSResourceVersion:ReadAllResourceVersionRecords(): Query Error: [${error}]`);
5024
4975
  throw error;
5025
4976
  }
5026
4977
  }
5027
4978
  async ReadAllResourceVersionRecords() {
5028
- try {
5029
- const client = await this.#poolManager.connectReadWrite();
5030
- try {
5031
- return await this.ReadAllResourceVersionRecordsEx(client);
5032
- } catch (error) {
5033
- defaultLogger.error(`DBSTSResourceVersion:ReadAllResourceVersionRecords(): Query Error: [${error}]`);
5034
- } finally {
5035
- client.release();
5036
- }
5037
- } catch (error) {
5038
- defaultLogger.error(`DBSTSResourceVersion:ReadAllResourceVersionRecords(): Connection Error: [${error}]`);
5039
- }
4979
+ return this.withClient("ReadAllResourceVersionRecords", ((client) => this.ReadAllResourceVersionRecordsEx(client)));
5040
4980
  }
5041
4981
  };
5042
4982
  //#endregion
@@ -5822,8 +5762,14 @@ var PGFhirAccessLayer = class extends TinyEmitter {
5822
5762
  logger: this.#options.logger,
5823
5763
  usedefaultdb: this.#options.usedefaultdb
5824
5764
  });
5825
- this.#dbSTSResource = new DBSTSResource(this.#poolManager);
5826
- this.#dbSTSResourceVersion = new DBSTSResourceVersion(this.#poolManager);
5765
+ this.#dbSTSResource = new DBSTSResource({
5766
+ logger: this.#options.logger,
5767
+ poolManager: this.#poolManager
5768
+ });
5769
+ this.#dbSTSResourceVersion = new DBSTSResourceVersion({
5770
+ logger: this.#options.logger,
5771
+ poolManager: this.#poolManager
5772
+ });
5827
5773
  this.#dbSearchIndex = DBSearchIndex.getInstance();
5828
5774
  this.#dbSTSResourceLink = new DBSTSResourceLink();
5829
5775
  this.#dbSTSString = new DBSTSString();
@@ -5834,6 +5780,16 @@ var PGFhirAccessLayer = class extends TinyEmitter {
5834
5780
  this.#dbSTSUri = new DBSTSUri();
5835
5781
  this.#dbSTSCombo = new DBSTSCombo();
5836
5782
  }
5783
+ GetOperationOutcome = (code, diagnostics) => {
5784
+ return {
5785
+ resourceType: "OperationOutcome",
5786
+ issue: [{
5787
+ severity: "error",
5788
+ code,
5789
+ diagnostics
5790
+ }]
5791
+ };
5792
+ };
5837
5793
  async StartDatabase() {
5838
5794
  return true;
5839
5795
  }
@@ -6019,14 +5975,14 @@ var PGFhirAccessLayer = class extends TinyEmitter {
6019
5975
  return false;
6020
5976
  };
6021
5977
  CreateResource = async (resource, transactionHandle) => {
6022
- if (this.#poolManager) try {
6023
- let PK = randomUUID$1();
6024
- const RES_ID = resource.id;
6025
- const RES_TYPE = resource.resourceType;
6026
- const RES = JSON.stringify(resource);
6027
- const now = (/* @__PURE__ */ new Date()).getTime();
6028
- let client;
6029
- let useTransaction;
5978
+ if (!this.#poolManager) {
5979
+ const errorMessage = `CreateResource(): poolManager not set`;
5980
+ this.#options.logger.error(errorMessage);
5981
+ throw new Error(errorMessage);
5982
+ }
5983
+ let client;
5984
+ let useTransaction;
5985
+ try {
6030
5986
  if (transactionHandle && this.#transactions[transactionHandle]) {
6031
5987
  client = this.#transactions[transactionHandle].client;
6032
5988
  useTransaction = false;
@@ -6034,50 +5990,72 @@ var PGFhirAccessLayer = class extends TinyEmitter {
6034
5990
  client = await this.#poolManager.connectReadWrite();
6035
5991
  useTransaction = true;
6036
5992
  }
6037
- try {
6038
- if (useTransaction) await client.query("BEGIN");
6039
- await this.#dbSTSResource.InsertResourceEx(client, {
6040
- PID: PK,
6041
- PARTITION_ID: 0,
6042
- PARTITION_DATE: 0,
6043
- RES_ID,
6044
- RES_TYPE,
6045
- RES_VER: 1,
6046
- RES_VERSION: "r5",
6047
- RES_PUBLISHED: now,
6048
- RES_UPDATED: now
6049
- });
6050
- await this.#dbSTSResourceVersion.InsertResourceVersionEx(client, {
6051
- PID: randomUUID$1(),
6052
- PARTITION_ID: 0,
6053
- PARTITION_DATE: 0,
6054
- RES_ID,
6055
- RES_TYPE,
6056
- RES_VER: 1,
6057
- OPERATION: "POST",
6058
- RES
6059
- });
6060
- performance.now();
6061
- await this.UpdateIndexes(client, resource);
6062
- if (useTransaction) await client.query("COMMIT");
6063
- return resource;
6064
- } catch (error) {
6065
- if (useTransaction) await client.query("ROLLBACK");
6066
- } finally {
6067
- if (useTransaction) client.release();
6068
- }
6069
5993
  } catch (error) {
6070
- defaultLogger.error(`PGFhirAccessLayer:CreateResource(): [${error}]`);
5994
+ const errorMessage = `CreateResource(): Could not get connection: Error: [${error}]`;
5995
+ this.#options.logger.error(errorMessage);
5996
+ throw new Error(errorMessage);
6071
5997
  }
6072
- };
6073
- UpdateResource = async (resource, RES_VER, operation, transactionHandle) => {
6074
- if (this.#poolManager) try {
5998
+ try {
6075
5999
  const RES_ID = resource.id;
6076
6000
  const RES_TYPE = resource.resourceType;
6077
- const RES = JSON.stringify(resource);
6078
6001
  const now = (/* @__PURE__ */ new Date()).getTime();
6079
- let client;
6080
- let useTransaction;
6002
+ if (useTransaction) await client.query("BEGIN");
6003
+ const newVersion = await this.#dbSTSResource.InsertResourceEx(client, {
6004
+ PID: randomUUID$1(),
6005
+ PARTITION_ID: 0,
6006
+ PARTITION_DATE: 0,
6007
+ RES_ID,
6008
+ RES_TYPE,
6009
+ RES_VER: 1,
6010
+ RES_VERSION: "r5",
6011
+ RES_PUBLISHED: now,
6012
+ RES_UPDATED: now
6013
+ });
6014
+ if (newVersion === void 0) {
6015
+ const errorMessage = `CreateResource(): Version Conflict. newVersion is undefined.`;
6016
+ this.#options.logger.error(errorMessage);
6017
+ throw new Error(errorMessage);
6018
+ }
6019
+ resource.meta ??= {};
6020
+ resource.meta.versionId = String(newVersion);
6021
+ resource.meta.lastUpdated = new Date(now).toISOString();
6022
+ const RES = JSON.stringify(resource);
6023
+ if (await this.#dbSTSResourceVersion.InsertResourceVersionEx(client, {
6024
+ PID: randomUUID$1(),
6025
+ PARTITION_ID: 0,
6026
+ PARTITION_DATE: 0,
6027
+ RES_ID,
6028
+ RES_TYPE,
6029
+ RES_VER: newVersion,
6030
+ OPERATION: "POST",
6031
+ RES
6032
+ }) === void 0) {
6033
+ const errorMessage = `CreateResource(): Version Conflict. resourceVersionRunResult is undefined.`;
6034
+ this.#options.logger.error(errorMessage);
6035
+ throw new Error(errorMessage);
6036
+ }
6037
+ performance.now();
6038
+ await this.UpdateIndexes(client, resource);
6039
+ if (useTransaction) await client.query("COMMIT");
6040
+ return resource;
6041
+ } catch (error) {
6042
+ if (useTransaction) await client.query("ROLLBACK");
6043
+ const errorMessage = `CreateResource(): Error: [${error}]`;
6044
+ this.#options.logger.error(errorMessage);
6045
+ throw new Error(errorMessage);
6046
+ } finally {
6047
+ if (useTransaction) client.release();
6048
+ }
6049
+ };
6050
+ UpdateResource = async (resource, RES_VER, operation, transactionHandle) => {
6051
+ if (!this.#poolManager) {
6052
+ const errorMessage = `UpdateResource(): poolManager not set`;
6053
+ this.#options.logger.error(errorMessage);
6054
+ throw new Error(errorMessage);
6055
+ }
6056
+ let client;
6057
+ let useTransaction;
6058
+ try {
6081
6059
  if (transactionHandle && this.#transactions[transactionHandle]) {
6082
6060
  client = this.#transactions[transactionHandle].client;
6083
6061
  useTransaction = false;
@@ -6085,43 +6063,66 @@ var PGFhirAccessLayer = class extends TinyEmitter {
6085
6063
  client = await this.#poolManager.connectReadWrite();
6086
6064
  useTransaction = true;
6087
6065
  }
6088
- try {
6089
- if (useTransaction) await client.query("BEGIN");
6090
- await this.#dbSTSResource.UpdateResourceRecordEx(client, {
6091
- RES_TYPE,
6092
- RES_ID,
6093
- RES_VER,
6094
- RES_UPDATED: now
6095
- });
6096
- await this.#dbSTSResourceVersion.InsertResourceVersionEx(client, {
6097
- PID: randomUUID$1(),
6098
- PARTITION_ID: 0,
6099
- PARTITION_DATE: 0,
6100
- RES_ID,
6101
- RES_TYPE,
6102
- RES_VER: RES_VER + 1,
6103
- OPERATION: operation,
6104
- RES
6105
- });
6106
- await this.UpdateIndexes(client, resource);
6107
- if (useTransaction) await client.query("COMMIT");
6108
- return resource;
6109
- } catch (error) {
6110
- if (useTransaction) await client.query("ROLLBACK");
6111
- } finally {
6112
- if (useTransaction) client.release();
6066
+ } catch (error) {
6067
+ const errorMessage = `UpdateResource(): Could not get connection: Error: [${error}]`;
6068
+ this.#options.logger.error(errorMessage);
6069
+ throw new Error(errorMessage);
6070
+ }
6071
+ try {
6072
+ const RES_ID = resource.id;
6073
+ const RES_TYPE = resource.resourceType;
6074
+ const now = (/* @__PURE__ */ new Date()).getTime();
6075
+ if (useTransaction) await client.query("BEGIN");
6076
+ const newVersion = await this.#dbSTSResource.UpdateResourceRecordEx(client, {
6077
+ RES_TYPE,
6078
+ RES_ID,
6079
+ RES_VER,
6080
+ RES_UPDATED: now
6081
+ });
6082
+ if (newVersion === void 0) {
6083
+ const errorMessage = `UpdateResource(): Version Conflict. newVersion is undefined. RES_VER: [${RES_VER}]`;
6084
+ this.#options.logger.error(errorMessage);
6085
+ throw new Error(errorMessage);
6086
+ }
6087
+ resource.meta ??= {};
6088
+ resource.meta.versionId = String(newVersion);
6089
+ resource.meta.lastUpdated = new Date(now).toISOString();
6090
+ const RES = JSON.stringify(resource);
6091
+ if (await this.#dbSTSResourceVersion.InsertResourceVersionEx(client, {
6092
+ PID: randomUUID$1(),
6093
+ PARTITION_ID: 0,
6094
+ PARTITION_DATE: 0,
6095
+ RES_ID,
6096
+ RES_TYPE,
6097
+ RES_VER: newVersion,
6098
+ OPERATION: operation,
6099
+ RES
6100
+ }) === void 0) {
6101
+ const errorMessage = `UpdateResource(): Version Conflict. resourceVersionRunResult is undefined. RES_VER: [${RES_VER}]`;
6102
+ this.#options.logger.error(errorMessage);
6103
+ throw new Error(errorMessage);
6113
6104
  }
6105
+ await this.UpdateIndexes(client, resource);
6106
+ if (useTransaction) await client.query("COMMIT");
6107
+ return resource;
6114
6108
  } catch (error) {
6115
- defaultLogger.error(`PGFhirAccessLayer:UpdateResource(): [${error}]`);
6109
+ if (useTransaction) await client.query("ROLLBACK");
6110
+ const errorMessage = `UpdateResource(): Error: [${error}]`;
6111
+ this.#options.logger.error(errorMessage);
6112
+ throw new Error(errorMessage);
6113
+ } finally {
6114
+ if (useTransaction) client.release();
6116
6115
  }
6117
6116
  };
6118
6117
  DeleteResource = async (resource, RES_VER, transactionHandle) => {
6119
- if (this.#poolManager) try {
6120
- const RES_ID = resource.id;
6121
- const RES_TYPE = resource.resourceType;
6122
- const now = new Date(DateTime.fromISO(resource.meta.lastUpdated).toJSDate()).getTime();
6123
- let client;
6124
- let useTransaction;
6118
+ if (!this.#poolManager) {
6119
+ const errorMessage = `DeleteResource(): poolManager not set`;
6120
+ this.#options.logger.error(errorMessage);
6121
+ throw new Error(errorMessage);
6122
+ }
6123
+ let client;
6124
+ let useTransaction;
6125
+ try {
6125
6126
  if (transactionHandle && this.#transactions[transactionHandle]) {
6126
6127
  client = this.#transactions[transactionHandle].client;
6127
6128
  useTransaction = false;
@@ -6129,39 +6130,64 @@ var PGFhirAccessLayer = class extends TinyEmitter {
6129
6130
  client = await this.#poolManager.connectReadWrite();
6130
6131
  useTransaction = true;
6131
6132
  }
6132
- try {
6133
- if (useTransaction) await client.query("BEGIN");
6134
- await this.#dbSTSResource.DeleteResourceRecordEx(client, {
6135
- RES_ID,
6136
- RES_TYPE,
6137
- RES_VER,
6138
- RES_DELETED_AT: now,
6139
- RES_UPDATED: now
6140
- });
6141
- await this.#dbSTSResourceVersion.InsertResourceVersionEx(client, {
6142
- PID: randomUUID$1(),
6143
- PARTITION_ID: 0,
6144
- PARTITION_DATE: 0,
6145
- RES_ID,
6146
- RES_TYPE,
6147
- RES_VER: RES_VER + 1,
6148
- OPERATION: "DELETE",
6149
- RES: ""
6150
- });
6151
- await this.UpdateIndexes(client, resource);
6152
- if (useTransaction) await client.query("COMMIT");
6153
- return resource;
6154
- } catch (error) {
6155
- if (useTransaction) await client.query("ROLLBACK");
6156
- } finally {
6157
- if (useTransaction) client.release();
6133
+ } catch (error) {
6134
+ const errorMessage = `DeleteResource(): Could not get connection: Error: [${error}]`;
6135
+ this.#options.logger.error(errorMessage);
6136
+ throw new Error(errorMessage);
6137
+ }
6138
+ try {
6139
+ const RES_ID = resource.id;
6140
+ const RES_TYPE = resource.resourceType;
6141
+ const now = (/* @__PURE__ */ new Date()).getTime();
6142
+ if (useTransaction) await client.query("BEGIN");
6143
+ const newVersion = await this.#dbSTSResource.DeleteResourceRecordEx(client, {
6144
+ RES_ID,
6145
+ RES_TYPE,
6146
+ RES_VER,
6147
+ RES_DELETED_AT: now,
6148
+ RES_UPDATED: now
6149
+ });
6150
+ if (newVersion === void 0) {
6151
+ const errorMessage = `DeleteResource(): Version Conflict. newVersion is undefined. RES_VER: [${RES_VER}]`;
6152
+ this.#options.logger.error(errorMessage);
6153
+ throw new Error(errorMessage);
6154
+ }
6155
+ resource.meta ??= {};
6156
+ resource.meta.versionId = String(newVersion);
6157
+ resource.meta.lastUpdated = new Date(now).toISOString();
6158
+ if (await this.#dbSTSResourceVersion.InsertResourceVersionEx(client, {
6159
+ PID: randomUUID$1(),
6160
+ PARTITION_ID: 0,
6161
+ PARTITION_DATE: 0,
6162
+ RES_ID,
6163
+ RES_TYPE,
6164
+ RES_VER: newVersion,
6165
+ OPERATION: "DELETE",
6166
+ RES: ""
6167
+ }) === void 0) {
6168
+ const errorMessage = `DeleteResource(): Version Conflict. resourceVersionRunResult is undefined. RES_VER: [${RES_VER}]`;
6169
+ this.#options.logger.error(errorMessage);
6170
+ throw new Error(errorMessage);
6158
6171
  }
6172
+ await this.UpdateIndexes(client, resource);
6173
+ if (useTransaction) await client.query("COMMIT");
6174
+ return resource;
6159
6175
  } catch (error) {
6160
- defaultLogger.error(`PGFhirAccessLayer:DeleteResource(): [${error}]`);
6176
+ if (useTransaction) await client.query("ROLLBACK");
6177
+ const errorMessage = `DeleteResource(): Error: [${error}]`;
6178
+ this.#options.logger.error(errorMessage);
6179
+ throw new Error(errorMessage);
6180
+ } finally {
6181
+ if (useTransaction) client.release();
6161
6182
  }
6162
6183
  };
6163
6184
  ReadResourceRecord = async (RES_TYPE, RES_ID, transactionHandle) => {
6164
- if (this.#poolManager) try {
6185
+ if (!this.#poolManager) {
6186
+ const errorMessage = `ReadResourceRecord(): poolManager not set`;
6187
+ this.#options.logger.error(errorMessage);
6188
+ throw new Error(errorMessage);
6189
+ }
6190
+ try {
6165
6191
  let client;
6166
6192
  let useTransaction;
6167
6193
  if (transactionHandle && this.#transactions[transactionHandle]) {
@@ -6173,19 +6199,19 @@ var PGFhirAccessLayer = class extends TinyEmitter {
6173
6199
  }
6174
6200
  try {
6175
6201
  return (await client.query(`
6176
- SELECT
6177
- r.*, v.* FROM stsresfhir r
6178
- JOIN
6179
- stsresfhirver v
6180
- ON
6181
- r.RES_ID = v.RES_ID AND
6182
- r.RES_TYPE = v.RES_TYPE AND
6183
- r.RES_VER = v.RES_VER
6184
- WHERE
6185
- r.RES_ID = $1 AND
6186
- r.RES_TYPE = $2 AND
6187
- r.RES_DELETED_AT IS NULL
6188
- `, [RES_ID, RES_TYPE])).rows[0];
6202
+ SELECT
6203
+ r.*, v.* FROM stsresfhir r
6204
+ JOIN
6205
+ stsresfhirver v
6206
+ ON
6207
+ r.RES_ID = v.RES_ID AND
6208
+ r.RES_TYPE = v.RES_TYPE AND
6209
+ r.RES_VER = v.RES_VER
6210
+ WHERE
6211
+ r.RES_ID = $1 AND
6212
+ r.RES_TYPE = $2 AND
6213
+ r.RES_DELETED_AT IS NULL
6214
+ `, [RES_ID, RES_TYPE])).rows[0];
6189
6215
  } catch (error) {
6190
6216
  defaultLogger.error(`DBSTSResource:ReadResourceRecord(): Query Error: [${error}]`);
6191
6217
  } finally {
@@ -6196,7 +6222,12 @@ var PGFhirAccessLayer = class extends TinyEmitter {
6196
6222
  }
6197
6223
  };
6198
6224
  ReadResourceRecordWithVersion = async (RES_TYPE, RES_ID, RES_VER, transactionHandle) => {
6199
- if (this.#poolManager) try {
6225
+ if (!this.#poolManager) {
6226
+ const errorMessage = `ReadResourceRecordWithVersion(): poolManager not set`;
6227
+ this.#options.logger.error(errorMessage);
6228
+ throw new Error(errorMessage);
6229
+ }
6230
+ try {
6200
6231
  let client;
6201
6232
  let useTransaction;
6202
6233
  if (transactionHandle && this.#transactions[transactionHandle]) {
@@ -6208,18 +6239,18 @@ var PGFhirAccessLayer = class extends TinyEmitter {
6208
6239
  }
6209
6240
  try {
6210
6241
  return (await client.query(`
6211
- SELECT
6212
- r.*, v.*, r.res_ver as R_res_ver, v.res_ver as V_res_ver FROM stsresfhir r
6213
- JOIN
6214
- stsresfhirver v
6215
- ON
6216
- r.RES_ID = v.RES_ID AND
6217
- r.RES_TYPE = v.RES_TYPE
6218
- WHERE
6219
- r.RES_ID = $1 AND
6220
- r.RES_TYPE = $2 AND
6221
- v.RES_VER = $3
6222
- `, [
6242
+ SELECT
6243
+ r.*, v.*, r.res_ver as R_res_ver, v.res_ver as V_res_ver FROM stsresfhir r
6244
+ JOIN
6245
+ stsresfhirver v
6246
+ ON
6247
+ r.RES_ID = v.RES_ID AND
6248
+ r.RES_TYPE = v.RES_TYPE
6249
+ WHERE
6250
+ r.RES_ID = $1 AND
6251
+ r.RES_TYPE = $2 AND
6252
+ v.RES_VER = $3
6253
+ `, [
6223
6254
  RES_ID,
6224
6255
  RES_TYPE,
6225
6256
  RES_VER
@@ -6234,7 +6265,12 @@ var PGFhirAccessLayer = class extends TinyEmitter {
6234
6265
  }
6235
6266
  };
6236
6267
  ReadResourceInstanceWithAllVersions = async (RES_TYPE, RES_ID, transactionHandle) => {
6237
- if (this.#poolManager) try {
6268
+ if (!this.#poolManager) {
6269
+ const errorMessage = `ReadResourceInstanceWithAllVersions(): poolManager not set`;
6270
+ this.#options.logger.error(errorMessage);
6271
+ throw new Error(errorMessage);
6272
+ }
6273
+ try {
6238
6274
  let client;
6239
6275
  let useTransaction;
6240
6276
  if (transactionHandle && this.#transactions[transactionHandle]) {
@@ -6246,19 +6282,19 @@ var PGFhirAccessLayer = class extends TinyEmitter {
6246
6282
  }
6247
6283
  try {
6248
6284
  return (await client.query(`
6249
- SELECT
6250
- r.*, v.*, r.res_ver as R_res_ver, v.res_ver as V_res_ver FROM stsresfhir r
6251
- JOIN
6252
- stsresfhirver v
6253
- ON
6254
- r.RES_ID = v.RES_ID AND
6255
- r.RES_TYPE = v.RES_TYPE
6256
- WHERE
6257
- r.RES_ID = $1 AND
6258
- r.RES_TYPE = $2
6259
- ORDER BY
6260
- v.RES_TYPE ASC, v.RES_ID ASC, v.RES_VER DESC
6261
- `, [RES_ID, RES_TYPE])).rows;
6285
+ SELECT
6286
+ r.*, v.*, r.res_ver as R_res_ver, v.res_ver as V_res_ver FROM stsresfhir r
6287
+ JOIN
6288
+ stsresfhirver v
6289
+ ON
6290
+ r.RES_ID = v.RES_ID AND
6291
+ r.RES_TYPE = v.RES_TYPE
6292
+ WHERE
6293
+ r.RES_ID = $1 AND
6294
+ r.RES_TYPE = $2
6295
+ ORDER BY
6296
+ v.RES_TYPE ASC, v.RES_ID ASC, v.RES_VER DESC
6297
+ `, [RES_ID, RES_TYPE])).rows;
6262
6298
  } catch (error) {
6263
6299
  defaultLogger.error(`DBSTSResource:ReadResourceRecord(): Query Error: [${error}]`);
6264
6300
  } finally {
@@ -6269,7 +6305,12 @@ var PGFhirAccessLayer = class extends TinyEmitter {
6269
6305
  }
6270
6306
  };
6271
6307
  ReadResourcesWithAllVersions = async (RES_TYPE, transactionHandle) => {
6272
- if (this.#poolManager) try {
6308
+ if (!this.#poolManager) {
6309
+ const errorMessage = `ReadResourcesWithAllVersions(): poolManager not set`;
6310
+ this.#options.logger.error(errorMessage);
6311
+ throw new Error(errorMessage);
6312
+ }
6313
+ try {
6273
6314
  let client;
6274
6315
  let useTransaction;
6275
6316
  if (transactionHandle && this.#transactions[transactionHandle]) {
@@ -6281,18 +6322,18 @@ var PGFhirAccessLayer = class extends TinyEmitter {
6281
6322
  }
6282
6323
  try {
6283
6324
  return (await client.query(`
6284
- SELECT
6285
- r.*, v.*, r.res_ver as R_res_ver, v.res_ver as V_res_ver FROM stsresfhir r
6286
- JOIN
6287
- stsresfhirver v
6288
- ON
6289
- r.RES_ID = v.RES_ID AND
6290
- r.RES_TYPE = v.RES_TYPE
6291
- WHERE
6292
- r.RES_TYPE = $1
6293
- ORDER BY
6294
- v.RES_TYPE ASC, v.RES_ID ASC, v.RES_VER DESC
6295
- `, [RES_TYPE])).rows;
6325
+ SELECT
6326
+ r.*, v.*, r.res_ver as R_res_ver, v.res_ver as V_res_ver FROM stsresfhir r
6327
+ JOIN
6328
+ stsresfhirver v
6329
+ ON
6330
+ r.RES_ID = v.RES_ID AND
6331
+ r.RES_TYPE = v.RES_TYPE
6332
+ WHERE
6333
+ r.RES_TYPE = $1
6334
+ ORDER BY
6335
+ v.RES_TYPE ASC, v.RES_ID ASC, v.RES_VER DESC
6336
+ `, [RES_TYPE])).rows;
6296
6337
  } catch (error) {
6297
6338
  defaultLogger.error(`DBSTSResource:ReadResourceRecord(): Query Error: [${error}]`);
6298
6339
  } finally {
@@ -6303,7 +6344,12 @@ var PGFhirAccessLayer = class extends TinyEmitter {
6303
6344
  }
6304
6345
  };
6305
6346
  ReadAllResourcesWithVersions = async (transactionHandle) => {
6306
- if (this.#poolManager) try {
6347
+ if (!this.#poolManager) {
6348
+ const errorMessage = `ReadAllResourcesWithVersions(): poolManager not set`;
6349
+ this.#options.logger.error(errorMessage);
6350
+ throw new Error(errorMessage);
6351
+ }
6352
+ try {
6307
6353
  let client;
6308
6354
  let useTransaction;
6309
6355
  if (transactionHandle && this.#transactions[transactionHandle]) {
@@ -6315,16 +6361,16 @@ var PGFhirAccessLayer = class extends TinyEmitter {
6315
6361
  }
6316
6362
  try {
6317
6363
  return (await client.query(`
6318
- SELECT
6319
- r.*, v.* FROM stsresfhir r
6320
- JOIN
6321
- stsresfhirver v
6322
- ON
6323
- r.RES_ID = v.RES_ID AND
6324
- r.RES_TYPE = v.RES_TYPE AND
6325
- ORDER BY
6326
- v.RES_TYPE ASC, v.RES_ID ASC, v.RES_VER DESC
6327
- `)).rows;
6364
+ SELECT
6365
+ r.*, v.* FROM stsresfhir r
6366
+ JOIN
6367
+ stsresfhirver v
6368
+ ON
6369
+ r.RES_ID = v.RES_ID AND
6370
+ r.RES_TYPE = v.RES_TYPE AND
6371
+ ORDER BY
6372
+ v.RES_TYPE ASC, v.RES_ID ASC, v.RES_VER DESC
6373
+ `)).rows;
6328
6374
  } catch (error) {
6329
6375
  defaultLogger.error(`DBSTSResource:ReadResourceRecord(): Query Error: [${error}]`);
6330
6376
  } finally {
@@ -6338,7 +6384,12 @@ var PGFhirAccessLayer = class extends TinyEmitter {
6338
6384
  return this.#dbSTSResourceVersion.ReadAllResourceVersionRecords();
6339
6385
  };
6340
6386
  ReadResourceIndexes = async (resource, transactionHandle) => {
6341
- if (this.#poolManager) try {
6387
+ if (!this.#poolManager) {
6388
+ const errorMessage = `ReadResourceIndexes(): poolManager not set`;
6389
+ this.#options.logger.error(errorMessage);
6390
+ throw new Error(errorMessage);
6391
+ }
6392
+ try {
6342
6393
  const resultSet = {
6343
6394
  "stsresfhirlink": [],
6344
6395
  "stsresfhirstring": [],
@@ -6378,7 +6429,12 @@ var PGFhirAccessLayer = class extends TinyEmitter {
6378
6429
  }
6379
6430
  };
6380
6431
  ExecuteReadQuery = async (queryData, transactionHandle) => {
6381
- if (this.#poolManager) try {
6432
+ if (!this.#poolManager) {
6433
+ const errorMessage = `ExecuteReadQuery(): poolManager not set`;
6434
+ this.#options.logger.error(errorMessage);
6435
+ throw new Error(errorMessage);
6436
+ }
6437
+ try {
6382
6438
  let client;
6383
6439
  let useTransaction;
6384
6440
  if (transactionHandle && this.#transactions[transactionHandle]) {
@@ -6401,7 +6457,12 @@ var PGFhirAccessLayer = class extends TinyEmitter {
6401
6457
  }
6402
6458
  };
6403
6459
  TruncateAll = async () => {
6404
- if (this.#poolManager) try {
6460
+ if (!this.#poolManager) {
6461
+ const errorMessage = `TruncateAll(): poolManager not set`;
6462
+ this.#options.logger.error(errorMessage);
6463
+ throw new Error(errorMessage);
6464
+ }
6465
+ try {
6405
6466
  let client;
6406
6467
  client = await this.#poolManager.connectReadWrite();
6407
6468
  try {