@webiny/api-headless-cms-sql 0.0.0-unstable.0d717d18dd → 0.0.0-unstable.7c2def32a7

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 (48) hide show
  1. package/features/entryTableManager/EntryTableManager.js +5 -1
  2. package/features/entryTableManager/EntryTableManager.js.map +1 -1
  3. package/features/groupSchemaManager/GroupSchemaManager.js +5 -1
  4. package/features/groupSchemaManager/GroupSchemaManager.js.map +1 -1
  5. package/features/modelSchemaManager/ModelSchemaManager.js +5 -1
  6. package/features/modelSchemaManager/ModelSchemaManager.js.map +1 -1
  7. package/index.d.ts +5 -0
  8. package/index.js +1 -1
  9. package/index.js.map +1 -1
  10. package/operations/entry/SqlCreateEntryRevisionFrom.d.ts +1 -0
  11. package/operations/entry/SqlCreateEntryRevisionFrom.js +8 -5
  12. package/operations/entry/SqlCreateEntryRevisionFrom.js.map +1 -1
  13. package/operations/entry/SqlDeleteEntry.d.ts +1 -1
  14. package/operations/entry/SqlDeleteEntry.js +4 -4
  15. package/operations/entry/SqlDeleteEntry.js.map +1 -1
  16. package/operations/entry/SqlDeleteEntryRevision.d.ts +1 -1
  17. package/operations/entry/SqlDeleteEntryRevision.js +6 -6
  18. package/operations/entry/SqlDeleteEntryRevision.js.map +1 -1
  19. package/operations/entry/SqlDeleteMultipleEntries.d.ts +1 -1
  20. package/operations/entry/SqlDeleteMultipleEntries.js +4 -4
  21. package/operations/entry/SqlDeleteMultipleEntries.js.map +1 -1
  22. package/operations/entry/SqlMoveEntry.js +1 -1
  23. package/operations/entry/SqlMoveEntry.js.map +1 -1
  24. package/operations/entry/SqlMoveToBin.js +1 -1
  25. package/operations/entry/SqlMoveToBin.js.map +1 -1
  26. package/operations/entry/SqlPublishEntry.d.ts +1 -1
  27. package/operations/entry/SqlPublishEntry.js +8 -8
  28. package/operations/entry/SqlPublishEntry.js.map +1 -1
  29. package/operations/entry/SqlRestoreFromBin.js +1 -1
  30. package/operations/entry/SqlRestoreFromBin.js.map +1 -1
  31. package/operations/entry/SqlUnpublishEntry.d.ts +1 -1
  32. package/operations/entry/SqlUnpublishEntry.js +6 -6
  33. package/operations/entry/SqlUnpublishEntry.js.map +1 -1
  34. package/operations/entry/SqlUpdateEntry.d.ts +1 -1
  35. package/operations/entry/SqlUpdateEntry.js +6 -6
  36. package/operations/entry/SqlUpdateEntry.js.map +1 -1
  37. package/operations/entry/queryHelpers.d.ts +7 -2
  38. package/operations/entry/queryHelpers.js +8 -7
  39. package/operations/entry/queryHelpers.js.map +1 -1
  40. package/operations/group/SqlDeleteGroup.js +1 -1
  41. package/operations/group/SqlDeleteGroup.js.map +1 -1
  42. package/operations/group/SqlUpdateGroup.js +1 -1
  43. package/operations/group/SqlUpdateGroup.js.map +1 -1
  44. package/operations/model/SqlDeleteModel.js +1 -1
  45. package/operations/model/SqlDeleteModel.js.map +1 -1
  46. package/operations/model/SqlUpdateModel.js +1 -1
  47. package/operations/model/SqlUpdateModel.js.map +1 -1
  48. package/package.json +16 -16
@@ -33,7 +33,7 @@ class EntryTableManagerImpl {
33
33
  async createTable() {
34
34
  try {
35
35
  await this.knex.client.schema.createTable(this.tableName, (table)=>{
36
- table.text("id").primary();
36
+ table.text("id").notNullable();
37
37
  table.text("entryId").notNullable();
38
38
  table.text("modelId").notNullable();
39
39
  table.text("tenant").notNullable();
@@ -42,6 +42,10 @@ class EntryTableManagerImpl {
42
42
  table.boolean("isPublished").defaultTo(false);
43
43
  table.boolean("wbyDeleted").defaultTo(false);
44
44
  table.text("data").notNullable();
45
+ table.primary([
46
+ "tenant",
47
+ "id"
48
+ ]);
45
49
  table.index([
46
50
  "tenant",
47
51
  "modelId",
@@ -1 +1 @@
1
- {"version":3,"file":"features/entryTableManager/EntryTableManager.js","sources":["../../../src/features/entryTableManager/EntryTableManager.ts"],"sourcesContent":["import { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager as EntryTableManagerAbstraction } from \"./abstractions.js\";\nimport { TableNameResolver } from \"~/features/tableNameResolver/abstractions.js\";\n\nclass EntryTableManagerImpl implements EntryTableManagerAbstraction.Interface {\n private readonly knex;\n private readonly tableName;\n private initialized = false;\n private initPromise?: Promise<void>;\n\n constructor(knex: KnexClient.Interface, tableNameResolver: TableNameResolver.Interface) {\n this.knex = knex;\n this.tableName = tableNameResolver.resolve(\"entries\");\n\n const g = globalThis as Record<string, unknown>;\n const managers = (g.__sqlTableManagers ??= []) as EntryTableManagerAbstraction.Interface[];\n managers.push(this);\n }\n\n public reset(): void {\n this.initialized = false;\n this.initPromise = undefined;\n }\n\n public async ensureTable(): Promise<void> {\n if (this.initialized) {\n return;\n }\n // Memoize the in-flight init so concurrent callers (e.g. Promise.all entry creates) share a\n // single hasTable+createTable and don't race into \"table already exists\". Clear on failure\n // so a later call can retry.\n if (!this.initPromise) {\n this.initPromise = this.doEnsureTable().catch(err => {\n this.initPromise = undefined;\n throw err;\n });\n }\n return this.initPromise;\n }\n\n private async doEnsureTable(): Promise<void> {\n const exists = await this.knex.client.schema.hasTable(this.tableName);\n\n if (!exists) {\n await this.createTable();\n }\n\n this.initialized = true;\n }\n\n public getTableName(): string {\n return this.tableName;\n }\n\n private async createTable(): Promise<void> {\n try {\n await this.knex.client.schema.createTable(this.tableName, table => {\n table.text(\"id\").primary();\n table.text(\"entryId\").notNullable();\n table.text(\"modelId\").notNullable();\n table.text(\"tenant\").notNullable();\n table.integer(\"version\").notNullable();\n table.boolean(\"isLatest\").defaultTo(false);\n table.boolean(\"isPublished\").defaultTo(false);\n table.boolean(\"wbyDeleted\").defaultTo(false);\n table.text(\"data\").notNullable();\n\n table.index([\"tenant\", \"modelId\", \"isLatest\"]);\n table.index([\"tenant\", \"modelId\", \"isPublished\"]);\n table.index([\"tenant\", \"modelId\", \"entryId\"]);\n });\n } catch (err) {\n // The entries table is shared across all EntryTableManager instances (one per request\n // container), so another instance/connection may create it concurrently. If it now\n // exists, that's success; otherwise the failure is real.\n if (await this.knex.client.schema.hasTable(this.tableName)) {\n return;\n }\n throw err;\n }\n }\n}\n\nexport const EntryTableManager = EntryTableManagerAbstraction.createImplementation({\n implementation: EntryTableManagerImpl,\n dependencies: [KnexClient, TableNameResolver]\n});\n"],"names":["EntryTableManagerImpl","knex","tableNameResolver","g","globalThis","managers","undefined","err","exists","table","EntryTableManager","EntryTableManagerAbstraction","KnexClient","TableNameResolver"],"mappings":";;;AAIA,MAAMA;IAMF,YAAYC,IAA0B,EAAEC,iBAA8C,CAAE;aAHhF,WAAW,GAAG;QAIlB,IAAI,CAAC,IAAI,GAAGD;QACZ,IAAI,CAAC,SAAS,GAAGC,kBAAkB,OAAO,CAAC;QAE3C,MAAMC,IAAIC;QACV,MAAMC,WAAYF,EAAE,kBAAkB,KAAK,EAAE;QAC7CE,SAAS,IAAI,CAAC,IAAI;IACtB;IAEO,QAAc;QACjB,IAAI,CAAC,WAAW,GAAG;QACnB,IAAI,CAAC,WAAW,GAAGC;IACvB;IAEA,MAAa,cAA6B;QACtC,IAAI,IAAI,CAAC,WAAW,EAChB;QAKJ,IAAI,CAAC,IAAI,CAAC,WAAW,EACjB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,KAAK,CAACC,CAAAA;YAC1C,IAAI,CAAC,WAAW,GAAGD;YACnB,MAAMC;QACV;QAEJ,OAAO,IAAI,CAAC,WAAW;IAC3B;IAEA,MAAc,gBAA+B;QACzC,MAAMC,SAAS,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS;QAEpE,IAAI,CAACA,QACD,MAAM,IAAI,CAAC,WAAW;QAG1B,IAAI,CAAC,WAAW,GAAG;IACvB;IAEO,eAAuB;QAC1B,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,MAAc,cAA6B;QACvC,IAAI;YACA,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAEC,CAAAA;gBACtDA,MAAM,IAAI,CAAC,MAAM,OAAO;gBACxBA,MAAM,IAAI,CAAC,WAAW,WAAW;gBACjCA,MAAM,IAAI,CAAC,WAAW,WAAW;gBACjCA,MAAM,IAAI,CAAC,UAAU,WAAW;gBAChCA,MAAM,OAAO,CAAC,WAAW,WAAW;gBACpCA,MAAM,OAAO,CAAC,YAAY,SAAS,CAAC;gBACpCA,MAAM,OAAO,CAAC,eAAe,SAAS,CAAC;gBACvCA,MAAM,OAAO,CAAC,cAAc,SAAS,CAAC;gBACtCA,MAAM,IAAI,CAAC,QAAQ,WAAW;gBAE9BA,MAAM,KAAK,CAAC;oBAAC;oBAAU;oBAAW;iBAAW;gBAC7CA,MAAM,KAAK,CAAC;oBAAC;oBAAU;oBAAW;iBAAc;gBAChDA,MAAM,KAAK,CAAC;oBAAC;oBAAU;oBAAW;iBAAU;YAChD;QACJ,EAAE,OAAOF,KAAK;YAIV,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,GACrD;YAEJ,MAAMA;QACV;IACJ;AACJ;AAEO,MAAMG,sCAAoBC,kBAAAA,oBAAiD,CAAC;IAC/E,gBAAgBX;IAChB,cAAc;QAACY;QAAYC;KAAkB;AACjD"}
1
+ {"version":3,"file":"features/entryTableManager/EntryTableManager.js","sources":["../../../src/features/entryTableManager/EntryTableManager.ts"],"sourcesContent":["import { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager as EntryTableManagerAbstraction } from \"./abstractions.js\";\nimport { TableNameResolver } from \"~/features/tableNameResolver/abstractions.js\";\n\nclass EntryTableManagerImpl implements EntryTableManagerAbstraction.Interface {\n private readonly knex;\n private readonly tableName;\n private initialized = false;\n private initPromise?: Promise<void>;\n\n constructor(knex: KnexClient.Interface, tableNameResolver: TableNameResolver.Interface) {\n this.knex = knex;\n this.tableName = tableNameResolver.resolve(\"entries\");\n\n const g = globalThis as Record<string, unknown>;\n const managers = (g.__sqlTableManagers ??= []) as EntryTableManagerAbstraction.Interface[];\n managers.push(this);\n }\n\n public reset(): void {\n this.initialized = false;\n this.initPromise = undefined;\n }\n\n public async ensureTable(): Promise<void> {\n if (this.initialized) {\n return;\n }\n // Memoize the in-flight init so concurrent callers (e.g. Promise.all entry creates) share a\n // single hasTable+createTable and don't race into \"table already exists\". Clear on failure\n // so a later call can retry.\n if (!this.initPromise) {\n this.initPromise = this.doEnsureTable().catch(err => {\n this.initPromise = undefined;\n throw err;\n });\n }\n return this.initPromise;\n }\n\n private async doEnsureTable(): Promise<void> {\n const exists = await this.knex.client.schema.hasTable(this.tableName);\n\n if (!exists) {\n await this.createTable();\n }\n\n this.initialized = true;\n }\n\n public getTableName(): string {\n return this.tableName;\n }\n\n private async createTable(): Promise<void> {\n try {\n await this.knex.client.schema.createTable(this.tableName, table => {\n table.text(\"id\").notNullable();\n table.text(\"entryId\").notNullable();\n table.text(\"modelId\").notNullable();\n table.text(\"tenant\").notNullable();\n table.integer(\"version\").notNullable();\n table.boolean(\"isLatest\").defaultTo(false);\n table.boolean(\"isPublished\").defaultTo(false);\n table.boolean(\"wbyDeleted\").defaultTo(false);\n table.text(\"data\").notNullable();\n\n table.primary([\"tenant\", \"id\"]);\n\n table.index([\"tenant\", \"modelId\", \"isLatest\"]);\n table.index([\"tenant\", \"modelId\", \"isPublished\"]);\n table.index([\"tenant\", \"modelId\", \"entryId\"]);\n });\n } catch (err) {\n // The entries table is shared across all EntryTableManager instances (one per request\n // container), so another instance/connection may create it concurrently. If it now\n // exists, that's success; otherwise the failure is real.\n if (await this.knex.client.schema.hasTable(this.tableName)) {\n return;\n }\n throw err;\n }\n }\n}\n\nexport const EntryTableManager = EntryTableManagerAbstraction.createImplementation({\n implementation: EntryTableManagerImpl,\n dependencies: [KnexClient, TableNameResolver]\n});\n"],"names":["EntryTableManagerImpl","knex","tableNameResolver","g","globalThis","managers","undefined","err","exists","table","EntryTableManager","EntryTableManagerAbstraction","KnexClient","TableNameResolver"],"mappings":";;;AAIA,MAAMA;IAMF,YAAYC,IAA0B,EAAEC,iBAA8C,CAAE;aAHhF,WAAW,GAAG;QAIlB,IAAI,CAAC,IAAI,GAAGD;QACZ,IAAI,CAAC,SAAS,GAAGC,kBAAkB,OAAO,CAAC;QAE3C,MAAMC,IAAIC;QACV,MAAMC,WAAYF,EAAE,kBAAkB,KAAK,EAAE;QAC7CE,SAAS,IAAI,CAAC,IAAI;IACtB;IAEO,QAAc;QACjB,IAAI,CAAC,WAAW,GAAG;QACnB,IAAI,CAAC,WAAW,GAAGC;IACvB;IAEA,MAAa,cAA6B;QACtC,IAAI,IAAI,CAAC,WAAW,EAChB;QAKJ,IAAI,CAAC,IAAI,CAAC,WAAW,EACjB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,GAAG,KAAK,CAACC,CAAAA;YAC1C,IAAI,CAAC,WAAW,GAAGD;YACnB,MAAMC;QACV;QAEJ,OAAO,IAAI,CAAC,WAAW;IAC3B;IAEA,MAAc,gBAA+B;QACzC,MAAMC,SAAS,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS;QAEpE,IAAI,CAACA,QACD,MAAM,IAAI,CAAC,WAAW;QAG1B,IAAI,CAAC,WAAW,GAAG;IACvB;IAEO,eAAuB;QAC1B,OAAO,IAAI,CAAC,SAAS;IACzB;IAEA,MAAc,cAA6B;QACvC,IAAI;YACA,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAEC,CAAAA;gBACtDA,MAAM,IAAI,CAAC,MAAM,WAAW;gBAC5BA,MAAM,IAAI,CAAC,WAAW,WAAW;gBACjCA,MAAM,IAAI,CAAC,WAAW,WAAW;gBACjCA,MAAM,IAAI,CAAC,UAAU,WAAW;gBAChCA,MAAM,OAAO,CAAC,WAAW,WAAW;gBACpCA,MAAM,OAAO,CAAC,YAAY,SAAS,CAAC;gBACpCA,MAAM,OAAO,CAAC,eAAe,SAAS,CAAC;gBACvCA,MAAM,OAAO,CAAC,cAAc,SAAS,CAAC;gBACtCA,MAAM,IAAI,CAAC,QAAQ,WAAW;gBAE9BA,MAAM,OAAO,CAAC;oBAAC;oBAAU;iBAAK;gBAE9BA,MAAM,KAAK,CAAC;oBAAC;oBAAU;oBAAW;iBAAW;gBAC7CA,MAAM,KAAK,CAAC;oBAAC;oBAAU;oBAAW;iBAAc;gBAChDA,MAAM,KAAK,CAAC;oBAAC;oBAAU;oBAAW;iBAAU;YAChD;QACJ,EAAE,OAAOF,KAAK;YAIV,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,GACrD;YAEJ,MAAMA;QACV;IACJ;AACJ;AAEO,MAAMG,sCAAoBC,kBAAAA,oBAAiD,CAAC;IAC/E,gBAAgBX;IAChB,cAAc;QAACY;QAAYC;KAAkB;AACjD"}
@@ -15,7 +15,7 @@ class GroupSchemaManagerImpl {
15
15
  if (this.verified.has(tableName)) return;
16
16
  const exists = await this.knex.client.schema.hasTable(tableName);
17
17
  if (!exists) await this.knex.client.schema.createTable(tableName, (table)=>{
18
- table.text("id").primary().notNullable();
18
+ table.text("id").notNullable();
19
19
  table.text("name").notNullable();
20
20
  table.text("slug").notNullable();
21
21
  table.text("tenant").notNullable();
@@ -29,6 +29,10 @@ class GroupSchemaManagerImpl {
29
29
  table.text("savedOn");
30
30
  table.boolean("isPrivate").notNullable().defaultTo(false);
31
31
  table.boolean("isPlugin").notNullable().defaultTo(false);
32
+ table.primary([
33
+ "tenant",
34
+ "id"
35
+ ]);
32
36
  });
33
37
  this.verified.add(tableName);
34
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"features/groupSchemaManager/GroupSchemaManager.js","sources":["../../../src/features/groupSchemaManager/GroupSchemaManager.ts"],"sourcesContent":["import { KnexClient } from \"@webiny/api-core-sql\";\nimport { GroupSchemaManager as GroupSchemaManagerAbstraction } from \"./abstractions.js\";\n\nclass GroupSchemaManagerImpl implements GroupSchemaManagerAbstraction.Interface {\n private readonly knex;\n private readonly verified = new Set<string>();\n\n constructor(knex: KnexClient.Interface) {\n this.knex = knex;\n\n const g = globalThis as Record<string, unknown>;\n const managers = (g.__sqlTableManagers ??= []) as GroupSchemaManagerAbstraction.Interface[];\n managers.push(this);\n }\n\n public reset(): void {\n this.verified.clear();\n }\n\n public async ensure(tableName: string): Promise<void> {\n if (this.verified.has(tableName)) {\n return;\n }\n\n const exists = await this.knex.client.schema.hasTable(tableName);\n\n if (!exists) {\n await this.knex.client.schema.createTable(tableName, table => {\n table.text(\"id\").primary().notNullable();\n table.text(\"name\").notNullable();\n table.text(\"slug\").notNullable();\n table.text(\"tenant\").notNullable();\n table.text(\"description\");\n table.text(\"icon\");\n table.text(\"createdBy_id\");\n table.text(\"createdBy_displayName\");\n table.text(\"createdBy_type\");\n table.text(\"createdBy\");\n table.text(\"createdOn\");\n table.text(\"savedOn\");\n table.boolean(\"isPrivate\").notNullable().defaultTo(false);\n table.boolean(\"isPlugin\").notNullable().defaultTo(false);\n });\n }\n\n this.verified.add(tableName);\n }\n}\n\nexport const GroupSchemaManager = GroupSchemaManagerAbstraction.createImplementation({\n implementation: GroupSchemaManagerImpl,\n dependencies: [KnexClient]\n});\n"],"names":["GroupSchemaManagerImpl","knex","Set","g","globalThis","managers","tableName","exists","table","GroupSchemaManager","GroupSchemaManagerAbstraction","KnexClient"],"mappings":";;AAGA,MAAMA;IAIF,YAAYC,IAA0B,CAAE;aAFvB,QAAQ,GAAG,IAAIC;QAG5B,IAAI,CAAC,IAAI,GAAGD;QAEZ,MAAME,IAAIC;QACV,MAAMC,WAAYF,EAAE,kBAAkB,KAAK,EAAE;QAC7CE,SAAS,IAAI,CAAC,IAAI;IACtB;IAEO,QAAc;QACjB,IAAI,CAAC,QAAQ,CAAC,KAAK;IACvB;IAEA,MAAa,OAAOC,SAAiB,EAAiB;QAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACA,YAClB;QAGJ,MAAMC,SAAS,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAACD;QAEtD,IAAI,CAACC,QACD,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAACD,WAAWE,CAAAA;YACjDA,MAAM,IAAI,CAAC,MAAM,OAAO,GAAG,WAAW;YACtCA,MAAM,IAAI,CAAC,QAAQ,WAAW;YAC9BA,MAAM,IAAI,CAAC,QAAQ,WAAW;YAC9BA,MAAM,IAAI,CAAC,UAAU,WAAW;YAChCA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,OAAO,CAAC,aAAa,WAAW,GAAG,SAAS,CAAC;YACnDA,MAAM,OAAO,CAAC,YAAY,WAAW,GAAG,SAAS,CAAC;QACtD;QAGJ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACF;IACtB;AACJ;AAEO,MAAMG,wCAAqBC,mBAAAA,oBAAkD,CAAC;IACjF,gBAAgBV;IAChB,cAAc;QAACW;KAAW;AAC9B"}
1
+ {"version":3,"file":"features/groupSchemaManager/GroupSchemaManager.js","sources":["../../../src/features/groupSchemaManager/GroupSchemaManager.ts"],"sourcesContent":["import { KnexClient } from \"@webiny/api-core-sql\";\nimport { GroupSchemaManager as GroupSchemaManagerAbstraction } from \"./abstractions.js\";\n\nclass GroupSchemaManagerImpl implements GroupSchemaManagerAbstraction.Interface {\n private readonly knex;\n private readonly verified = new Set<string>();\n\n constructor(knex: KnexClient.Interface) {\n this.knex = knex;\n\n const g = globalThis as Record<string, unknown>;\n const managers = (g.__sqlTableManagers ??= []) as GroupSchemaManagerAbstraction.Interface[];\n managers.push(this);\n }\n\n public reset(): void {\n this.verified.clear();\n }\n\n public async ensure(tableName: string): Promise<void> {\n if (this.verified.has(tableName)) {\n return;\n }\n\n const exists = await this.knex.client.schema.hasTable(tableName);\n\n if (!exists) {\n await this.knex.client.schema.createTable(tableName, table => {\n table.text(\"id\").notNullable();\n table.text(\"name\").notNullable();\n table.text(\"slug\").notNullable();\n table.text(\"tenant\").notNullable();\n table.text(\"description\");\n table.text(\"icon\");\n table.text(\"createdBy_id\");\n table.text(\"createdBy_displayName\");\n table.text(\"createdBy_type\");\n table.text(\"createdBy\");\n table.text(\"createdOn\");\n table.text(\"savedOn\");\n table.boolean(\"isPrivate\").notNullable().defaultTo(false);\n table.boolean(\"isPlugin\").notNullable().defaultTo(false);\n\n table.primary([\"tenant\", \"id\"]);\n });\n }\n\n this.verified.add(tableName);\n }\n}\n\nexport const GroupSchemaManager = GroupSchemaManagerAbstraction.createImplementation({\n implementation: GroupSchemaManagerImpl,\n dependencies: [KnexClient]\n});\n"],"names":["GroupSchemaManagerImpl","knex","Set","g","globalThis","managers","tableName","exists","table","GroupSchemaManager","GroupSchemaManagerAbstraction","KnexClient"],"mappings":";;AAGA,MAAMA;IAIF,YAAYC,IAA0B,CAAE;aAFvB,QAAQ,GAAG,IAAIC;QAG5B,IAAI,CAAC,IAAI,GAAGD;QAEZ,MAAME,IAAIC;QACV,MAAMC,WAAYF,EAAE,kBAAkB,KAAK,EAAE;QAC7CE,SAAS,IAAI,CAAC,IAAI;IACtB;IAEO,QAAc;QACjB,IAAI,CAAC,QAAQ,CAAC,KAAK;IACvB;IAEA,MAAa,OAAOC,SAAiB,EAAiB;QAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACA,YAClB;QAGJ,MAAMC,SAAS,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAACD;QAEtD,IAAI,CAACC,QACD,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAACD,WAAWE,CAAAA;YACjDA,MAAM,IAAI,CAAC,MAAM,WAAW;YAC5BA,MAAM,IAAI,CAAC,QAAQ,WAAW;YAC9BA,MAAM,IAAI,CAAC,QAAQ,WAAW;YAC9BA,MAAM,IAAI,CAAC,UAAU,WAAW;YAChCA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,OAAO,CAAC,aAAa,WAAW,GAAG,SAAS,CAAC;YACnDA,MAAM,OAAO,CAAC,YAAY,WAAW,GAAG,SAAS,CAAC;YAElDA,MAAM,OAAO,CAAC;gBAAC;gBAAU;aAAK;QAClC;QAGJ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACF;IACtB;AACJ;AAEO,MAAMG,wCAAqBC,mBAAAA,oBAAkD,CAAC;IACjF,gBAAgBV;IAChB,cAAc;QAACW;KAAW;AAC9B"}
@@ -15,7 +15,7 @@ class ModelSchemaManagerImpl {
15
15
  if (this.verified.has(tableName)) return;
16
16
  const exists = await this.knex.client.schema.hasTable(tableName);
17
17
  if (!exists) await this.knex.client.schema.createTable(tableName, (table)=>{
18
- table.text("modelId").primary().notNullable();
18
+ table.text("modelId").notNullable();
19
19
  table.text("tenant").notNullable();
20
20
  table.text("name").notNullable();
21
21
  table.text("singularApiName").notNullable();
@@ -39,6 +39,10 @@ class ModelSchemaManagerImpl {
39
39
  table.text("createdOn");
40
40
  table.text("savedOn");
41
41
  table.text("settings");
42
+ table.primary([
43
+ "tenant",
44
+ "modelId"
45
+ ]);
42
46
  });
43
47
  this.verified.add(tableName);
44
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"features/modelSchemaManager/ModelSchemaManager.js","sources":["../../../src/features/modelSchemaManager/ModelSchemaManager.ts"],"sourcesContent":["import { KnexClient } from \"@webiny/api-core-sql\";\nimport { ModelSchemaManager as ModelSchemaManagerAbstraction } from \"./abstractions.js\";\n\nclass ModelSchemaManagerImpl implements ModelSchemaManagerAbstraction.Interface {\n private readonly knex;\n private readonly verified = new Set<string>();\n\n constructor(knex: KnexClient.Interface) {\n this.knex = knex;\n\n const g = globalThis as Record<string, unknown>;\n const managers = (g.__sqlTableManagers ??= []) as ModelSchemaManagerAbstraction.Interface[];\n managers.push(this);\n }\n\n public reset(): void {\n this.verified.clear();\n }\n\n public async ensure(tableName: string): Promise<void> {\n if (this.verified.has(tableName)) {\n return;\n }\n\n const exists = await this.knex.client.schema.hasTable(tableName);\n\n if (!exists) {\n await this.knex.client.schema.createTable(tableName, table => {\n table.text(\"modelId\").primary().notNullable();\n table.text(\"tenant\").notNullable();\n table.text(\"name\").notNullable();\n table.text(\"singularApiName\").notNullable();\n table.text(\"pluralApiName\").notNullable();\n table.text(\"group\").notNullable();\n table.text(\"icon\");\n table.text(\"description\");\n table.text(\"fields\").notNullable();\n table.text(\"layout\").notNullable();\n table.text(\"tags\");\n table.text(\"titleFieldId\").notNullable();\n table.text(\"descriptionFieldId\");\n table.text(\"imageFieldId\");\n table.boolean(\"isPrivate\").notNullable().defaultTo(false);\n table.boolean(\"isPlugin\").notNullable().defaultTo(false);\n table.text(\"authorization\");\n table.text(\"createdBy_id\");\n table.text(\"createdBy_displayName\");\n table.text(\"createdBy_type\");\n table.text(\"createdBy\");\n table.text(\"createdOn\");\n table.text(\"savedOn\");\n table.text(\"settings\");\n });\n }\n\n this.verified.add(tableName);\n }\n}\n\nexport const ModelSchemaManager = ModelSchemaManagerAbstraction.createImplementation({\n implementation: ModelSchemaManagerImpl,\n dependencies: [KnexClient]\n});\n"],"names":["ModelSchemaManagerImpl","knex","Set","g","globalThis","managers","tableName","exists","table","ModelSchemaManager","ModelSchemaManagerAbstraction","KnexClient"],"mappings":";;AAGA,MAAMA;IAIF,YAAYC,IAA0B,CAAE;aAFvB,QAAQ,GAAG,IAAIC;QAG5B,IAAI,CAAC,IAAI,GAAGD;QAEZ,MAAME,IAAIC;QACV,MAAMC,WAAYF,EAAE,kBAAkB,KAAK,EAAE;QAC7CE,SAAS,IAAI,CAAC,IAAI;IACtB;IAEO,QAAc;QACjB,IAAI,CAAC,QAAQ,CAAC,KAAK;IACvB;IAEA,MAAa,OAAOC,SAAiB,EAAiB;QAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACA,YAClB;QAGJ,MAAMC,SAAS,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAACD;QAEtD,IAAI,CAACC,QACD,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAACD,WAAWE,CAAAA;YACjDA,MAAM,IAAI,CAAC,WAAW,OAAO,GAAG,WAAW;YAC3CA,MAAM,IAAI,CAAC,UAAU,WAAW;YAChCA,MAAM,IAAI,CAAC,QAAQ,WAAW;YAC9BA,MAAM,IAAI,CAAC,mBAAmB,WAAW;YACzCA,MAAM,IAAI,CAAC,iBAAiB,WAAW;YACvCA,MAAM,IAAI,CAAC,SAAS,WAAW;YAC/BA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC,UAAU,WAAW;YAChCA,MAAM,IAAI,CAAC,UAAU,WAAW;YAChCA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC,gBAAgB,WAAW;YACtCA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,OAAO,CAAC,aAAa,WAAW,GAAG,SAAS,CAAC;YACnDA,MAAM,OAAO,CAAC,YAAY,WAAW,GAAG,SAAS,CAAC;YAClDA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;QACf;QAGJ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACF;IACtB;AACJ;AAEO,MAAMG,wCAAqBC,mBAAAA,oBAAkD,CAAC;IACjF,gBAAgBV;IAChB,cAAc;QAACW;KAAW;AAC9B"}
1
+ {"version":3,"file":"features/modelSchemaManager/ModelSchemaManager.js","sources":["../../../src/features/modelSchemaManager/ModelSchemaManager.ts"],"sourcesContent":["import { KnexClient } from \"@webiny/api-core-sql\";\nimport { ModelSchemaManager as ModelSchemaManagerAbstraction } from \"./abstractions.js\";\n\nclass ModelSchemaManagerImpl implements ModelSchemaManagerAbstraction.Interface {\n private readonly knex;\n private readonly verified = new Set<string>();\n\n constructor(knex: KnexClient.Interface) {\n this.knex = knex;\n\n const g = globalThis as Record<string, unknown>;\n const managers = (g.__sqlTableManagers ??= []) as ModelSchemaManagerAbstraction.Interface[];\n managers.push(this);\n }\n\n public reset(): void {\n this.verified.clear();\n }\n\n public async ensure(tableName: string): Promise<void> {\n if (this.verified.has(tableName)) {\n return;\n }\n\n const exists = await this.knex.client.schema.hasTable(tableName);\n\n if (!exists) {\n await this.knex.client.schema.createTable(tableName, table => {\n table.text(\"modelId\").notNullable();\n table.text(\"tenant\").notNullable();\n table.text(\"name\").notNullable();\n table.text(\"singularApiName\").notNullable();\n table.text(\"pluralApiName\").notNullable();\n table.text(\"group\").notNullable();\n table.text(\"icon\");\n table.text(\"description\");\n table.text(\"fields\").notNullable();\n table.text(\"layout\").notNullable();\n table.text(\"tags\");\n table.text(\"titleFieldId\").notNullable();\n table.text(\"descriptionFieldId\");\n table.text(\"imageFieldId\");\n table.boolean(\"isPrivate\").notNullable().defaultTo(false);\n table.boolean(\"isPlugin\").notNullable().defaultTo(false);\n table.text(\"authorization\");\n table.text(\"createdBy_id\");\n table.text(\"createdBy_displayName\");\n table.text(\"createdBy_type\");\n table.text(\"createdBy\");\n table.text(\"createdOn\");\n table.text(\"savedOn\");\n table.text(\"settings\");\n\n table.primary([\"tenant\", \"modelId\"]);\n });\n }\n\n this.verified.add(tableName);\n }\n}\n\nexport const ModelSchemaManager = ModelSchemaManagerAbstraction.createImplementation({\n implementation: ModelSchemaManagerImpl,\n dependencies: [KnexClient]\n});\n"],"names":["ModelSchemaManagerImpl","knex","Set","g","globalThis","managers","tableName","exists","table","ModelSchemaManager","ModelSchemaManagerAbstraction","KnexClient"],"mappings":";;AAGA,MAAMA;IAIF,YAAYC,IAA0B,CAAE;aAFvB,QAAQ,GAAG,IAAIC;QAG5B,IAAI,CAAC,IAAI,GAAGD;QAEZ,MAAME,IAAIC;QACV,MAAMC,WAAYF,EAAE,kBAAkB,KAAK,EAAE;QAC7CE,SAAS,IAAI,CAAC,IAAI;IACtB;IAEO,QAAc;QACjB,IAAI,CAAC,QAAQ,CAAC,KAAK;IACvB;IAEA,MAAa,OAAOC,SAAiB,EAAiB;QAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACA,YAClB;QAGJ,MAAMC,SAAS,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAACD;QAEtD,IAAI,CAACC,QACD,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAACD,WAAWE,CAAAA;YACjDA,MAAM,IAAI,CAAC,WAAW,WAAW;YACjCA,MAAM,IAAI,CAAC,UAAU,WAAW;YAChCA,MAAM,IAAI,CAAC,QAAQ,WAAW;YAC9BA,MAAM,IAAI,CAAC,mBAAmB,WAAW;YACzCA,MAAM,IAAI,CAAC,iBAAiB,WAAW;YACvCA,MAAM,IAAI,CAAC,SAAS,WAAW;YAC/BA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC,UAAU,WAAW;YAChCA,MAAM,IAAI,CAAC,UAAU,WAAW;YAChCA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC,gBAAgB,WAAW;YACtCA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,OAAO,CAAC,aAAa,WAAW,GAAG,SAAS,CAAC;YACnDA,MAAM,OAAO,CAAC,YAAY,WAAW,GAAG,SAAS,CAAC;YAClDA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YACXA,MAAM,IAAI,CAAC;YAEXA,MAAM,OAAO,CAAC;gBAAC;gBAAU;aAAU;QACvC;QAGJ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAACF;IACtB;AACJ;AAEO,MAAMG,wCAAqBC,mBAAAA,oBAAkD,CAAC;IACjF,gBAAgBV;IAChB,cAAc;QAACW;KAAW;AAC9B"}
package/index.d.ts CHANGED
@@ -4,6 +4,11 @@ interface ISqlStorageOperationsConfig {
4
4
  tableNamePrefix?: string;
5
5
  tableNameSuffix?: string;
6
6
  }
7
+ /**
8
+ * SQL CMS storage. Register it once, in the root container. Table naming and the table managers (which
9
+ * remember the tables they have checked) live for the process; the storage operations are transient,
10
+ * and the filter registries are container scoped, so each request (child) container gets its own.
11
+ */
7
12
  export declare const HeadlessCmsSqlFeature: {
8
13
  name: string;
9
14
  register(container: import("@webiny/di").Container, context: ISqlStorageOperationsConfig): void;
package/index.js CHANGED
@@ -20,10 +20,10 @@ const HeadlessCmsSqlFeature = createFeature({
20
20
  });
21
21
  TableNameResolverFeature.register(container);
22
22
  ValueFilterFeature.register(container);
23
- FilterRegistriesFeature.register(container);
24
23
  GroupSchemaManagerFeature.register(container);
25
24
  ModelSchemaManagerFeature.register(container);
26
25
  EntryTableManagerFeature.register(container);
26
+ FilterRegistriesFeature.register(container);
27
27
  SqlGroupStorageOpsFeature.register(container);
28
28
  SqlModelStorageOpsFeature.register(container);
29
29
  SqlEntryStorageOpsFeature.register(container);
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api/index.js\";\nimport { GroupSchemaManagerFeature } from \"~/features/groupSchemaManager/feature.js\";\nimport { ModelSchemaManagerFeature } from \"~/features/modelSchemaManager/feature.js\";\nimport { EntryTableManagerFeature } from \"~/features/entryTableManager/feature.js\";\nimport { TableNameResolverConfig } from \"~/features/tableNameResolver/abstractions.js\";\nimport type { Knex } from \"knex\";\nimport { TableNameResolverFeature } from \"~/features/tableNameResolver/feature.js\";\nimport { ValueFilterFeature } from \"@webiny/db-utils\";\nimport { FilterRegistriesFeature } from \"@webiny/api-headless-cms-storage\";\nimport { SqlGroupStorageOpsFeature } from \"~/operations/group/feature.js\";\nimport { SqlModelStorageOpsFeature } from \"~/operations/model/feature.js\";\nimport { SqlEntryStorageOpsFeature } from \"~/operations/entry/feature.js\";\n\ninterface ISqlStorageOperationsConfig {\n knex: Knex;\n tableNamePrefix?: string;\n tableNameSuffix?: string;\n}\n\nexport const HeadlessCmsSqlFeature = createFeature<ISqlStorageOperationsConfig>({\n name: \"cms.storageOperations.sql\",\n register: (container, config) => {\n const sharedTables = process.env.WEBINY_SHARED_TABLES === \"true\";\n\n container.registerInstance(TableNameResolverConfig, {\n sharedTables,\n tableNamePrefix: config.tableNamePrefix,\n tableNameSuffix: config.tableNameSuffix\n });\n\n TableNameResolverFeature.register(container);\n ValueFilterFeature.register(container);\n FilterRegistriesFeature.register(container);\n GroupSchemaManagerFeature.register(container);\n ModelSchemaManagerFeature.register(container);\n EntryTableManagerFeature.register(container);\n\n SqlGroupStorageOpsFeature.register(container);\n SqlModelStorageOpsFeature.register(container);\n SqlEntryStorageOpsFeature.register(container);\n }\n});\n"],"names":["HeadlessCmsSqlFeature","createFeature","container","config","sharedTables","process","TableNameResolverConfig","TableNameResolverFeature","ValueFilterFeature","FilterRegistriesFeature","GroupSchemaManagerFeature","ModelSchemaManagerFeature","EntryTableManagerFeature","SqlGroupStorageOpsFeature","SqlModelStorageOpsFeature","SqlEntryStorageOpsFeature"],"mappings":";;;;;;;;;;;AAmBO,MAAMA,wBAAwBC,cAA2C;IAC5E,MAAM;IACN,UAAU,CAACC,WAAWC;QAClB,MAAMC,eAAeC,AAAqC,WAArCA,QAAQ,GAAG,CAAC,oBAAoB;QAErDH,UAAU,gBAAgB,CAACI,yBAAyB;YAChDF;YACA,iBAAiBD,OAAO,eAAe;YACvC,iBAAiBA,OAAO,eAAe;QAC3C;QAEAI,yBAAyB,QAAQ,CAACL;QAClCM,mBAAmB,QAAQ,CAACN;QAC5BO,wBAAwB,QAAQ,CAACP;QACjCQ,0BAA0B,QAAQ,CAACR;QACnCS,0BAA0B,QAAQ,CAACT;QACnCU,yBAAyB,QAAQ,CAACV;QAElCW,0BAA0B,QAAQ,CAACX;QACnCY,0BAA0B,QAAQ,CAACZ;QACnCa,0BAA0B,QAAQ,CAACb;IACvC;AACJ"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api/index.js\";\nimport { GroupSchemaManagerFeature } from \"~/features/groupSchemaManager/feature.js\";\nimport { ModelSchemaManagerFeature } from \"~/features/modelSchemaManager/feature.js\";\nimport { EntryTableManagerFeature } from \"~/features/entryTableManager/feature.js\";\nimport { TableNameResolverConfig } from \"~/features/tableNameResolver/abstractions.js\";\nimport type { Knex } from \"knex\";\nimport { TableNameResolverFeature } from \"~/features/tableNameResolver/feature.js\";\nimport { ValueFilterFeature } from \"@webiny/db-utils\";\nimport { FilterRegistriesFeature } from \"@webiny/api-headless-cms-storage\";\nimport { SqlGroupStorageOpsFeature } from \"~/operations/group/feature.js\";\nimport { SqlModelStorageOpsFeature } from \"~/operations/model/feature.js\";\nimport { SqlEntryStorageOpsFeature } from \"~/operations/entry/feature.js\";\n\ninterface ISqlStorageOperationsConfig {\n knex: Knex;\n tableNamePrefix?: string;\n tableNameSuffix?: string;\n}\n\n/**\n * SQL CMS storage. Register it once, in the root container. Table naming and the table managers (which\n * remember the tables they have checked) live for the process; the storage operations are transient,\n * and the filter registries are container scoped, so each request (child) container gets its own.\n */\nexport const HeadlessCmsSqlFeature = createFeature<ISqlStorageOperationsConfig>({\n name: \"cms.storageOperations.sql\",\n register: (container, config) => {\n const sharedTables = process.env.WEBINY_SHARED_TABLES === \"true\";\n\n container.registerInstance(TableNameResolverConfig, {\n sharedTables,\n tableNamePrefix: config.tableNamePrefix,\n tableNameSuffix: config.tableNameSuffix\n });\n\n TableNameResolverFeature.register(container);\n ValueFilterFeature.register(container);\n GroupSchemaManagerFeature.register(container);\n ModelSchemaManagerFeature.register(container);\n EntryTableManagerFeature.register(container);\n\n FilterRegistriesFeature.register(container);\n SqlGroupStorageOpsFeature.register(container);\n SqlModelStorageOpsFeature.register(container);\n SqlEntryStorageOpsFeature.register(container);\n }\n});\n"],"names":["HeadlessCmsSqlFeature","createFeature","container","config","sharedTables","process","TableNameResolverConfig","TableNameResolverFeature","ValueFilterFeature","GroupSchemaManagerFeature","ModelSchemaManagerFeature","EntryTableManagerFeature","FilterRegistriesFeature","SqlGroupStorageOpsFeature","SqlModelStorageOpsFeature","SqlEntryStorageOpsFeature"],"mappings":";;;;;;;;;;;AAwBO,MAAMA,wBAAwBC,cAA2C;IAC5E,MAAM;IACN,UAAU,CAACC,WAAWC;QAClB,MAAMC,eAAeC,AAAqC,WAArCA,QAAQ,GAAG,CAAC,oBAAoB;QAErDH,UAAU,gBAAgB,CAACI,yBAAyB;YAChDF;YACA,iBAAiBD,OAAO,eAAe;YACvC,iBAAiBA,OAAO,eAAe;QAC3C;QAEAI,yBAAyB,QAAQ,CAACL;QAClCM,mBAAmB,QAAQ,CAACN;QAC5BO,0BAA0B,QAAQ,CAACP;QACnCQ,0BAA0B,QAAQ,CAACR;QACnCS,yBAAyB,QAAQ,CAACT;QAElCU,wBAAwB,QAAQ,CAACV;QACjCW,0BAA0B,QAAQ,CAACX;QACnCY,0BAA0B,QAAQ,CAACZ;QACnCa,0BAA0B,QAAQ,CAACb;IACvC;AACJ"}
@@ -7,6 +7,7 @@ declare class SqlCreateEntryRevisionFromImpl implements CreateEntryRevisionFromS
7
7
  private readonly knex;
8
8
  constructor(knexClient: KnexClient.Interface, entryTableManager: EntryTableManager.Interface);
9
9
  private query;
10
+ private modelQuery;
10
11
  execute<T extends CmsEntryValues>(model: CmsModel, params: CmsEntryStorageOperationsCreateRevisionFromParams<T>): Promise<import("@webiny/api-headless-cms/types/types.js").CmsEntry<T>>;
11
12
  }
12
13
  export declare const SqlCreateEntryRevisionFrom: typeof SqlCreateEntryRevisionFromImpl & {
@@ -2,7 +2,7 @@ import { CreateEntryRevisionFromStorageOperation } from "@webiny/api-headless-cm
2
2
  import { KnexClient } from "@webiny/api-core-sql";
3
3
  import { EntryTableManager } from "../../features/entryTableManager/abstractions.js";
4
4
  import { entryToRow } from "./mappers.js";
5
- import { createEntryQuery } from "./queryHelpers.js";
5
+ import { createEntryQuery, createModelEntryQuery } from "./queryHelpers.js";
6
6
  class SqlCreateEntryRevisionFromImpl {
7
7
  constructor(knexClient, entryTableManager){
8
8
  this.entryTableManager = entryTableManager;
@@ -11,25 +11,28 @@ class SqlCreateEntryRevisionFromImpl {
11
11
  query() {
12
12
  return createEntryQuery(this.knex, this.entryTableManager.getTableName());
13
13
  }
14
+ modelQuery(model) {
15
+ return createModelEntryQuery(this.knex, this.entryTableManager.getTableName(), model);
16
+ }
14
17
  async execute(model, params) {
15
18
  await this.entryTableManager.ensureTable();
16
19
  const isPublished = "published" === params.entry.status;
17
- const oldLatestRows = await this.query().where("tenant", model.tenant).andWhere("entryId", params.entry.entryId).andWhere("isLatest", true);
20
+ const oldLatestRows = await this.modelQuery(model).andWhere("entryId", params.entry.entryId).andWhere("isLatest", true);
18
21
  for (const row of oldLatestRows){
19
22
  const parsed = JSON.parse(row.data);
20
23
  parsed.isLatest = false;
21
- await this.query().where("id", row.id).update({
24
+ await this.modelQuery(model).andWhere("id", row.id).update({
22
25
  isLatest: false,
23
26
  data: JSON.stringify(parsed)
24
27
  });
25
28
  }
26
29
  if (isPublished) {
27
- const oldPublishedRows = await this.query().where("tenant", model.tenant).andWhere("entryId", params.entry.entryId).andWhere("isPublished", true);
30
+ const oldPublishedRows = await this.modelQuery(model).andWhere("entryId", params.entry.entryId).andWhere("isPublished", true);
28
31
  for (const row of oldPublishedRows){
29
32
  const parsed = JSON.parse(row.data);
30
33
  parsed.isPublished = false;
31
34
  parsed.status = "unpublished";
32
- await this.query().where("id", row.id).update({
35
+ await this.modelQuery(model).andWhere("id", row.id).update({
33
36
  isPublished: false,
34
37
  data: JSON.stringify(parsed)
35
38
  });
@@ -1 +1 @@
1
- {"version":3,"file":"operations/entry/SqlCreateEntryRevisionFrom.js","sources":["../../../src/operations/entry/SqlCreateEntryRevisionFrom.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsCreateRevisionFromParams,\n CmsEntryValues,\n CmsModel,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { CreateEntryRevisionFromStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/CreateEntryRevisionFromStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport type { IEntryRow } from \"./types.js\";\nimport { entryToRow } from \"./mappers.js\";\nimport { createEntryQuery } from \"./queryHelpers.js\";\n\nclass SqlCreateEntryRevisionFromImpl implements CreateEntryRevisionFromStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n private query(): Knex.QueryBuilder<IEntryRow> {\n return createEntryQuery(this.knex, this.entryTableManager.getTableName());\n }\n\n async execute<T extends CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryStorageOperationsCreateRevisionFromParams<T>\n ) {\n await this.entryTableManager.ensureTable();\n\n const isPublished = params.entry.status === \"published\";\n\n const oldLatestRows = await this.query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"entryId\", params.entry.entryId)\n .andWhere(\"isLatest\", true);\n\n for (const row of oldLatestRows) {\n const parsed = JSON.parse(row.data);\n parsed.isLatest = false;\n\n await this.query()\n .where(\"id\", row.id)\n .update({ isLatest: false, data: JSON.stringify(parsed) });\n }\n\n if (isPublished) {\n const oldPublishedRows = await this.query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"entryId\", params.entry.entryId)\n .andWhere(\"isPublished\", true);\n\n for (const row of oldPublishedRows) {\n const parsed = JSON.parse(row.data);\n parsed.isPublished = false;\n parsed.status = \"unpublished\";\n\n await this.query()\n .where(\"id\", row.id)\n .update({ isPublished: false, data: JSON.stringify(parsed) });\n }\n }\n\n const se = params.storageEntry as CmsStorageEntry;\n se.isLatest = true;\n se.isPublished = isPublished;\n\n const row = entryToRow(se);\n await this.query().insert(row);\n\n return params.entry;\n }\n}\n\nexport const SqlCreateEntryRevisionFrom =\n CreateEntryRevisionFromStorageOperation.createImplementation({\n implementation: SqlCreateEntryRevisionFromImpl,\n dependencies: [KnexClient, EntryTableManager]\n });\n"],"names":["SqlCreateEntryRevisionFromImpl","knexClient","entryTableManager","createEntryQuery","model","params","isPublished","oldLatestRows","row","parsed","JSON","oldPublishedRows","se","entryToRow","SqlCreateEntryRevisionFrom","CreateEntryRevisionFromStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;;AAcA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEQ,QAAsC;QAC1C,OAAOE,iBAAiB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY;IAC1E;IAEA,MAAM,QACFC,KAAe,EACfC,MAA4D,EAC9D;QACE,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAMC,cAAcD,AAAwB,gBAAxBA,OAAO,KAAK,CAAC,MAAM;QAEvC,MAAME,gBAAgB,MAAM,IAAI,CAAC,KAAK,GACjC,KAAK,CAAC,UAAUH,MAAM,MAAM,EAC5B,QAAQ,CAAC,WAAWC,OAAO,KAAK,CAAC,OAAO,EACxC,QAAQ,CAAC,YAAY;QAE1B,KAAK,MAAMG,OAAOD,cAAe;YAC7B,MAAME,SAASC,KAAK,KAAK,CAACF,IAAI,IAAI;YAClCC,OAAO,QAAQ,GAAG;YAElB,MAAM,IAAI,CAAC,KAAK,GACX,KAAK,CAAC,MAAMD,IAAI,EAAE,EAClB,MAAM,CAAC;gBAAE,UAAU;gBAAO,MAAME,KAAK,SAAS,CAACD;YAAQ;QAChE;QAEA,IAAIH,aAAa;YACb,MAAMK,mBAAmB,MAAM,IAAI,CAAC,KAAK,GACpC,KAAK,CAAC,UAAUP,MAAM,MAAM,EAC5B,QAAQ,CAAC,WAAWC,OAAO,KAAK,CAAC,OAAO,EACxC,QAAQ,CAAC,eAAe;YAE7B,KAAK,MAAMG,OAAOG,iBAAkB;gBAChC,MAAMF,SAASC,KAAK,KAAK,CAACF,IAAI,IAAI;gBAClCC,OAAO,WAAW,GAAG;gBACrBA,OAAO,MAAM,GAAG;gBAEhB,MAAM,IAAI,CAAC,KAAK,GACX,KAAK,CAAC,MAAMD,IAAI,EAAE,EAClB,MAAM,CAAC;oBAAE,aAAa;oBAAO,MAAME,KAAK,SAAS,CAACD;gBAAQ;YACnE;QACJ;QAEA,MAAMG,KAAKP,OAAO,YAAY;QAC9BO,GAAG,QAAQ,GAAG;QACdA,GAAG,WAAW,GAAGN;QAEjB,MAAME,MAAMK,WAAWD;QACvB,MAAM,IAAI,CAAC,KAAK,GAAG,MAAM,CAACJ;QAE1B,OAAOH,OAAO,KAAK;IACvB;AACJ;AAEO,MAAMS,6BACTC,wCAAwC,oBAAoB,CAAC;IACzD,gBAAgBf;IAChB,cAAc;QAACgB;QAAYC;KAAkB;AACjD"}
1
+ {"version":3,"file":"operations/entry/SqlCreateEntryRevisionFrom.js","sources":["../../../src/operations/entry/SqlCreateEntryRevisionFrom.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsCreateRevisionFromParams,\n CmsEntryValues,\n CmsModel,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { CreateEntryRevisionFromStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/CreateEntryRevisionFromStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport type { IEntryRow } from \"./types.js\";\nimport { entryToRow } from \"./mappers.js\";\nimport { createEntryQuery, createModelEntryQuery } from \"./queryHelpers.js\";\n\nclass SqlCreateEntryRevisionFromImpl implements CreateEntryRevisionFromStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n private query(): Knex.QueryBuilder<IEntryRow> {\n return createEntryQuery(this.knex, this.entryTableManager.getTableName());\n }\n\n private modelQuery(model: CmsModel): Knex.QueryBuilder<IEntryRow> {\n return createModelEntryQuery(this.knex, this.entryTableManager.getTableName(), model);\n }\n\n async execute<T extends CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryStorageOperationsCreateRevisionFromParams<T>\n ) {\n await this.entryTableManager.ensureTable();\n\n const isPublished = params.entry.status === \"published\";\n\n const oldLatestRows = await this.modelQuery(model)\n .andWhere(\"entryId\", params.entry.entryId)\n .andWhere(\"isLatest\", true);\n\n for (const row of oldLatestRows) {\n const parsed = JSON.parse(row.data);\n parsed.isLatest = false;\n\n await this.modelQuery(model)\n .andWhere(\"id\", row.id)\n .update({ isLatest: false, data: JSON.stringify(parsed) });\n }\n\n if (isPublished) {\n const oldPublishedRows = await this.modelQuery(model)\n .andWhere(\"entryId\", params.entry.entryId)\n .andWhere(\"isPublished\", true);\n\n for (const row of oldPublishedRows) {\n const parsed = JSON.parse(row.data);\n parsed.isPublished = false;\n parsed.status = \"unpublished\";\n\n await this.modelQuery(model)\n .andWhere(\"id\", row.id)\n .update({ isPublished: false, data: JSON.stringify(parsed) });\n }\n }\n\n const se = params.storageEntry as CmsStorageEntry;\n se.isLatest = true;\n se.isPublished = isPublished;\n\n const row = entryToRow(se);\n await this.query().insert(row);\n\n return params.entry;\n }\n}\n\nexport const SqlCreateEntryRevisionFrom =\n CreateEntryRevisionFromStorageOperation.createImplementation({\n implementation: SqlCreateEntryRevisionFromImpl,\n dependencies: [KnexClient, EntryTableManager]\n });\n"],"names":["SqlCreateEntryRevisionFromImpl","knexClient","entryTableManager","createEntryQuery","model","createModelEntryQuery","params","isPublished","oldLatestRows","row","parsed","JSON","oldPublishedRows","se","entryToRow","SqlCreateEntryRevisionFrom","CreateEntryRevisionFromStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;;AAcA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEQ,QAAsC;QAC1C,OAAOE,iBAAiB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY;IAC1E;IAEQ,WAAWC,KAAe,EAAgC;QAC9D,OAAOC,sBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,IAAID;IACnF;IAEA,MAAM,QACFA,KAAe,EACfE,MAA4D,EAC9D;QACE,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAMC,cAAcD,AAAwB,gBAAxBA,OAAO,KAAK,CAAC,MAAM;QAEvC,MAAME,gBAAgB,MAAM,IAAI,CAAC,UAAU,CAACJ,OACvC,QAAQ,CAAC,WAAWE,OAAO,KAAK,CAAC,OAAO,EACxC,QAAQ,CAAC,YAAY;QAE1B,KAAK,MAAMG,OAAOD,cAAe;YAC7B,MAAME,SAASC,KAAK,KAAK,CAACF,IAAI,IAAI;YAClCC,OAAO,QAAQ,GAAG;YAElB,MAAM,IAAI,CAAC,UAAU,CAACN,OACjB,QAAQ,CAAC,MAAMK,IAAI,EAAE,EACrB,MAAM,CAAC;gBAAE,UAAU;gBAAO,MAAME,KAAK,SAAS,CAACD;YAAQ;QAChE;QAEA,IAAIH,aAAa;YACb,MAAMK,mBAAmB,MAAM,IAAI,CAAC,UAAU,CAACR,OAC1C,QAAQ,CAAC,WAAWE,OAAO,KAAK,CAAC,OAAO,EACxC,QAAQ,CAAC,eAAe;YAE7B,KAAK,MAAMG,OAAOG,iBAAkB;gBAChC,MAAMF,SAASC,KAAK,KAAK,CAACF,IAAI,IAAI;gBAClCC,OAAO,WAAW,GAAG;gBACrBA,OAAO,MAAM,GAAG;gBAEhB,MAAM,IAAI,CAAC,UAAU,CAACN,OACjB,QAAQ,CAAC,MAAMK,IAAI,EAAE,EACrB,MAAM,CAAC;oBAAE,aAAa;oBAAO,MAAME,KAAK,SAAS,CAACD;gBAAQ;YACnE;QACJ;QAEA,MAAMG,KAAKP,OAAO,YAAY;QAC9BO,GAAG,QAAQ,GAAG;QACdA,GAAG,WAAW,GAAGN;QAEjB,MAAME,MAAMK,WAAWD;QACvB,MAAM,IAAI,CAAC,KAAK,GAAG,MAAM,CAACJ;QAE1B,OAAOH,OAAO,KAAK;IACvB;AACJ;AAEO,MAAMS,6BACTC,wCAAwC,oBAAoB,CAAC;IACzD,gBAAgBhB;IAChB,cAAc;QAACiB;QAAYC;KAAkB;AACjD"}
@@ -6,7 +6,7 @@ declare class SqlDeleteEntryImpl implements DeleteEntryStorageOperation.Interfac
6
6
  private readonly entryTableManager;
7
7
  private readonly knex;
8
8
  constructor(knexClient: KnexClient.Interface, entryTableManager: EntryTableManager.Interface);
9
- private query;
9
+ private modelQuery;
10
10
  execute(model: CmsModel, params: CmsEntryStorageOperationsDeleteParams): Promise<void>;
11
11
  }
12
12
  export declare const SqlDeleteEntry: typeof SqlDeleteEntryImpl & {
@@ -2,19 +2,19 @@ import { DeleteEntryStorageOperation } from "@webiny/api-headless-cms/features/s
2
2
  import { KnexClient } from "@webiny/api-core-sql";
3
3
  import { EntryTableManager } from "../../features/entryTableManager/abstractions.js";
4
4
  import { parseIdentifier } from "@webiny/utils";
5
- import { createEntryQuery } from "./queryHelpers.js";
5
+ import { createModelEntryQuery } from "./queryHelpers.js";
6
6
  class SqlDeleteEntryImpl {
7
7
  constructor(knexClient, entryTableManager){
8
8
  this.entryTableManager = entryTableManager;
9
9
  this.knex = knexClient.client;
10
10
  }
11
- query() {
12
- return createEntryQuery(this.knex, this.entryTableManager.getTableName());
11
+ modelQuery(model) {
12
+ return createModelEntryQuery(this.knex, this.entryTableManager.getTableName(), model);
13
13
  }
14
14
  async execute(model, params) {
15
15
  await this.entryTableManager.ensureTable();
16
16
  const { id: entryId } = parseIdentifier(params.entry.id);
17
- await this.query().where("tenant", model.tenant).andWhere("entryId", entryId).delete();
17
+ await this.modelQuery(model).andWhere("entryId", entryId).delete();
18
18
  }
19
19
  }
20
20
  const SqlDeleteEntry = DeleteEntryStorageOperation.createImplementation({
@@ -1 +1 @@
1
- {"version":3,"file":"operations/entry/SqlDeleteEntry.js","sources":["../../../src/operations/entry/SqlDeleteEntry.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsDeleteParams,\n CmsModel\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { DeleteEntryStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/DeleteEntryStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport type { IEntryRow } from \"./types.js\";\nimport { createEntryQuery } from \"./queryHelpers.js\";\n\nclass SqlDeleteEntryImpl implements DeleteEntryStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n private query(): Knex.QueryBuilder<IEntryRow> {\n return createEntryQuery(this.knex, this.entryTableManager.getTableName());\n }\n\n async execute(model: CmsModel, params: CmsEntryStorageOperationsDeleteParams) {\n await this.entryTableManager.ensureTable();\n\n const { id: entryId } = parseIdentifier(params.entry.id);\n\n await this.query().where(\"tenant\", model.tenant).andWhere(\"entryId\", entryId).delete();\n }\n}\n\nexport const SqlDeleteEntry = DeleteEntryStorageOperation.createImplementation({\n implementation: SqlDeleteEntryImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlDeleteEntryImpl","knexClient","entryTableManager","createEntryQuery","model","params","entryId","parseIdentifier","SqlDeleteEntry","DeleteEntryStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;;AAYA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEQ,QAAsC;QAC1C,OAAOE,iBAAiB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY;IAC1E;IAEA,MAAM,QAAQC,KAAe,EAAEC,MAA6C,EAAE;QAC1E,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAM,EAAE,IAAIC,OAAO,EAAE,GAAGC,gBAAgBF,OAAO,KAAK,CAAC,EAAE;QAEvD,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,UAAUD,MAAM,MAAM,EAAE,QAAQ,CAAC,WAAWE,SAAS,MAAM;IACxF;AACJ;AAEO,MAAME,iBAAiBC,4BAA4B,oBAAoB,CAAC;IAC3E,gBAAgBT;IAChB,cAAc;QAACU;QAAYC;KAAkB;AACjD"}
1
+ {"version":3,"file":"operations/entry/SqlDeleteEntry.js","sources":["../../../src/operations/entry/SqlDeleteEntry.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsDeleteParams,\n CmsModel\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { DeleteEntryStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/DeleteEntryStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport type { IEntryRow } from \"./types.js\";\nimport { createModelEntryQuery } from \"./queryHelpers.js\";\n\nclass SqlDeleteEntryImpl implements DeleteEntryStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n private modelQuery(model: CmsModel): Knex.QueryBuilder<IEntryRow> {\n return createModelEntryQuery(this.knex, this.entryTableManager.getTableName(), model);\n }\n\n async execute(model: CmsModel, params: CmsEntryStorageOperationsDeleteParams) {\n await this.entryTableManager.ensureTable();\n\n const { id: entryId } = parseIdentifier(params.entry.id);\n\n await this.modelQuery(model).andWhere(\"entryId\", entryId).delete();\n }\n}\n\nexport const SqlDeleteEntry = DeleteEntryStorageOperation.createImplementation({\n implementation: SqlDeleteEntryImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlDeleteEntryImpl","knexClient","entryTableManager","model","createModelEntryQuery","params","entryId","parseIdentifier","SqlDeleteEntry","DeleteEntryStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;;AAYA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEQ,WAAWE,KAAe,EAAgC;QAC9D,OAAOC,sBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,IAAID;IACnF;IAEA,MAAM,QAAQA,KAAe,EAAEE,MAA6C,EAAE;QAC1E,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAM,EAAE,IAAIC,OAAO,EAAE,GAAGC,gBAAgBF,OAAO,KAAK,CAAC,EAAE;QAEvD,MAAM,IAAI,CAAC,UAAU,CAACF,OAAO,QAAQ,CAAC,WAAWG,SAAS,MAAM;IACpE;AACJ;AAEO,MAAME,iBAAiBC,4BAA4B,oBAAoB,CAAC;IAC3E,gBAAgBT;IAChB,cAAc;QAACU;QAAYC;KAAkB;AACjD"}
@@ -6,7 +6,7 @@ declare class SqlDeleteEntryRevisionImpl implements DeleteEntryRevisionStorageOp
6
6
  private readonly entryTableManager;
7
7
  private readonly knex;
8
8
  constructor(knexClient: KnexClient.Interface, entryTableManager: EntryTableManager.Interface);
9
- private query;
9
+ private modelQuery;
10
10
  execute<T extends CmsEntryValues>(model: CmsModel, params: CmsEntryStorageOperationsDeleteRevisionParams<T>): Promise<void>;
11
11
  }
12
12
  export declare const SqlDeleteEntryRevision: typeof SqlDeleteEntryRevisionImpl & {
@@ -2,20 +2,20 @@ import { DeleteEntryRevisionStorageOperation } from "@webiny/api-headless-cms/fe
2
2
  import { KnexClient } from "@webiny/api-core-sql";
3
3
  import { EntryTableManager } from "../../features/entryTableManager/abstractions.js";
4
4
  import { entryToRow } from "./mappers.js";
5
- import { createEntryQuery, patchAllEntryRevisions } from "./queryHelpers.js";
5
+ import { createModelEntryQuery, patchAllEntryRevisions } from "./queryHelpers.js";
6
6
  class SqlDeleteEntryRevisionImpl {
7
7
  constructor(knexClient, entryTableManager){
8
8
  this.entryTableManager = entryTableManager;
9
9
  this.knex = knexClient.client;
10
10
  }
11
- query() {
12
- return createEntryQuery(this.knex, this.entryTableManager.getTableName());
11
+ modelQuery(model) {
12
+ return createModelEntryQuery(this.knex, this.entryTableManager.getTableName(), model);
13
13
  }
14
14
  async execute(model, params) {
15
15
  await this.entryTableManager.ensureTable();
16
16
  const wasPublished = "published" === params.storageEntry.status;
17
- await this.query().where("tenant", model.tenant).andWhere("id", params.storageEntry.id).delete();
18
- if (wasPublished) await patchAllEntryRevisions(this.knex, this.entryTableManager.getTableName(), params.storageEntry.entryId, model.tenant, (parsed)=>{
17
+ await this.modelQuery(model).andWhere("id", params.storageEntry.id).delete();
18
+ if (wasPublished) await patchAllEntryRevisions(this.knex, this.entryTableManager.getTableName(), model, params.storageEntry.entryId, (parsed)=>{
19
19
  parsed.live = null;
20
20
  });
21
21
  if (params.latestStorageEntry) {
@@ -23,7 +23,7 @@ class SqlDeleteEntryRevisionImpl {
23
23
  latestParsed.isLatest = true;
24
24
  if (wasPublished) latestParsed.live = null;
25
25
  const latestRow = entryToRow(latestParsed);
26
- await this.query().where("tenant", model.tenant).andWhere("id", params.latestStorageEntry.id).update(latestRow);
26
+ await this.modelQuery(model).andWhere("id", params.latestStorageEntry.id).update(latestRow);
27
27
  }
28
28
  }
29
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"operations/entry/SqlDeleteEntryRevision.js","sources":["../../../src/operations/entry/SqlDeleteEntryRevision.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsDeleteRevisionParams,\n CmsEntryValues,\n CmsModel,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { DeleteEntryRevisionStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/DeleteEntryRevisionStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport type { IEntryRow } from \"./types.js\";\nimport { entryToRow } from \"./mappers.js\";\nimport { createEntryQuery, patchAllEntryRevisions } from \"./queryHelpers.js\";\n\nclass SqlDeleteEntryRevisionImpl implements DeleteEntryRevisionStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n private query(): Knex.QueryBuilder<IEntryRow> {\n return createEntryQuery(this.knex, this.entryTableManager.getTableName());\n }\n\n async execute<T extends CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryStorageOperationsDeleteRevisionParams<T>\n ) {\n await this.entryTableManager.ensureTable();\n\n const wasPublished = params.storageEntry.status === \"published\";\n\n await this.query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"id\", params.storageEntry.id)\n .delete();\n\n if (wasPublished) {\n await patchAllEntryRevisions(\n this.knex,\n this.entryTableManager.getTableName(),\n params.storageEntry.entryId,\n model.tenant,\n parsed => {\n parsed.live = null;\n }\n );\n }\n\n if (params.latestStorageEntry) {\n const latestParsed = structuredClone(params.latestStorageEntry);\n latestParsed.isLatest = true;\n\n if (wasPublished) {\n latestParsed.live = null;\n }\n\n const latestRow = entryToRow(latestParsed as CmsStorageEntry);\n\n await this.query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"id\", params.latestStorageEntry.id)\n .update(latestRow);\n }\n }\n}\n\nexport const SqlDeleteEntryRevision = DeleteEntryRevisionStorageOperation.createImplementation({\n implementation: SqlDeleteEntryRevisionImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlDeleteEntryRevisionImpl","knexClient","entryTableManager","createEntryQuery","model","params","wasPublished","patchAllEntryRevisions","parsed","latestParsed","structuredClone","latestRow","entryToRow","SqlDeleteEntryRevision","DeleteEntryRevisionStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;;AAcA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEQ,QAAsC;QAC1C,OAAOE,iBAAiB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY;IAC1E;IAEA,MAAM,QACFC,KAAe,EACfC,MAAwD,EAC1D;QACE,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAMC,eAAeD,AAA+B,gBAA/BA,OAAO,YAAY,CAAC,MAAM;QAE/C,MAAM,IAAI,CAAC,KAAK,GACX,KAAK,CAAC,UAAUD,MAAM,MAAM,EAC5B,QAAQ,CAAC,MAAMC,OAAO,YAAY,CAAC,EAAE,EACrC,MAAM;QAEX,IAAIC,cACA,MAAMC,uBACF,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,iBAAiB,CAAC,YAAY,IACnCF,OAAO,YAAY,CAAC,OAAO,EAC3BD,MAAM,MAAM,EACZI,CAAAA;YACIA,OAAO,IAAI,GAAG;QAClB;QAIR,IAAIH,OAAO,kBAAkB,EAAE;YAC3B,MAAMI,eAAeC,gBAAgBL,OAAO,kBAAkB;YAC9DI,aAAa,QAAQ,GAAG;YAExB,IAAIH,cACAG,aAAa,IAAI,GAAG;YAGxB,MAAME,YAAYC,WAAWH;YAE7B,MAAM,IAAI,CAAC,KAAK,GACX,KAAK,CAAC,UAAUL,MAAM,MAAM,EAC5B,QAAQ,CAAC,MAAMC,OAAO,kBAAkB,CAAC,EAAE,EAC3C,MAAM,CAACM;QAChB;IACJ;AACJ;AAEO,MAAME,yBAAyBC,oCAAoC,oBAAoB,CAAC;IAC3F,gBAAgBd;IAChB,cAAc;QAACe;QAAYC;KAAkB;AACjD"}
1
+ {"version":3,"file":"operations/entry/SqlDeleteEntryRevision.js","sources":["../../../src/operations/entry/SqlDeleteEntryRevision.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsDeleteRevisionParams,\n CmsEntryValues,\n CmsModel,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { DeleteEntryRevisionStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/DeleteEntryRevisionStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport type { IEntryRow } from \"./types.js\";\nimport { entryToRow } from \"./mappers.js\";\nimport { createModelEntryQuery, patchAllEntryRevisions } from \"./queryHelpers.js\";\n\nclass SqlDeleteEntryRevisionImpl implements DeleteEntryRevisionStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n private modelQuery(model: CmsModel): Knex.QueryBuilder<IEntryRow> {\n return createModelEntryQuery(this.knex, this.entryTableManager.getTableName(), model);\n }\n\n async execute<T extends CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryStorageOperationsDeleteRevisionParams<T>\n ) {\n await this.entryTableManager.ensureTable();\n\n const wasPublished = params.storageEntry.status === \"published\";\n\n await this.modelQuery(model).andWhere(\"id\", params.storageEntry.id).delete();\n\n if (wasPublished) {\n await patchAllEntryRevisions(\n this.knex,\n this.entryTableManager.getTableName(),\n model,\n params.storageEntry.entryId,\n parsed => {\n parsed.live = null;\n }\n );\n }\n\n if (params.latestStorageEntry) {\n const latestParsed = structuredClone(params.latestStorageEntry);\n latestParsed.isLatest = true;\n\n if (wasPublished) {\n latestParsed.live = null;\n }\n\n const latestRow = entryToRow(latestParsed as CmsStorageEntry);\n\n await this.modelQuery(model)\n .andWhere(\"id\", params.latestStorageEntry.id)\n .update(latestRow);\n }\n }\n}\n\nexport const SqlDeleteEntryRevision = DeleteEntryRevisionStorageOperation.createImplementation({\n implementation: SqlDeleteEntryRevisionImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlDeleteEntryRevisionImpl","knexClient","entryTableManager","model","createModelEntryQuery","params","wasPublished","patchAllEntryRevisions","parsed","latestParsed","structuredClone","latestRow","entryToRow","SqlDeleteEntryRevision","DeleteEntryRevisionStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;;AAcA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEQ,WAAWE,KAAe,EAAgC;QAC9D,OAAOC,sBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,IAAID;IACnF;IAEA,MAAM,QACFA,KAAe,EACfE,MAAwD,EAC1D;QACE,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAMC,eAAeD,AAA+B,gBAA/BA,OAAO,YAAY,CAAC,MAAM;QAE/C,MAAM,IAAI,CAAC,UAAU,CAACF,OAAO,QAAQ,CAAC,MAAME,OAAO,YAAY,CAAC,EAAE,EAAE,MAAM;QAE1E,IAAIC,cACA,MAAMC,uBACF,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,iBAAiB,CAAC,YAAY,IACnCJ,OACAE,OAAO,YAAY,CAAC,OAAO,EAC3BG,CAAAA;YACIA,OAAO,IAAI,GAAG;QAClB;QAIR,IAAIH,OAAO,kBAAkB,EAAE;YAC3B,MAAMI,eAAeC,gBAAgBL,OAAO,kBAAkB;YAC9DI,aAAa,QAAQ,GAAG;YAExB,IAAIH,cACAG,aAAa,IAAI,GAAG;YAGxB,MAAME,YAAYC,WAAWH;YAE7B,MAAM,IAAI,CAAC,UAAU,CAACN,OACjB,QAAQ,CAAC,MAAME,OAAO,kBAAkB,CAAC,EAAE,EAC3C,MAAM,CAACM;QAChB;IACJ;AACJ;AAEO,MAAME,yBAAyBC,oCAAoC,oBAAoB,CAAC;IAC3F,gBAAgBd;IAChB,cAAc;QAACe;QAAYC;KAAkB;AACjD"}
@@ -6,7 +6,7 @@ declare class SqlDeleteMultipleEntriesImpl implements DeleteMultipleEntriesStora
6
6
  private readonly entryTableManager;
7
7
  private readonly knex;
8
8
  constructor(knexClient: KnexClient.Interface, entryTableManager: EntryTableManager.Interface);
9
- private query;
9
+ private modelQuery;
10
10
  execute(model: CmsModel, params: CmsEntryStorageOperationsDeleteEntriesParams): Promise<void>;
11
11
  }
12
12
  export declare const SqlDeleteMultipleEntries: typeof SqlDeleteMultipleEntriesImpl & {
@@ -2,19 +2,19 @@ import { DeleteMultipleEntriesStorageOperation } from "@webiny/api-headless-cms/
2
2
  import { KnexClient } from "@webiny/api-core-sql";
3
3
  import { EntryTableManager } from "../../features/entryTableManager/abstractions.js";
4
4
  import { parseIdentifier } from "@webiny/utils";
5
- import { createEntryQuery } from "./queryHelpers.js";
5
+ import { createModelEntryQuery } from "./queryHelpers.js";
6
6
  class SqlDeleteMultipleEntriesImpl {
7
7
  constructor(knexClient, entryTableManager){
8
8
  this.entryTableManager = entryTableManager;
9
9
  this.knex = knexClient.client;
10
10
  }
11
- query() {
12
- return createEntryQuery(this.knex, this.entryTableManager.getTableName());
11
+ modelQuery(model) {
12
+ return createModelEntryQuery(this.knex, this.entryTableManager.getTableName(), model);
13
13
  }
14
14
  async execute(model, params) {
15
15
  await this.entryTableManager.ensureTable();
16
16
  const entryIds = params.entries.map((id)=>parseIdentifier(id).id);
17
- await this.query().where("tenant", model.tenant).whereIn("entryId", entryIds).delete();
17
+ await this.modelQuery(model).whereIn("entryId", entryIds).delete();
18
18
  }
19
19
  }
20
20
  const SqlDeleteMultipleEntries = DeleteMultipleEntriesStorageOperation.createImplementation({
@@ -1 +1 @@
1
- {"version":3,"file":"operations/entry/SqlDeleteMultipleEntries.js","sources":["../../../src/operations/entry/SqlDeleteMultipleEntries.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsDeleteEntriesParams,\n CmsModel\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { DeleteMultipleEntriesStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/DeleteMultipleEntriesStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport type { IEntryRow } from \"./types.js\";\nimport { createEntryQuery } from \"./queryHelpers.js\";\n\nclass SqlDeleteMultipleEntriesImpl implements DeleteMultipleEntriesStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n private query(): Knex.QueryBuilder<IEntryRow> {\n return createEntryQuery(this.knex, this.entryTableManager.getTableName());\n }\n\n async execute(model: CmsModel, params: CmsEntryStorageOperationsDeleteEntriesParams) {\n await this.entryTableManager.ensureTable();\n\n const entryIds = params.entries.map(id => parseIdentifier(id).id);\n\n await this.query().where(\"tenant\", model.tenant).whereIn(\"entryId\", entryIds).delete();\n }\n}\n\nexport const SqlDeleteMultipleEntries = DeleteMultipleEntriesStorageOperation.createImplementation({\n implementation: SqlDeleteMultipleEntriesImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlDeleteMultipleEntriesImpl","knexClient","entryTableManager","createEntryQuery","model","params","entryIds","id","parseIdentifier","SqlDeleteMultipleEntries","DeleteMultipleEntriesStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;;AAYA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEQ,QAAsC;QAC1C,OAAOE,iBAAiB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY;IAC1E;IAEA,MAAM,QAAQC,KAAe,EAAEC,MAAoD,EAAE;QACjF,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAMC,WAAWD,OAAO,OAAO,CAAC,GAAG,CAACE,CAAAA,KAAMC,gBAAgBD,IAAI,EAAE;QAEhE,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,UAAUH,MAAM,MAAM,EAAE,OAAO,CAAC,WAAWE,UAAU,MAAM;IACxF;AACJ;AAEO,MAAMG,2BAA2BC,sCAAsC,oBAAoB,CAAC;IAC/F,gBAAgBV;IAChB,cAAc;QAACW;QAAYC;KAAkB;AACjD"}
1
+ {"version":3,"file":"operations/entry/SqlDeleteMultipleEntries.js","sources":["../../../src/operations/entry/SqlDeleteMultipleEntries.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsDeleteEntriesParams,\n CmsModel\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { DeleteMultipleEntriesStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/DeleteMultipleEntriesStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport type { IEntryRow } from \"./types.js\";\nimport { createModelEntryQuery } from \"./queryHelpers.js\";\n\nclass SqlDeleteMultipleEntriesImpl implements DeleteMultipleEntriesStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n private modelQuery(model: CmsModel): Knex.QueryBuilder<IEntryRow> {\n return createModelEntryQuery(this.knex, this.entryTableManager.getTableName(), model);\n }\n\n async execute(model: CmsModel, params: CmsEntryStorageOperationsDeleteEntriesParams) {\n await this.entryTableManager.ensureTable();\n\n const entryIds = params.entries.map(id => parseIdentifier(id).id);\n\n await this.modelQuery(model).whereIn(\"entryId\", entryIds).delete();\n }\n}\n\nexport const SqlDeleteMultipleEntries = DeleteMultipleEntriesStorageOperation.createImplementation({\n implementation: SqlDeleteMultipleEntriesImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlDeleteMultipleEntriesImpl","knexClient","entryTableManager","model","createModelEntryQuery","params","entryIds","id","parseIdentifier","SqlDeleteMultipleEntries","DeleteMultipleEntriesStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;;AAYA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEQ,WAAWE,KAAe,EAAgC;QAC9D,OAAOC,sBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,IAAID;IACnF;IAEA,MAAM,QAAQA,KAAe,EAAEE,MAAoD,EAAE;QACjF,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAMC,WAAWD,OAAO,OAAO,CAAC,GAAG,CAACE,CAAAA,KAAMC,gBAAgBD,IAAI,EAAE;QAEhE,MAAM,IAAI,CAAC,UAAU,CAACJ,OAAO,OAAO,CAAC,WAAWG,UAAU,MAAM;IACpE;AACJ;AAEO,MAAMG,2BAA2BC,sCAAsC,oBAAoB,CAAC;IAC/F,gBAAgBV;IAChB,cAAc;QAACW;QAAYC;KAAkB;AACjD"}
@@ -11,7 +11,7 @@ class SqlMoveEntryImpl {
11
11
  async execute(model, id, folderId) {
12
12
  await this.entryTableManager.ensureTable();
13
13
  const { id: entryId } = parseIdentifier(id);
14
- await patchAllEntryRevisions(this.knex, this.entryTableManager.getTableName(), entryId, model.tenant, (parsed)=>{
14
+ await patchAllEntryRevisions(this.knex, this.entryTableManager.getTableName(), model, entryId, (parsed)=>{
15
15
  parsed.location = {
16
16
  folderId
17
17
  };
@@ -1 +1 @@
1
- {"version":3,"file":"operations/entry/SqlMoveEntry.js","sources":["../../../src/operations/entry/SqlMoveEntry.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\nimport { MoveEntryStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/MoveEntryStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { patchAllEntryRevisions } from \"./queryHelpers.js\";\n\nclass SqlMoveEntryImpl implements MoveEntryStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n async execute(model: CmsModel, id: string, folderId: string) {\n await this.entryTableManager.ensureTable();\n\n const { id: entryId } = parseIdentifier(id);\n\n await patchAllEntryRevisions(\n this.knex,\n this.entryTableManager.getTableName(),\n entryId,\n model.tenant,\n parsed => {\n parsed.location = { folderId };\n }\n );\n }\n}\n\nexport const SqlMoveEntry = MoveEntryStorageOperation.createImplementation({\n implementation: SqlMoveEntryImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlMoveEntryImpl","knexClient","entryTableManager","model","id","folderId","entryId","parseIdentifier","patchAllEntryRevisions","parsed","SqlMoveEntry","MoveEntryStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;;AAQA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEA,MAAM,QAAQE,KAAe,EAAEC,EAAU,EAAEC,QAAgB,EAAE;QACzD,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAM,EAAE,IAAIC,OAAO,EAAE,GAAGC,gBAAgBH;QAExC,MAAMI,uBACF,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,iBAAiB,CAAC,YAAY,IACnCF,SACAH,MAAM,MAAM,EACZM,CAAAA;YACIA,OAAO,QAAQ,GAAG;gBAAEJ;YAAS;QACjC;IAER;AACJ;AAEO,MAAMK,eAAeC,0BAA0B,oBAAoB,CAAC;IACvE,gBAAgBX;IAChB,cAAc;QAACY;QAAYC;KAAkB;AACjD"}
1
+ {"version":3,"file":"operations/entry/SqlMoveEntry.js","sources":["../../../src/operations/entry/SqlMoveEntry.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type { CmsModel } from \"@webiny/api-headless-cms/types/index.js\";\nimport { MoveEntryStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/MoveEntryStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport { parseIdentifier } from \"@webiny/utils\";\nimport { patchAllEntryRevisions } from \"./queryHelpers.js\";\n\nclass SqlMoveEntryImpl implements MoveEntryStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n async execute(model: CmsModel, id: string, folderId: string) {\n await this.entryTableManager.ensureTable();\n\n const { id: entryId } = parseIdentifier(id);\n\n await patchAllEntryRevisions(\n this.knex,\n this.entryTableManager.getTableName(),\n model,\n entryId,\n parsed => {\n parsed.location = { folderId };\n }\n );\n }\n}\n\nexport const SqlMoveEntry = MoveEntryStorageOperation.createImplementation({\n implementation: SqlMoveEntryImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlMoveEntryImpl","knexClient","entryTableManager","model","id","folderId","entryId","parseIdentifier","patchAllEntryRevisions","parsed","SqlMoveEntry","MoveEntryStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;;AAQA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEA,MAAM,QAAQE,KAAe,EAAEC,EAAU,EAAEC,QAAgB,EAAE;QACzD,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAM,EAAE,IAAIC,OAAO,EAAE,GAAGC,gBAAgBH;QAExC,MAAMI,uBACF,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,iBAAiB,CAAC,YAAY,IACnCL,OACAG,SACAG,CAAAA;YACIA,OAAO,QAAQ,GAAG;gBAAEJ;YAAS;QACjC;IAER;AACJ;AAEO,MAAMK,eAAeC,0BAA0B,oBAAoB,CAAC;IACvE,gBAAgBX;IAChB,cAAc;QAACY;QAAYC;KAAkB;AACjD"}
@@ -9,7 +9,7 @@ class SqlMoveToBinImpl {
9
9
  }
10
10
  async execute(model, params) {
11
11
  await this.entryTableManager.ensureTable();
12
- await patchAllEntryRevisions(this.knex, this.entryTableManager.getTableName(), params.entry.entryId, model.tenant, (parsed)=>{
12
+ await patchAllEntryRevisions(this.knex, this.entryTableManager.getTableName(), model, params.entry.entryId, (parsed)=>{
13
13
  const p = parsed;
14
14
  p["wbyDeleted"] = true;
15
15
  p["binOriginalFolderId"] = params.storageEntry.binOriginalFolderId ?? null;
@@ -1 +1 @@
1
- {"version":3,"file":"operations/entry/SqlMoveToBin.js","sources":["../../../src/operations/entry/SqlMoveToBin.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsMoveToBinParams,\n CmsModel\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { MoveToBinStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/MoveToBinStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport { patchAllEntryRevisions } from \"./queryHelpers.js\";\n\nclass SqlMoveToBinImpl implements MoveToBinStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n async execute(model: CmsModel, params: CmsEntryStorageOperationsMoveToBinParams) {\n await this.entryTableManager.ensureTable();\n\n await patchAllEntryRevisions(\n this.knex,\n this.entryTableManager.getTableName(),\n params.entry.entryId,\n model.tenant,\n parsed => {\n const p = parsed as unknown as Record<string, unknown>;\n p[\"wbyDeleted\"] = true;\n p[\"binOriginalFolderId\"] = params.storageEntry.binOriginalFolderId ?? null;\n p[\"location\"] = params.storageEntry.location ?? null;\n\n const fields = Object.keys(params.storageEntry);\n for (const field of fields) {\n if (field === \"createdOn\" || field === \"createdBy\") {\n continue;\n }\n if (\n (field.endsWith(\"On\") || field.endsWith(\"By\")) &&\n !field.startsWith(\"revision\")\n ) {\n p[field] = (params.storageEntry as Record<string, unknown>)[field];\n }\n }\n },\n {\n wbyDeleted: true\n }\n );\n }\n}\n\nexport const SqlMoveToBin = MoveToBinStorageOperation.createImplementation({\n implementation: SqlMoveToBinImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlMoveToBinImpl","knexClient","entryTableManager","model","params","patchAllEntryRevisions","parsed","p","fields","Object","field","SqlMoveToBin","MoveToBinStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;AAUA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEA,MAAM,QAAQE,KAAe,EAAEC,MAAgD,EAAE;QAC7E,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAMC,uBACF,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,iBAAiB,CAAC,YAAY,IACnCD,OAAO,KAAK,CAAC,OAAO,EACpBD,MAAM,MAAM,EACZG,CAAAA;YACI,MAAMC,IAAID;YACVC,CAAC,CAAC,aAAa,GAAG;YAClBA,CAAC,CAAC,sBAAsB,GAAGH,OAAO,YAAY,CAAC,mBAAmB,IAAI;YACtEG,CAAC,CAAC,WAAW,GAAGH,OAAO,YAAY,CAAC,QAAQ,IAAI;YAEhD,MAAMI,SAASC,OAAO,IAAI,CAACL,OAAO,YAAY;YAC9C,KAAK,MAAMM,SAASF,OAChB,IAAIE,AAAU,gBAAVA,SAAyBA,AAAU,gBAAVA,OAG7B;gBAAA,IACKA,AAAAA,CAAAA,MAAM,QAAQ,CAAC,SAASA,MAAM,QAAQ,CAAC,KAAI,KAC5C,CAACA,MAAM,UAAU,CAAC,aAElBH,CAAC,CAACG,MAAM,GAAIN,OAAO,YAAwC,CAACM,MAAM;YACtE;QAER,GACA;YACI,YAAY;QAChB;IAER;AACJ;AAEO,MAAMC,eAAeC,0BAA0B,oBAAoB,CAAC;IACvE,gBAAgBZ;IAChB,cAAc;QAACa;QAAYC;KAAkB;AACjD"}
1
+ {"version":3,"file":"operations/entry/SqlMoveToBin.js","sources":["../../../src/operations/entry/SqlMoveToBin.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsMoveToBinParams,\n CmsModel\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { MoveToBinStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/MoveToBinStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport { patchAllEntryRevisions } from \"./queryHelpers.js\";\n\nclass SqlMoveToBinImpl implements MoveToBinStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n async execute(model: CmsModel, params: CmsEntryStorageOperationsMoveToBinParams) {\n await this.entryTableManager.ensureTable();\n\n await patchAllEntryRevisions(\n this.knex,\n this.entryTableManager.getTableName(),\n model,\n params.entry.entryId,\n parsed => {\n const p = parsed as unknown as Record<string, unknown>;\n p[\"wbyDeleted\"] = true;\n p[\"binOriginalFolderId\"] = params.storageEntry.binOriginalFolderId ?? null;\n p[\"location\"] = params.storageEntry.location ?? null;\n\n const fields = Object.keys(params.storageEntry);\n for (const field of fields) {\n if (field === \"createdOn\" || field === \"createdBy\") {\n continue;\n }\n if (\n (field.endsWith(\"On\") || field.endsWith(\"By\")) &&\n !field.startsWith(\"revision\")\n ) {\n p[field] = (params.storageEntry as Record<string, unknown>)[field];\n }\n }\n },\n {\n wbyDeleted: true\n }\n );\n }\n}\n\nexport const SqlMoveToBin = MoveToBinStorageOperation.createImplementation({\n implementation: SqlMoveToBinImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlMoveToBinImpl","knexClient","entryTableManager","model","params","patchAllEntryRevisions","parsed","p","fields","Object","field","SqlMoveToBin","MoveToBinStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;AAUA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEA,MAAM,QAAQE,KAAe,EAAEC,MAAgD,EAAE;QAC7E,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAMC,uBACF,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,iBAAiB,CAAC,YAAY,IACnCF,OACAC,OAAO,KAAK,CAAC,OAAO,EACpBE,CAAAA;YACI,MAAMC,IAAID;YACVC,CAAC,CAAC,aAAa,GAAG;YAClBA,CAAC,CAAC,sBAAsB,GAAGH,OAAO,YAAY,CAAC,mBAAmB,IAAI;YACtEG,CAAC,CAAC,WAAW,GAAGH,OAAO,YAAY,CAAC,QAAQ,IAAI;YAEhD,MAAMI,SAASC,OAAO,IAAI,CAACL,OAAO,YAAY;YAC9C,KAAK,MAAMM,SAASF,OAChB,IAAIE,AAAU,gBAAVA,SAAyBA,AAAU,gBAAVA,OAG7B;gBAAA,IACKA,AAAAA,CAAAA,MAAM,QAAQ,CAAC,SAASA,MAAM,QAAQ,CAAC,KAAI,KAC5C,CAACA,MAAM,UAAU,CAAC,aAElBH,CAAC,CAACG,MAAM,GAAIN,OAAO,YAAwC,CAACM,MAAM;YACtE;QAER,GACA;YACI,YAAY;QAChB;IAER;AACJ;AAEO,MAAMC,eAAeC,0BAA0B,oBAAoB,CAAC;IACvE,gBAAgBZ;IAChB,cAAc;QAACa;QAAYC;KAAkB;AACjD"}
@@ -6,7 +6,7 @@ declare class SqlPublishEntryImpl implements PublishEntryStorageOperation.Interf
6
6
  private readonly entryTableManager;
7
7
  private readonly knex;
8
8
  constructor(knexClient: KnexClient.Interface, entryTableManager: EntryTableManager.Interface);
9
- private query;
9
+ private modelQuery;
10
10
  execute<T extends CmsEntryValues>(model: CmsModel, params: CmsEntryStorageOperationsPublishParams<T>): Promise<import("@webiny/api-headless-cms/types/types.js").CmsEntry<T>>;
11
11
  }
12
12
  export declare const SqlPublishEntry: typeof SqlPublishEntryImpl & {
@@ -2,38 +2,38 @@ import { PublishEntryStorageOperation } from "@webiny/api-headless-cms/features/
2
2
  import { KnexClient } from "@webiny/api-core-sql";
3
3
  import { EntryTableManager } from "../../features/entryTableManager/abstractions.js";
4
4
  import { entryToRow } from "./mappers.js";
5
- import { createEntryQuery, syncEntryToLatest } from "./queryHelpers.js";
5
+ import { createModelEntryQuery, syncEntryToLatest } from "./queryHelpers.js";
6
6
  class SqlPublishEntryImpl {
7
7
  constructor(knexClient, entryTableManager){
8
8
  this.entryTableManager = entryTableManager;
9
9
  this.knex = knexClient.client;
10
10
  }
11
- query() {
12
- return createEntryQuery(this.knex, this.entryTableManager.getTableName());
11
+ modelQuery(model) {
12
+ return createModelEntryQuery(this.knex, this.entryTableManager.getTableName(), model);
13
13
  }
14
14
  async execute(model, params) {
15
15
  await this.entryTableManager.ensureTable();
16
- const oldPublishedRows = await this.query().where("tenant", model.tenant).andWhere("entryId", params.entry.entryId).andWhere("isPublished", true);
16
+ const oldPublishedRows = await this.modelQuery(model).andWhere("entryId", params.entry.entryId).andWhere("isPublished", true);
17
17
  for (const row of oldPublishedRows){
18
18
  const parsed = JSON.parse(row.data);
19
19
  parsed.isPublished = false;
20
20
  parsed.status = "unpublished";
21
- await this.query().where("id", row.id).update({
21
+ await this.modelQuery(model).andWhere("id", row.id).update({
22
22
  isPublished: false,
23
23
  data: JSON.stringify(parsed)
24
24
  });
25
25
  }
26
- const existing = await this.query().where("id", params.storageEntry.id).first();
26
+ const existing = await this.modelQuery(model).andWhere("id", params.storageEntry.id).first();
27
27
  const se = params.storageEntry;
28
28
  se.isLatest = existing?.isLatest ?? se.isLatest;
29
29
  se.isPublished = true;
30
30
  const row = entryToRow(se);
31
31
  const { isLatest: _il, ...rowWithoutIsLatest } = row;
32
- await this.query().where("tenant", model.tenant).andWhere("id", params.storageEntry.id).update(rowWithoutIsLatest);
32
+ await this.modelQuery(model).andWhere("id", params.storageEntry.id).update(rowWithoutIsLatest);
33
33
  const liveValue = {
34
34
  version: params.entry.version
35
35
  };
36
- await syncEntryToLatest(this.knex, this.entryTableManager.getTableName(), se, (latest)=>{
36
+ await syncEntryToLatest(this.knex, this.entryTableManager.getTableName(), model, se, (latest)=>{
37
37
  latest.live = liveValue;
38
38
  });
39
39
  return params.entry;
@@ -1 +1 @@
1
- {"version":3,"file":"operations/entry/SqlPublishEntry.js","sources":["../../../src/operations/entry/SqlPublishEntry.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsPublishParams,\n CmsEntryValues,\n CmsModel,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { PublishEntryStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/PublishEntryStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport type { IEntryRow } from \"./types.js\";\nimport { entryToRow } from \"./mappers.js\";\nimport { createEntryQuery, syncEntryToLatest } from \"./queryHelpers.js\";\n\nclass SqlPublishEntryImpl implements PublishEntryStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n private query(): Knex.QueryBuilder<IEntryRow> {\n return createEntryQuery(this.knex, this.entryTableManager.getTableName());\n }\n\n async execute<T extends CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryStorageOperationsPublishParams<T>\n ) {\n await this.entryTableManager.ensureTable();\n\n const oldPublishedRows = await this.query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"entryId\", params.entry.entryId)\n .andWhere(\"isPublished\", true);\n\n for (const row of oldPublishedRows) {\n const parsed = JSON.parse(row.data);\n parsed.isPublished = false;\n parsed.status = \"unpublished\";\n\n await this.query()\n .where(\"id\", row.id)\n .update({ isPublished: false, data: JSON.stringify(parsed) });\n }\n\n const existing = await this.query().where(\"id\", params.storageEntry.id).first();\n const se = params.storageEntry as CmsStorageEntry;\n se.isLatest = existing?.isLatest ?? se.isLatest;\n se.isPublished = true;\n\n const row = entryToRow(se);\n const { isLatest: _il, ...rowWithoutIsLatest } = row;\n\n await this.query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"id\", params.storageEntry.id)\n .update(rowWithoutIsLatest);\n\n const liveValue = { version: params.entry.version };\n await syncEntryToLatest(this.knex, this.entryTableManager.getTableName(), se, latest => {\n latest.live = liveValue;\n });\n\n return params.entry;\n }\n}\n\nexport const SqlPublishEntry = PublishEntryStorageOperation.createImplementation({\n implementation: SqlPublishEntryImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlPublishEntryImpl","knexClient","entryTableManager","createEntryQuery","model","params","oldPublishedRows","row","parsed","JSON","existing","se","entryToRow","_il","rowWithoutIsLatest","liveValue","syncEntryToLatest","latest","SqlPublishEntry","PublishEntryStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;;AAcA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEQ,QAAsC;QAC1C,OAAOE,iBAAiB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY;IAC1E;IAEA,MAAM,QACFC,KAAe,EACfC,MAAiD,EACnD;QACE,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAMC,mBAAmB,MAAM,IAAI,CAAC,KAAK,GACpC,KAAK,CAAC,UAAUF,MAAM,MAAM,EAC5B,QAAQ,CAAC,WAAWC,OAAO,KAAK,CAAC,OAAO,EACxC,QAAQ,CAAC,eAAe;QAE7B,KAAK,MAAME,OAAOD,iBAAkB;YAChC,MAAME,SAASC,KAAK,KAAK,CAACF,IAAI,IAAI;YAClCC,OAAO,WAAW,GAAG;YACrBA,OAAO,MAAM,GAAG;YAEhB,MAAM,IAAI,CAAC,KAAK,GACX,KAAK,CAAC,MAAMD,IAAI,EAAE,EAClB,MAAM,CAAC;gBAAE,aAAa;gBAAO,MAAME,KAAK,SAAS,CAACD;YAAQ;QACnE;QAEA,MAAME,WAAW,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,MAAML,OAAO,YAAY,CAAC,EAAE,EAAE,KAAK;QAC7E,MAAMM,KAAKN,OAAO,YAAY;QAC9BM,GAAG,QAAQ,GAAGD,UAAU,YAAYC,GAAG,QAAQ;QAC/CA,GAAG,WAAW,GAAG;QAEjB,MAAMJ,MAAMK,WAAWD;QACvB,MAAM,EAAE,UAAUE,GAAG,EAAE,GAAGC,oBAAoB,GAAGP;QAEjD,MAAM,IAAI,CAAC,KAAK,GACX,KAAK,CAAC,UAAUH,MAAM,MAAM,EAC5B,QAAQ,CAAC,MAAMC,OAAO,YAAY,CAAC,EAAE,EACrC,MAAM,CAACS;QAEZ,MAAMC,YAAY;YAAE,SAASV,OAAO,KAAK,CAAC,OAAO;QAAC;QAClD,MAAMW,kBAAkB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,IAAIL,IAAIM,CAAAA;YAC1EA,OAAO,IAAI,GAAGF;QAClB;QAEA,OAAOV,OAAO,KAAK;IACvB;AACJ;AAEO,MAAMa,kBAAkBC,6BAA6B,oBAAoB,CAAC;IAC7E,gBAAgBnB;IAChB,cAAc;QAACoB;QAAYC;KAAkB;AACjD"}
1
+ {"version":3,"file":"operations/entry/SqlPublishEntry.js","sources":["../../../src/operations/entry/SqlPublishEntry.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsPublishParams,\n CmsEntryValues,\n CmsModel,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { PublishEntryStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/PublishEntryStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport type { IEntryRow } from \"./types.js\";\nimport { entryToRow } from \"./mappers.js\";\nimport { createModelEntryQuery, syncEntryToLatest } from \"./queryHelpers.js\";\n\nclass SqlPublishEntryImpl implements PublishEntryStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n private modelQuery(model: CmsModel): Knex.QueryBuilder<IEntryRow> {\n return createModelEntryQuery(this.knex, this.entryTableManager.getTableName(), model);\n }\n\n async execute<T extends CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryStorageOperationsPublishParams<T>\n ) {\n await this.entryTableManager.ensureTable();\n\n const oldPublishedRows = await this.modelQuery(model)\n .andWhere(\"entryId\", params.entry.entryId)\n .andWhere(\"isPublished\", true);\n\n for (const row of oldPublishedRows) {\n const parsed = JSON.parse(row.data);\n parsed.isPublished = false;\n parsed.status = \"unpublished\";\n\n await this.modelQuery(model)\n .andWhere(\"id\", row.id)\n .update({ isPublished: false, data: JSON.stringify(parsed) });\n }\n\n const existing = await this.modelQuery(model)\n .andWhere(\"id\", params.storageEntry.id)\n .first();\n const se = params.storageEntry as CmsStorageEntry;\n se.isLatest = existing?.isLatest ?? se.isLatest;\n se.isPublished = true;\n\n const row = entryToRow(se);\n const { isLatest: _il, ...rowWithoutIsLatest } = row;\n\n await this.modelQuery(model)\n .andWhere(\"id\", params.storageEntry.id)\n .update(rowWithoutIsLatest);\n\n const liveValue = { version: params.entry.version };\n await syncEntryToLatest(\n this.knex,\n this.entryTableManager.getTableName(),\n model,\n se,\n latest => {\n latest.live = liveValue;\n }\n );\n\n return params.entry;\n }\n}\n\nexport const SqlPublishEntry = PublishEntryStorageOperation.createImplementation({\n implementation: SqlPublishEntryImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlPublishEntryImpl","knexClient","entryTableManager","model","createModelEntryQuery","params","oldPublishedRows","row","parsed","JSON","existing","se","entryToRow","_il","rowWithoutIsLatest","liveValue","syncEntryToLatest","latest","SqlPublishEntry","PublishEntryStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;;AAcA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEQ,WAAWE,KAAe,EAAgC;QAC9D,OAAOC,sBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,IAAID;IACnF;IAEA,MAAM,QACFA,KAAe,EACfE,MAAiD,EACnD;QACE,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAMC,mBAAmB,MAAM,IAAI,CAAC,UAAU,CAACH,OAC1C,QAAQ,CAAC,WAAWE,OAAO,KAAK,CAAC,OAAO,EACxC,QAAQ,CAAC,eAAe;QAE7B,KAAK,MAAME,OAAOD,iBAAkB;YAChC,MAAME,SAASC,KAAK,KAAK,CAACF,IAAI,IAAI;YAClCC,OAAO,WAAW,GAAG;YACrBA,OAAO,MAAM,GAAG;YAEhB,MAAM,IAAI,CAAC,UAAU,CAACL,OACjB,QAAQ,CAAC,MAAMI,IAAI,EAAE,EACrB,MAAM,CAAC;gBAAE,aAAa;gBAAO,MAAME,KAAK,SAAS,CAACD;YAAQ;QACnE;QAEA,MAAME,WAAW,MAAM,IAAI,CAAC,UAAU,CAACP,OAClC,QAAQ,CAAC,MAAME,OAAO,YAAY,CAAC,EAAE,EACrC,KAAK;QACV,MAAMM,KAAKN,OAAO,YAAY;QAC9BM,GAAG,QAAQ,GAAGD,UAAU,YAAYC,GAAG,QAAQ;QAC/CA,GAAG,WAAW,GAAG;QAEjB,MAAMJ,MAAMK,WAAWD;QACvB,MAAM,EAAE,UAAUE,GAAG,EAAE,GAAGC,oBAAoB,GAAGP;QAEjD,MAAM,IAAI,CAAC,UAAU,CAACJ,OACjB,QAAQ,CAAC,MAAME,OAAO,YAAY,CAAC,EAAE,EACrC,MAAM,CAACS;QAEZ,MAAMC,YAAY;YAAE,SAASV,OAAO,KAAK,CAAC,OAAO;QAAC;QAClD,MAAMW,kBACF,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,iBAAiB,CAAC,YAAY,IACnCb,OACAQ,IACAM,CAAAA;YACIA,OAAO,IAAI,GAAGF;QAClB;QAGJ,OAAOV,OAAO,KAAK;IACvB;AACJ;AAEO,MAAMa,kBAAkBC,6BAA6B,oBAAoB,CAAC;IAC7E,gBAAgBnB;IAChB,cAAc;QAACoB;QAAYC;KAAkB;AACjD"}
@@ -9,7 +9,7 @@ class SqlRestoreFromBinImpl {
9
9
  }
10
10
  async execute(model, params) {
11
11
  await this.entryTableManager.ensureTable();
12
- await patchAllEntryRevisions(this.knex, this.entryTableManager.getTableName(), params.entry.entryId, model.tenant, (parsed)=>{
12
+ await patchAllEntryRevisions(this.knex, this.entryTableManager.getTableName(), model, params.entry.entryId, (parsed)=>{
13
13
  const p = parsed;
14
14
  p["wbyDeleted"] = false;
15
15
  p["binOriginalFolderId"] = null;
@@ -1 +1 @@
1
- {"version":3,"file":"operations/entry/SqlRestoreFromBin.js","sources":["../../../src/operations/entry/SqlRestoreFromBin.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsRestoreFromBinParams,\n CmsEntryValues,\n CmsModel\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { RestoreFromBinStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/RestoreFromBinStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport { patchAllEntryRevisions } from \"./queryHelpers.js\";\n\nclass SqlRestoreFromBinImpl implements RestoreFromBinStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n async execute<T extends CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryStorageOperationsRestoreFromBinParams<T>\n ) {\n await this.entryTableManager.ensureTable();\n\n await patchAllEntryRevisions(\n this.knex,\n this.entryTableManager.getTableName(),\n params.entry.entryId,\n model.tenant,\n parsed => {\n const p = parsed as unknown as Record<string, unknown>;\n p[\"wbyDeleted\"] = false;\n p[\"binOriginalFolderId\"] = null;\n p[\"location\"] = params.storageEntry.location ?? null;\n\n const fields = Object.keys(params.storageEntry);\n for (const field of fields) {\n if (field === \"createdOn\" || field === \"createdBy\") {\n continue;\n }\n if (\n (field.endsWith(\"On\") || field.endsWith(\"By\")) &&\n !field.startsWith(\"revision\")\n ) {\n p[field] = (params.storageEntry as Record<string, unknown>)[field];\n }\n }\n },\n { wbyDeleted: false }\n );\n\n return params.entry;\n }\n}\n\nexport const SqlRestoreFromBin = RestoreFromBinStorageOperation.createImplementation({\n implementation: SqlRestoreFromBinImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlRestoreFromBinImpl","knexClient","entryTableManager","model","params","patchAllEntryRevisions","parsed","p","fields","Object","field","SqlRestoreFromBin","RestoreFromBinStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;AAWA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEA,MAAM,QACFE,KAAe,EACfC,MAAwD,EAC1D;QACE,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAMC,uBACF,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,iBAAiB,CAAC,YAAY,IACnCD,OAAO,KAAK,CAAC,OAAO,EACpBD,MAAM,MAAM,EACZG,CAAAA;YACI,MAAMC,IAAID;YACVC,CAAC,CAAC,aAAa,GAAG;YAClBA,CAAC,CAAC,sBAAsB,GAAG;YAC3BA,CAAC,CAAC,WAAW,GAAGH,OAAO,YAAY,CAAC,QAAQ,IAAI;YAEhD,MAAMI,SAASC,OAAO,IAAI,CAACL,OAAO,YAAY;YAC9C,KAAK,MAAMM,SAASF,OAChB,IAAIE,AAAU,gBAAVA,SAAyBA,AAAU,gBAAVA,OAG7B;gBAAA,IACKA,AAAAA,CAAAA,MAAM,QAAQ,CAAC,SAASA,MAAM,QAAQ,CAAC,KAAI,KAC5C,CAACA,MAAM,UAAU,CAAC,aAElBH,CAAC,CAACG,MAAM,GAAIN,OAAO,YAAwC,CAACM,MAAM;YACtE;QAER,GACA;YAAE,YAAY;QAAM;QAGxB,OAAON,OAAO,KAAK;IACvB;AACJ;AAEO,MAAMO,oBAAoBC,+BAA+B,oBAAoB,CAAC;IACjF,gBAAgBZ;IAChB,cAAc;QAACa;QAAYC;KAAkB;AACjD"}
1
+ {"version":3,"file":"operations/entry/SqlRestoreFromBin.js","sources":["../../../src/operations/entry/SqlRestoreFromBin.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsRestoreFromBinParams,\n CmsEntryValues,\n CmsModel\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { RestoreFromBinStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/RestoreFromBinStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport { patchAllEntryRevisions } from \"./queryHelpers.js\";\n\nclass SqlRestoreFromBinImpl implements RestoreFromBinStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n async execute<T extends CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryStorageOperationsRestoreFromBinParams<T>\n ) {\n await this.entryTableManager.ensureTable();\n\n await patchAllEntryRevisions(\n this.knex,\n this.entryTableManager.getTableName(),\n model,\n params.entry.entryId,\n parsed => {\n const p = parsed as unknown as Record<string, unknown>;\n p[\"wbyDeleted\"] = false;\n p[\"binOriginalFolderId\"] = null;\n p[\"location\"] = params.storageEntry.location ?? null;\n\n const fields = Object.keys(params.storageEntry);\n for (const field of fields) {\n if (field === \"createdOn\" || field === \"createdBy\") {\n continue;\n }\n if (\n (field.endsWith(\"On\") || field.endsWith(\"By\")) &&\n !field.startsWith(\"revision\")\n ) {\n p[field] = (params.storageEntry as Record<string, unknown>)[field];\n }\n }\n },\n { wbyDeleted: false }\n );\n\n return params.entry;\n }\n}\n\nexport const SqlRestoreFromBin = RestoreFromBinStorageOperation.createImplementation({\n implementation: SqlRestoreFromBinImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlRestoreFromBinImpl","knexClient","entryTableManager","model","params","patchAllEntryRevisions","parsed","p","fields","Object","field","SqlRestoreFromBin","RestoreFromBinStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;AAWA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEA,MAAM,QACFE,KAAe,EACfC,MAAwD,EAC1D;QACE,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAMC,uBACF,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,iBAAiB,CAAC,YAAY,IACnCF,OACAC,OAAO,KAAK,CAAC,OAAO,EACpBE,CAAAA;YACI,MAAMC,IAAID;YACVC,CAAC,CAAC,aAAa,GAAG;YAClBA,CAAC,CAAC,sBAAsB,GAAG;YAC3BA,CAAC,CAAC,WAAW,GAAGH,OAAO,YAAY,CAAC,QAAQ,IAAI;YAEhD,MAAMI,SAASC,OAAO,IAAI,CAACL,OAAO,YAAY;YAC9C,KAAK,MAAMM,SAASF,OAChB,IAAIE,AAAU,gBAAVA,SAAyBA,AAAU,gBAAVA,OAG7B;gBAAA,IACKA,AAAAA,CAAAA,MAAM,QAAQ,CAAC,SAASA,MAAM,QAAQ,CAAC,KAAI,KAC5C,CAACA,MAAM,UAAU,CAAC,aAElBH,CAAC,CAACG,MAAM,GAAIN,OAAO,YAAwC,CAACM,MAAM;YACtE;QAER,GACA;YAAE,YAAY;QAAM;QAGxB,OAAON,OAAO,KAAK;IACvB;AACJ;AAEO,MAAMO,oBAAoBC,+BAA+B,oBAAoB,CAAC;IACjF,gBAAgBZ;IAChB,cAAc;QAACa;QAAYC;KAAkB;AACjD"}
@@ -6,7 +6,7 @@ declare class SqlUnpublishEntryImpl implements UnpublishEntryStorageOperation.In
6
6
  private readonly entryTableManager;
7
7
  private readonly knex;
8
8
  constructor(knexClient: KnexClient.Interface, entryTableManager: EntryTableManager.Interface);
9
- private query;
9
+ private modelQuery;
10
10
  execute<T extends CmsEntryValues>(model: CmsModel, params: CmsEntryStorageOperationsUnpublishParams<T>): Promise<import("@webiny/api-headless-cms/types/types.js").CmsEntry<T>>;
11
11
  }
12
12
  export declare const SqlUnpublishEntry: typeof SqlUnpublishEntryImpl & {
@@ -2,25 +2,25 @@ import { UnpublishEntryStorageOperation } from "@webiny/api-headless-cms/feature
2
2
  import { KnexClient } from "@webiny/api-core-sql";
3
3
  import { EntryTableManager } from "../../features/entryTableManager/abstractions.js";
4
4
  import { entryToRow } from "./mappers.js";
5
- import { createEntryQuery, syncEntryToLatest } from "./queryHelpers.js";
5
+ import { createModelEntryQuery, syncEntryToLatest } from "./queryHelpers.js";
6
6
  class SqlUnpublishEntryImpl {
7
7
  constructor(knexClient, entryTableManager){
8
8
  this.entryTableManager = entryTableManager;
9
9
  this.knex = knexClient.client;
10
10
  }
11
- query() {
12
- return createEntryQuery(this.knex, this.entryTableManager.getTableName());
11
+ modelQuery(model) {
12
+ return createModelEntryQuery(this.knex, this.entryTableManager.getTableName(), model);
13
13
  }
14
14
  async execute(model, params) {
15
15
  await this.entryTableManager.ensureTable();
16
- const existing = await this.query().where("id", params.storageEntry.id).first();
16
+ const existing = await this.modelQuery(model).andWhere("id", params.storageEntry.id).first();
17
17
  const se = params.storageEntry;
18
18
  se.isLatest = existing?.isLatest ?? se.isLatest;
19
19
  se.isPublished = false;
20
20
  const row = entryToRow(se);
21
21
  const { isLatest: _il, ...rowWithoutIsLatest } = row;
22
- await this.query().where("tenant", model.tenant).andWhere("id", params.storageEntry.id).update(rowWithoutIsLatest);
23
- await syncEntryToLatest(this.knex, this.entryTableManager.getTableName(), se, (latest)=>{
22
+ await this.modelQuery(model).andWhere("id", params.storageEntry.id).update(rowWithoutIsLatest);
23
+ await syncEntryToLatest(this.knex, this.entryTableManager.getTableName(), model, se, (latest)=>{
24
24
  latest.live = null;
25
25
  });
26
26
  return params.entry;
@@ -1 +1 @@
1
- {"version":3,"file":"operations/entry/SqlUnpublishEntry.js","sources":["../../../src/operations/entry/SqlUnpublishEntry.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsUnpublishParams,\n CmsEntryValues,\n CmsModel,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { UnpublishEntryStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/UnpublishEntryStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport type { IEntryRow } from \"./types.js\";\nimport { entryToRow } from \"./mappers.js\";\nimport { createEntryQuery, syncEntryToLatest } from \"./queryHelpers.js\";\n\nclass SqlUnpublishEntryImpl implements UnpublishEntryStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n private query(): Knex.QueryBuilder<IEntryRow> {\n return createEntryQuery(this.knex, this.entryTableManager.getTableName());\n }\n\n async execute<T extends CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryStorageOperationsUnpublishParams<T>\n ) {\n await this.entryTableManager.ensureTable();\n\n const existing = await this.query().where(\"id\", params.storageEntry.id).first();\n const se = params.storageEntry as CmsStorageEntry;\n se.isLatest = existing?.isLatest ?? se.isLatest;\n se.isPublished = false;\n\n const row = entryToRow(se);\n const { isLatest: _il, ...rowWithoutIsLatest } = row;\n\n await this.query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"id\", params.storageEntry.id)\n .update(rowWithoutIsLatest);\n\n await syncEntryToLatest(this.knex, this.entryTableManager.getTableName(), se, latest => {\n latest.live = null;\n });\n\n return params.entry;\n }\n}\n\nexport const SqlUnpublishEntry = UnpublishEntryStorageOperation.createImplementation({\n implementation: SqlUnpublishEntryImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlUnpublishEntryImpl","knexClient","entryTableManager","createEntryQuery","model","params","existing","se","row","entryToRow","_il","rowWithoutIsLatest","syncEntryToLatest","latest","SqlUnpublishEntry","UnpublishEntryStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;;AAcA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEQ,QAAsC;QAC1C,OAAOE,iBAAiB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY;IAC1E;IAEA,MAAM,QACFC,KAAe,EACfC,MAAmD,EACrD;QACE,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAMC,WAAW,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,MAAMD,OAAO,YAAY,CAAC,EAAE,EAAE,KAAK;QAC7E,MAAME,KAAKF,OAAO,YAAY;QAC9BE,GAAG,QAAQ,GAAGD,UAAU,YAAYC,GAAG,QAAQ;QAC/CA,GAAG,WAAW,GAAG;QAEjB,MAAMC,MAAMC,WAAWF;QACvB,MAAM,EAAE,UAAUG,GAAG,EAAE,GAAGC,oBAAoB,GAAGH;QAEjD,MAAM,IAAI,CAAC,KAAK,GACX,KAAK,CAAC,UAAUJ,MAAM,MAAM,EAC5B,QAAQ,CAAC,MAAMC,OAAO,YAAY,CAAC,EAAE,EACrC,MAAM,CAACM;QAEZ,MAAMC,kBAAkB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,IAAIL,IAAIM,CAAAA;YAC1EA,OAAO,IAAI,GAAG;QAClB;QAEA,OAAOR,OAAO,KAAK;IACvB;AACJ;AAEO,MAAMS,oBAAoBC,+BAA+B,oBAAoB,CAAC;IACjF,gBAAgBf;IAChB,cAAc;QAACgB;QAAYC;KAAkB;AACjD"}
1
+ {"version":3,"file":"operations/entry/SqlUnpublishEntry.js","sources":["../../../src/operations/entry/SqlUnpublishEntry.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsUnpublishParams,\n CmsEntryValues,\n CmsModel,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { UnpublishEntryStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/UnpublishEntryStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport type { IEntryRow } from \"./types.js\";\nimport { entryToRow } from \"./mappers.js\";\nimport { createModelEntryQuery, syncEntryToLatest } from \"./queryHelpers.js\";\n\nclass SqlUnpublishEntryImpl implements UnpublishEntryStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n private modelQuery(model: CmsModel): Knex.QueryBuilder<IEntryRow> {\n return createModelEntryQuery(this.knex, this.entryTableManager.getTableName(), model);\n }\n\n async execute<T extends CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryStorageOperationsUnpublishParams<T>\n ) {\n await this.entryTableManager.ensureTable();\n\n const existing = await this.modelQuery(model)\n .andWhere(\"id\", params.storageEntry.id)\n .first();\n const se = params.storageEntry as CmsStorageEntry;\n se.isLatest = existing?.isLatest ?? se.isLatest;\n se.isPublished = false;\n\n const row = entryToRow(se);\n const { isLatest: _il, ...rowWithoutIsLatest } = row;\n\n await this.modelQuery(model)\n .andWhere(\"id\", params.storageEntry.id)\n .update(rowWithoutIsLatest);\n\n await syncEntryToLatest(\n this.knex,\n this.entryTableManager.getTableName(),\n model,\n se,\n latest => {\n latest.live = null;\n }\n );\n\n return params.entry;\n }\n}\n\nexport const SqlUnpublishEntry = UnpublishEntryStorageOperation.createImplementation({\n implementation: SqlUnpublishEntryImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlUnpublishEntryImpl","knexClient","entryTableManager","model","createModelEntryQuery","params","existing","se","row","entryToRow","_il","rowWithoutIsLatest","syncEntryToLatest","latest","SqlUnpublishEntry","UnpublishEntryStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;;AAcA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEQ,WAAWE,KAAe,EAAgC;QAC9D,OAAOC,sBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,IAAID;IACnF;IAEA,MAAM,QACFA,KAAe,EACfE,MAAmD,EACrD;QACE,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAMC,WAAW,MAAM,IAAI,CAAC,UAAU,CAACH,OAClC,QAAQ,CAAC,MAAME,OAAO,YAAY,CAAC,EAAE,EACrC,KAAK;QACV,MAAME,KAAKF,OAAO,YAAY;QAC9BE,GAAG,QAAQ,GAAGD,UAAU,YAAYC,GAAG,QAAQ;QAC/CA,GAAG,WAAW,GAAG;QAEjB,MAAMC,MAAMC,WAAWF;QACvB,MAAM,EAAE,UAAUG,GAAG,EAAE,GAAGC,oBAAoB,GAAGH;QAEjD,MAAM,IAAI,CAAC,UAAU,CAACL,OACjB,QAAQ,CAAC,MAAME,OAAO,YAAY,CAAC,EAAE,EACrC,MAAM,CAACM;QAEZ,MAAMC,kBACF,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,iBAAiB,CAAC,YAAY,IACnCT,OACAI,IACAM,CAAAA;YACIA,OAAO,IAAI,GAAG;QAClB;QAGJ,OAAOR,OAAO,KAAK;IACvB;AACJ;AAEO,MAAMS,oBAAoBC,+BAA+B,oBAAoB,CAAC;IACjF,gBAAgBf;IAChB,cAAc;QAACgB;QAAYC;KAAkB;AACjD"}
@@ -6,7 +6,7 @@ declare class SqlUpdateEntryImpl implements UpdateEntryStorageOperation.Interfac
6
6
  private readonly entryTableManager;
7
7
  private readonly knex;
8
8
  constructor(knexClient: KnexClient.Interface, entryTableManager: EntryTableManager.Interface);
9
- private query;
9
+ private modelQuery;
10
10
  execute<T extends CmsEntryValues>(model: CmsModel, params: CmsEntryStorageOperationsUpdateParams<T>): Promise<import("@webiny/api-headless-cms/types/types.js").CmsEntry<T>>;
11
11
  }
12
12
  export declare const SqlUpdateEntry: typeof SqlUpdateEntryImpl & {
@@ -2,25 +2,25 @@ import { UpdateEntryStorageOperation } from "@webiny/api-headless-cms/features/s
2
2
  import { KnexClient } from "@webiny/api-core-sql";
3
3
  import { EntryTableManager } from "../../features/entryTableManager/abstractions.js";
4
4
  import { entryToRow } from "./mappers.js";
5
- import { createEntryQuery, syncEntryToLatest } from "./queryHelpers.js";
5
+ import { createModelEntryQuery, syncEntryToLatest } from "./queryHelpers.js";
6
6
  class SqlUpdateEntryImpl {
7
7
  constructor(knexClient, entryTableManager){
8
8
  this.entryTableManager = entryTableManager;
9
9
  this.knex = knexClient.client;
10
10
  }
11
- query() {
12
- return createEntryQuery(this.knex, this.entryTableManager.getTableName());
11
+ modelQuery(model) {
12
+ return createModelEntryQuery(this.knex, this.entryTableManager.getTableName(), model);
13
13
  }
14
14
  async execute(model, params) {
15
15
  await this.entryTableManager.ensureTable();
16
- const existing = await this.query().where("id", params.storageEntry.id).first();
16
+ const existing = await this.modelQuery(model).andWhere("id", params.storageEntry.id).first();
17
17
  const se = params.storageEntry;
18
18
  se.isLatest = existing?.isLatest ?? se.isLatest;
19
19
  se.isPublished = existing?.isPublished ?? se.isPublished;
20
20
  const row = entryToRow(se);
21
21
  const { isLatest: _il, isPublished: _ip, ...rowWithoutFlags } = row;
22
- await this.query().where("tenant", model.tenant).andWhere("id", params.storageEntry.id).update(rowWithoutFlags);
23
- await syncEntryToLatest(this.knex, this.entryTableManager.getTableName(), se);
22
+ await this.modelQuery(model).andWhere("id", params.storageEntry.id).update(rowWithoutFlags);
23
+ await syncEntryToLatest(this.knex, this.entryTableManager.getTableName(), model, se);
24
24
  return params.entry;
25
25
  }
26
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"operations/entry/SqlUpdateEntry.js","sources":["../../../src/operations/entry/SqlUpdateEntry.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsUpdateParams,\n CmsEntryValues,\n CmsModel,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { UpdateEntryStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/UpdateEntryStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport type { IEntryRow } from \"./types.js\";\nimport { entryToRow } from \"./mappers.js\";\nimport { createEntryQuery, syncEntryToLatest } from \"./queryHelpers.js\";\n\nclass SqlUpdateEntryImpl implements UpdateEntryStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n private query(): Knex.QueryBuilder<IEntryRow> {\n return createEntryQuery(this.knex, this.entryTableManager.getTableName());\n }\n\n async execute<T extends CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryStorageOperationsUpdateParams<T>\n ) {\n await this.entryTableManager.ensureTable();\n\n const existing = await this.query().where(\"id\", params.storageEntry.id).first();\n const se = params.storageEntry as CmsStorageEntry;\n se.isLatest = existing?.isLatest ?? se.isLatest;\n se.isPublished = existing?.isPublished ?? se.isPublished;\n\n const row = entryToRow(se);\n const { isLatest: _il, isPublished: _ip, ...rowWithoutFlags } = row;\n\n await this.query()\n .where(\"tenant\", model.tenant)\n .andWhere(\"id\", params.storageEntry.id)\n .update(rowWithoutFlags);\n\n await syncEntryToLatest(this.knex, this.entryTableManager.getTableName(), se);\n\n return params.entry;\n }\n}\n\nexport const SqlUpdateEntry = UpdateEntryStorageOperation.createImplementation({\n implementation: SqlUpdateEntryImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlUpdateEntryImpl","knexClient","entryTableManager","createEntryQuery","model","params","existing","se","row","entryToRow","_il","_ip","rowWithoutFlags","syncEntryToLatest","SqlUpdateEntry","UpdateEntryStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;;AAcA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEQ,QAAsC;QAC1C,OAAOE,iBAAiB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY;IAC1E;IAEA,MAAM,QACFC,KAAe,EACfC,MAAgD,EAClD;QACE,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAMC,WAAW,MAAM,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,MAAMD,OAAO,YAAY,CAAC,EAAE,EAAE,KAAK;QAC7E,MAAME,KAAKF,OAAO,YAAY;QAC9BE,GAAG,QAAQ,GAAGD,UAAU,YAAYC,GAAG,QAAQ;QAC/CA,GAAG,WAAW,GAAGD,UAAU,eAAeC,GAAG,WAAW;QAExD,MAAMC,MAAMC,WAAWF;QACvB,MAAM,EAAE,UAAUG,GAAG,EAAE,aAAaC,GAAG,EAAE,GAAGC,iBAAiB,GAAGJ;QAEhE,MAAM,IAAI,CAAC,KAAK,GACX,KAAK,CAAC,UAAUJ,MAAM,MAAM,EAC5B,QAAQ,CAAC,MAAMC,OAAO,YAAY,CAAC,EAAE,EACrC,MAAM,CAACO;QAEZ,MAAMC,kBAAkB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,IAAIN;QAE1E,OAAOF,OAAO,KAAK;IACvB;AACJ;AAEO,MAAMS,iBAAiBC,4BAA4B,oBAAoB,CAAC;IAC3E,gBAAgBf;IAChB,cAAc;QAACgB;QAAYC;KAAkB;AACjD"}
1
+ {"version":3,"file":"operations/entry/SqlUpdateEntry.js","sources":["../../../src/operations/entry/SqlUpdateEntry.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntryStorageOperationsUpdateParams,\n CmsEntryValues,\n CmsModel,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { UpdateEntryStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/entry/UpdateEntryStorageOperation.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\nimport { EntryTableManager } from \"~/features/entryTableManager/abstractions.js\";\nimport type { IEntryRow } from \"./types.js\";\nimport { entryToRow } from \"./mappers.js\";\nimport { createModelEntryQuery, syncEntryToLatest } from \"./queryHelpers.js\";\n\nclass SqlUpdateEntryImpl implements UpdateEntryStorageOperation.Interface {\n private readonly knex: Knex;\n\n public constructor(\n knexClient: KnexClient.Interface,\n private readonly entryTableManager: EntryTableManager.Interface\n ) {\n this.knex = knexClient.client;\n }\n\n private modelQuery(model: CmsModel): Knex.QueryBuilder<IEntryRow> {\n return createModelEntryQuery(this.knex, this.entryTableManager.getTableName(), model);\n }\n\n async execute<T extends CmsEntryValues>(\n model: CmsModel,\n params: CmsEntryStorageOperationsUpdateParams<T>\n ) {\n await this.entryTableManager.ensureTable();\n\n const existing = await this.modelQuery(model)\n .andWhere(\"id\", params.storageEntry.id)\n .first();\n const se = params.storageEntry as CmsStorageEntry;\n se.isLatest = existing?.isLatest ?? se.isLatest;\n se.isPublished = existing?.isPublished ?? se.isPublished;\n\n const row = entryToRow(se);\n const { isLatest: _il, isPublished: _ip, ...rowWithoutFlags } = row;\n\n await this.modelQuery(model).andWhere(\"id\", params.storageEntry.id).update(rowWithoutFlags);\n\n await syncEntryToLatest(this.knex, this.entryTableManager.getTableName(), model, se);\n\n return params.entry;\n }\n}\n\nexport const SqlUpdateEntry = UpdateEntryStorageOperation.createImplementation({\n implementation: SqlUpdateEntryImpl,\n dependencies: [KnexClient, EntryTableManager]\n});\n"],"names":["SqlUpdateEntryImpl","knexClient","entryTableManager","model","createModelEntryQuery","params","existing","se","row","entryToRow","_il","_ip","rowWithoutFlags","syncEntryToLatest","SqlUpdateEntry","UpdateEntryStorageOperation","KnexClient","EntryTableManager"],"mappings":";;;;;AAcA,MAAMA;IAGF,YACIC,UAAgC,EACfC,iBAA8C,CACjE;aADmBA,iBAAiB,GAAjBA;QAEjB,IAAI,CAAC,IAAI,GAAGD,WAAW,MAAM;IACjC;IAEQ,WAAWE,KAAe,EAAgC;QAC9D,OAAOC,sBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,IAAID;IACnF;IAEA,MAAM,QACFA,KAAe,EACfE,MAAgD,EAClD;QACE,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW;QAExC,MAAMC,WAAW,MAAM,IAAI,CAAC,UAAU,CAACH,OAClC,QAAQ,CAAC,MAAME,OAAO,YAAY,CAAC,EAAE,EACrC,KAAK;QACV,MAAME,KAAKF,OAAO,YAAY;QAC9BE,GAAG,QAAQ,GAAGD,UAAU,YAAYC,GAAG,QAAQ;QAC/CA,GAAG,WAAW,GAAGD,UAAU,eAAeC,GAAG,WAAW;QAExD,MAAMC,MAAMC,WAAWF;QACvB,MAAM,EAAE,UAAUG,GAAG,EAAE,aAAaC,GAAG,EAAE,GAAGC,iBAAiB,GAAGJ;QAEhE,MAAM,IAAI,CAAC,UAAU,CAACL,OAAO,QAAQ,CAAC,MAAME,OAAO,YAAY,CAAC,EAAE,EAAE,MAAM,CAACO;QAE3E,MAAMC,kBAAkB,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,YAAY,IAAIV,OAAOI;QAEjF,OAAOF,OAAO,KAAK;IACvB;AACJ;AAEO,MAAMS,iBAAiBC,4BAA4B,oBAAoB,CAAC;IAC3E,gBAAgBf;IAChB,cAAc;QAACgB;QAAYC;KAAkB;AACjD"}
@@ -7,8 +7,13 @@ import type { FieldFilterPathRegistry, FieldFilterValueTransformRegistry, FieldF
7
7
  import type { IEntryRow } from "./types.js";
8
8
  export declare const MAX_LIST_LIMIT = 1000000;
9
9
  export declare const createEntryQuery: (knex: Knex, tableName: string) => Knex.QueryBuilder<IEntryRow>;
10
- export declare const syncEntryToLatest: (knex: Knex, tableName: string, entry: CmsStorageEntry, extraPatch?: (latest: CmsEntry) => void) => Promise<void>;
11
- export declare const patchAllEntryRevisions: (knex: Knex, tableName: string, entryId: string, tenant: string, patch: (entry: CmsEntry) => void, columnUpdates?: Partial<IEntryRow>) => Promise<void>;
10
+ export interface IEntryQueryModel {
11
+ tenant: string;
12
+ modelId: string;
13
+ }
14
+ export declare const createModelEntryQuery: (knex: Knex, tableName: string, model: IEntryQueryModel) => Knex.QueryBuilder<IEntryRow>;
15
+ export declare const syncEntryToLatest: (knex: Knex, tableName: string, model: IEntryQueryModel, entry: CmsStorageEntry, extraPatch?: (latest: CmsEntry) => void) => Promise<void>;
16
+ export declare const patchAllEntryRevisions: (knex: Knex, tableName: string, model: IEntryQueryModel, entryId: string, patch: (entry: CmsEntry) => void, columnUpdates?: Partial<IEntryRow>) => Promise<void>;
12
17
  export interface IListEntriesDeps {
13
18
  knex: Knex;
14
19
  tableName: string;
@@ -3,19 +3,20 @@ import { createFields, createStorageTransformCallable, filter, sort } from "@web
3
3
  import { mergeEntryLevelMeta, rowToEntry } from "./mappers.js";
4
4
  const MAX_LIST_LIMIT = 1000000;
5
5
  const createEntryQuery = (knex, tableName)=>knex(tableName);
6
- const syncEntryToLatest = async (knex, tableName, entry, extraPatch)=>{
6
+ const createModelEntryQuery = (knex, tableName, model)=>createEntryQuery(knex, tableName).where("tenant", model.tenant).andWhere("modelId", model.modelId);
7
+ const syncEntryToLatest = async (knex, tableName, model, entry, extraPatch)=>{
7
8
  if (entry.isLatest) return;
8
- const latestRow = await createEntryQuery(knex, tableName).where("entryId", entry.entryId).andWhere("isLatest", true).first();
9
+ const latestRow = await createModelEntryQuery(knex, tableName, model).andWhere("entryId", entry.entryId).andWhere("isLatest", true).first();
9
10
  if (!latestRow) return;
10
11
  const latest = JSON.parse(latestRow.data);
11
12
  const merged = mergeEntryLevelMeta(entry, latest);
12
13
  if (extraPatch) extraPatch(merged);
13
- await createEntryQuery(knex, tableName).where("id", latestRow.id).update({
14
+ await createModelEntryQuery(knex, tableName, model).andWhere("id", latestRow.id).update({
14
15
  data: JSON.stringify(merged)
15
16
  });
16
17
  };
17
- const patchAllEntryRevisions = async (knex, tableName, entryId, tenant, patch, columnUpdates)=>{
18
- const rows = await createEntryQuery(knex, tableName).where("tenant", tenant).where("entryId", entryId);
18
+ const patchAllEntryRevisions = async (knex, tableName, model, entryId, patch, columnUpdates)=>{
19
+ const rows = await createModelEntryQuery(knex, tableName, model).andWhere("entryId", entryId);
19
20
  if (0 === rows.length) return;
20
21
  const cases = rows.map((row)=>{
21
22
  const parsed = JSON.parse(row.data);
@@ -32,7 +33,7 @@ const patchAllEntryRevisions = async (knex, tableName, entryId, tenant, patch, c
32
33
  ])),
33
34
  ...columnUpdates
34
35
  };
35
- await createEntryQuery(knex, tableName).where("tenant", tenant).where("entryId", entryId).update(update);
36
+ await createModelEntryQuery(knex, tableName, model).andWhere("entryId", entryId).update(update);
36
37
  };
37
38
  const listEntries = async (deps, initialModel, params)=>{
38
39
  const model = deps.storageModelProvider.getModel(initialModel);
@@ -100,6 +101,6 @@ const listEntries = async (deps, initialModel, params)=>{
100
101
  items: slicedItems
101
102
  };
102
103
  };
103
- export { MAX_LIST_LIMIT, createEntryQuery, listEntries, patchAllEntryRevisions, syncEntryToLatest };
104
+ export { MAX_LIST_LIMIT, createEntryQuery, createModelEntryQuery, listEntries, patchAllEntryRevisions, syncEntryToLatest };
104
105
 
105
106
  //# sourceMappingURL=queryHelpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"operations/entry/queryHelpers.js","sources":["../../../src/operations/entry/queryHelpers.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntry,\n CmsEntryListWhere,\n CmsEntryStorageOperationsListParams,\n CmsEntryStorageOperationsListResponse,\n CmsEntryValues,\n CmsModel,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { decodeCursor, encodeCursor } from \"@webiny/utils\";\nimport type { StorageTransformRegistry } from \"@webiny/api-headless-cms/exports/api/cms/storage.js\";\nimport type { CmsStorageModelProvider } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport type { ValueFilterRegistry } from \"@webiny/db-utils\";\nimport {\n createFields,\n filter,\n sort,\n createStorageTransformCallable\n} from \"@webiny/api-headless-cms-storage\";\nimport type {\n FieldFilterPathRegistry,\n FieldFilterValueTransformRegistry,\n FieldFilterCreateRegistry,\n FieldSortingRegistry\n} from \"@webiny/api-headless-cms-storage\";\nimport type { IEntryRow } from \"./types.js\";\nimport { rowToEntry, mergeEntryLevelMeta } from \"./mappers.js\";\n\nexport const MAX_LIST_LIMIT = 1000000;\n\nexport const createEntryQuery = (knex: Knex, tableName: string): Knex.QueryBuilder<IEntryRow> => {\n return knex<IEntryRow>(tableName);\n};\n\nexport const syncEntryToLatest = async (\n knex: Knex,\n tableName: string,\n entry: CmsStorageEntry,\n extraPatch?: (latest: CmsEntry) => void\n): Promise<void> => {\n if (entry.isLatest) {\n return;\n }\n\n const latestRow = await createEntryQuery(knex, tableName)\n .where(\"entryId\", entry.entryId)\n .andWhere(\"isLatest\", true)\n .first();\n\n if (!latestRow) {\n return;\n }\n\n const latest = JSON.parse(latestRow.data);\n const merged = mergeEntryLevelMeta(entry, latest);\n\n if (extraPatch) {\n extraPatch(merged);\n }\n\n await createEntryQuery(knex, tableName)\n .where(\"id\", latestRow.id)\n .update({ data: JSON.stringify(merged) });\n};\n\nexport const patchAllEntryRevisions = async (\n knex: Knex,\n tableName: string,\n entryId: string,\n tenant: string,\n patch: (entry: CmsEntry) => void,\n columnUpdates?: Partial<IEntryRow>\n): Promise<void> => {\n const rows = await createEntryQuery(knex, tableName)\n .where(\"tenant\", tenant)\n .where(\"entryId\", entryId);\n\n if (rows.length === 0) {\n return;\n }\n\n const cases: Array<{ id: string; data: string }> = rows.map((row: IEntryRow) => {\n const parsed = JSON.parse(row.data);\n patch(parsed);\n return { id: row.id, data: JSON.stringify(parsed) };\n });\n\n const update: Record<string, unknown> = {\n data: knex.raw(\n `CASE id ${cases.map(() => \"WHEN ? THEN ?\").join(\" \")} END`,\n cases.flatMap((c: { id: string; data: string }) => [c.id, c.data])\n ),\n ...columnUpdates\n };\n\n await createEntryQuery(knex, tableName)\n .where(\"tenant\", tenant)\n .where(\"entryId\", entryId)\n .update(update);\n};\n\nexport interface IListEntriesDeps {\n knex: Knex;\n tableName: string;\n storageModelProvider: CmsStorageModelProvider.Interface;\n storageTransformRegistry: StorageTransformRegistry.Interface;\n pathRegistry: FieldFilterPathRegistry.Interface;\n transformRegistry: FieldFilterValueTransformRegistry.Interface;\n filterCreateRegistry: FieldFilterCreateRegistry.Interface;\n sortingRegistry: FieldSortingRegistry.Interface;\n valueFilterRegistry: ValueFilterRegistry.Interface;\n}\n\nexport const listEntries = async <T extends CmsEntryValues = CmsEntryValues>(\n deps: IListEntriesDeps,\n initialModel: CmsModel,\n params: CmsEntryStorageOperationsListParams\n): Promise<CmsEntryStorageOperationsListResponse<CmsEntry<T>>> => {\n const model = deps.storageModelProvider.getModel(initialModel);\n const {\n where: initialWhere,\n sort: sortBy,\n search,\n fields: searchFields,\n limit: initialLimit,\n after\n } = params;\n\n const limit =\n initialLimit <= 0 || initialLimit >= MAX_LIST_LIMIT ? MAX_LIST_LIMIT : initialLimit;\n\n const qb = createEntryQuery(deps.knex, deps.tableName)\n .where(\"tenant\", model.tenant)\n .andWhere(\"modelId\", model.modelId);\n\n if (initialWhere.entryId) {\n qb.andWhere(\"entryId\", initialWhere.entryId);\n } else if (initialWhere.published === true) {\n qb.andWhere(\"isPublished\", true);\n } else {\n qb.andWhere(\"isLatest\", true);\n }\n\n if (initialWhere.wbyDeleted !== undefined) {\n qb.andWhere(\"wbyDeleted\", initialWhere.wbyDeleted);\n } else {\n qb.andWhere(\"wbyDeleted\", false);\n }\n\n const rows: IEntryRow[] = await qb;\n\n if (rows.length === 0) {\n return {\n hasMoreItems: false,\n totalCount: 0,\n cursor: null,\n items: [] as CmsEntry<T>[]\n };\n }\n\n const fromStorage = createStorageTransformCallable(deps.storageTransformRegistry, model);\n\n const records = await Promise.all(\n rows.map(async row => {\n const entry = rowToEntry(row) as CmsStorageEntry;\n\n for (const field of model.fields) {\n entry.values[field.fieldId] = await fromStorage(field, entry.values[field.fieldId]);\n }\n\n return entry as CmsEntry<T>;\n })\n );\n\n const where: Partial<CmsEntryListWhere> = { ...initialWhere };\n delete where[\"published\"];\n delete where[\"latest\"];\n delete where[\"entryId\"];\n delete where[\"wbyDeleted\"];\n\n const modelFields = createFields({\n pathRegistry: deps.pathRegistry,\n transformRegistry: deps.transformRegistry,\n fields: model.fields\n });\n\n const filteredItems = filter<T>({\n items: records,\n where,\n filterCreateRegistry: deps.filterCreateRegistry,\n transformRegistry: deps.transformRegistry,\n fields: modelFields,\n fullTextSearch: {\n term: search,\n fields: searchFields || []\n },\n valueFilterRegistry: deps.valueFilterRegistry\n });\n\n const totalCount = filteredItems.length;\n\n const sortedItems = sort<T>({\n model,\n items: filteredItems,\n sort: sortBy,\n fields: modelFields,\n sortingRegistry: deps.sortingRegistry\n });\n\n const start = parseInt((decodeCursor(after) as string) || \"0\") || 0;\n const hasMoreItems = totalCount > start + limit;\n const slicedItems = sortedItems.slice(start, start + limit);\n const cursor = encodeCursor(`${start + limit}`);\n\n return {\n hasMoreItems,\n totalCount,\n cursor,\n items: slicedItems\n };\n};\n"],"names":["MAX_LIST_LIMIT","createEntryQuery","knex","tableName","syncEntryToLatest","entry","extraPatch","latestRow","latest","JSON","merged","mergeEntryLevelMeta","patchAllEntryRevisions","entryId","tenant","patch","columnUpdates","rows","cases","row","parsed","update","c","listEntries","deps","initialModel","params","model","initialWhere","sortBy","search","searchFields","initialLimit","after","limit","qb","undefined","fromStorage","createStorageTransformCallable","records","Promise","rowToEntry","field","where","modelFields","createFields","filteredItems","filter","totalCount","sortedItems","sort","start","parseInt","decodeCursor","hasMoreItems","slicedItems","cursor","encodeCursor"],"mappings":";;;AA6BO,MAAMA,iBAAiB;AAEvB,MAAMC,mBAAmB,CAACC,MAAYC,YAClCD,KAAgBC;AAGpB,MAAMC,oBAAoB,OAC7BF,MACAC,WACAE,OACAC;IAEA,IAAID,MAAM,QAAQ,EACd;IAGJ,MAAME,YAAY,MAAMN,iBAAiBC,MAAMC,WAC1C,KAAK,CAAC,WAAWE,MAAM,OAAO,EAC9B,QAAQ,CAAC,YAAY,MACrB,KAAK;IAEV,IAAI,CAACE,WACD;IAGJ,MAAMC,SAASC,KAAK,KAAK,CAACF,UAAU,IAAI;IACxC,MAAMG,SAASC,oBAAoBN,OAAOG;IAE1C,IAAIF,YACAA,WAAWI;IAGf,MAAMT,iBAAiBC,MAAMC,WACxB,KAAK,CAAC,MAAMI,UAAU,EAAE,EACxB,MAAM,CAAC;QAAE,MAAME,KAAK,SAAS,CAACC;IAAQ;AAC/C;AAEO,MAAME,yBAAyB,OAClCV,MACAC,WACAU,SACAC,QACAC,OACAC;IAEA,MAAMC,OAAO,MAAMhB,iBAAiBC,MAAMC,WACrC,KAAK,CAAC,UAAUW,QAChB,KAAK,CAAC,WAAWD;IAEtB,IAAII,AAAgB,MAAhBA,KAAK,MAAM,EACX;IAGJ,MAAMC,QAA6CD,KAAK,GAAG,CAAC,CAACE;QACzD,MAAMC,SAASX,KAAK,KAAK,CAACU,IAAI,IAAI;QAClCJ,MAAMK;QACN,OAAO;YAAE,IAAID,IAAI,EAAE;YAAE,MAAMV,KAAK,SAAS,CAACW;QAAQ;IACtD;IAEA,MAAMC,SAAkC;QACpC,MAAMnB,KAAK,GAAG,CACV,CAAC,QAAQ,EAAEgB,MAAM,GAAG,CAAC,IAAM,iBAAiB,IAAI,CAAC,KAAK,IAAI,CAAC,EAC3DA,MAAM,OAAO,CAAC,CAACI,IAAoC;gBAACA,EAAE,EAAE;gBAAEA,EAAE,IAAI;aAAC;QAErE,GAAGN,aAAa;IACpB;IAEA,MAAMf,iBAAiBC,MAAMC,WACxB,KAAK,CAAC,UAAUW,QAChB,KAAK,CAAC,WAAWD,SACjB,MAAM,CAACQ;AAChB;AAcO,MAAME,cAAc,OACvBC,MACAC,cACAC;IAEA,MAAMC,QAAQH,KAAK,oBAAoB,CAAC,QAAQ,CAACC;IACjD,MAAM,EACF,OAAOG,YAAY,EACnB,MAAMC,MAAM,EACZC,MAAM,EACN,QAAQC,YAAY,EACpB,OAAOC,YAAY,EACnBC,KAAK,EACR,GAAGP;IAEJ,MAAMQ,QACFF,gBAAgB,KAAKA,gBAAgBhC,iBAAiBA,iBAAiBgC;IAE3E,MAAMG,KAAKlC,iBAAiBuB,KAAK,IAAI,EAAEA,KAAK,SAAS,EAChD,KAAK,CAAC,UAAUG,MAAM,MAAM,EAC5B,QAAQ,CAAC,WAAWA,MAAM,OAAO;IAEtC,IAAIC,aAAa,OAAO,EACpBO,GAAG,QAAQ,CAAC,WAAWP,aAAa,OAAO;SACxC,IAAIA,AAA2B,SAA3BA,aAAa,SAAS,EAC7BO,GAAG,QAAQ,CAAC,eAAe;SAE3BA,GAAG,QAAQ,CAAC,YAAY;IAG5B,IAAIP,AAA4BQ,WAA5BR,aAAa,UAAU,EACvBO,GAAG,QAAQ,CAAC,cAAcP,aAAa,UAAU;SAEjDO,GAAG,QAAQ,CAAC,cAAc;IAG9B,MAAMlB,OAAoB,MAAMkB;IAEhC,IAAIlB,AAAgB,MAAhBA,KAAK,MAAM,EACX,OAAO;QACH,cAAc;QACd,YAAY;QACZ,QAAQ;QACR,OAAO,EAAE;IACb;IAGJ,MAAMoB,cAAcC,+BAA+Bd,KAAK,wBAAwB,EAAEG;IAElF,MAAMY,UAAU,MAAMC,QAAQ,GAAG,CAC7BvB,KAAK,GAAG,CAAC,OAAME;QACX,MAAMd,QAAQoC,WAAWtB;QAEzB,KAAK,MAAMuB,SAASf,MAAM,MAAM,CAC5BtB,MAAM,MAAM,CAACqC,MAAM,OAAO,CAAC,GAAG,MAAML,YAAYK,OAAOrC,MAAM,MAAM,CAACqC,MAAM,OAAO,CAAC;QAGtF,OAAOrC;IACX;IAGJ,MAAMsC,QAAoC;QAAE,GAAGf,YAAY;IAAC;IAC5D,OAAOe,KAAK,CAAC,YAAY;IACzB,OAAOA,KAAK,CAAC,SAAS;IACtB,OAAOA,KAAK,CAAC,UAAU;IACvB,OAAOA,KAAK,CAAC,aAAa;IAE1B,MAAMC,cAAcC,aAAa;QAC7B,cAAcrB,KAAK,YAAY;QAC/B,mBAAmBA,KAAK,iBAAiB;QACzC,QAAQG,MAAM,MAAM;IACxB;IAEA,MAAMmB,gBAAgBC,OAAU;QAC5B,OAAOR;QACPI;QACA,sBAAsBnB,KAAK,oBAAoB;QAC/C,mBAAmBA,KAAK,iBAAiB;QACzC,QAAQoB;QACR,gBAAgB;YACZ,MAAMd;YACN,QAAQC,gBAAgB,EAAE;QAC9B;QACA,qBAAqBP,KAAK,mBAAmB;IACjD;IAEA,MAAMwB,aAAaF,cAAc,MAAM;IAEvC,MAAMG,cAAcC,KAAQ;QACxBvB;QACA,OAAOmB;QACP,MAAMjB;QACN,QAAQe;QACR,iBAAiBpB,KAAK,eAAe;IACzC;IAEA,MAAM2B,QAAQC,SAAUC,aAAapB,UAAqB,QAAQ;IAClE,MAAMqB,eAAeN,aAAaG,QAAQjB;IAC1C,MAAMqB,cAAcN,YAAY,KAAK,CAACE,OAAOA,QAAQjB;IACrD,MAAMsB,SAASC,aAAa,GAAGN,QAAQjB,OAAO;IAE9C,OAAO;QACHoB;QACAN;QACAQ;QACA,OAAOD;IACX;AACJ"}
1
+ {"version":3,"file":"operations/entry/queryHelpers.js","sources":["../../../src/operations/entry/queryHelpers.ts"],"sourcesContent":["import type { Knex } from \"knex\";\nimport type {\n CmsEntry,\n CmsEntryListWhere,\n CmsEntryStorageOperationsListParams,\n CmsEntryStorageOperationsListResponse,\n CmsEntryValues,\n CmsModel,\n CmsStorageEntry\n} from \"@webiny/api-headless-cms/types/index.js\";\nimport { decodeCursor, encodeCursor } from \"@webiny/utils\";\nimport type { StorageTransformRegistry } from \"@webiny/api-headless-cms/exports/api/cms/storage.js\";\nimport type { CmsStorageModelProvider } from \"@webiny/api-headless-cms/features/shared/abstractions.js\";\nimport type { ValueFilterRegistry } from \"@webiny/db-utils\";\nimport {\n createFields,\n filter,\n sort,\n createStorageTransformCallable\n} from \"@webiny/api-headless-cms-storage\";\nimport type {\n FieldFilterPathRegistry,\n FieldFilterValueTransformRegistry,\n FieldFilterCreateRegistry,\n FieldSortingRegistry\n} from \"@webiny/api-headless-cms-storage\";\nimport type { IEntryRow } from \"./types.js\";\nimport { rowToEntry, mergeEntryLevelMeta } from \"./mappers.js\";\n\nexport const MAX_LIST_LIMIT = 1000000;\n\nexport const createEntryQuery = (knex: Knex, tableName: string): Knex.QueryBuilder<IEntryRow> => {\n return knex<IEntryRow>(tableName);\n};\n\nexport interface IEntryQueryModel {\n tenant: string;\n modelId: string;\n}\n\nexport const createModelEntryQuery = (\n knex: Knex,\n tableName: string,\n model: IEntryQueryModel\n): Knex.QueryBuilder<IEntryRow> => {\n return createEntryQuery(knex, tableName)\n .where(\"tenant\", model.tenant)\n .andWhere(\"modelId\", model.modelId);\n};\n\nexport const syncEntryToLatest = async (\n knex: Knex,\n tableName: string,\n model: IEntryQueryModel,\n entry: CmsStorageEntry,\n extraPatch?: (latest: CmsEntry) => void\n): Promise<void> => {\n if (entry.isLatest) {\n return;\n }\n\n const latestRow = await createModelEntryQuery(knex, tableName, model)\n .andWhere(\"entryId\", entry.entryId)\n .andWhere(\"isLatest\", true)\n .first();\n\n if (!latestRow) {\n return;\n }\n\n const latest = JSON.parse(latestRow.data);\n const merged = mergeEntryLevelMeta(entry, latest);\n\n if (extraPatch) {\n extraPatch(merged);\n }\n\n await createModelEntryQuery(knex, tableName, model)\n .andWhere(\"id\", latestRow.id)\n .update({ data: JSON.stringify(merged) });\n};\n\nexport const patchAllEntryRevisions = async (\n knex: Knex,\n tableName: string,\n model: IEntryQueryModel,\n entryId: string,\n patch: (entry: CmsEntry) => void,\n columnUpdates?: Partial<IEntryRow>\n): Promise<void> => {\n const rows = await createModelEntryQuery(knex, tableName, model).andWhere(\"entryId\", entryId);\n\n if (rows.length === 0) {\n return;\n }\n\n const cases: Array<{ id: string; data: string }> = rows.map((row: IEntryRow) => {\n const parsed = JSON.parse(row.data);\n patch(parsed);\n return { id: row.id, data: JSON.stringify(parsed) };\n });\n\n const update: Record<string, unknown> = {\n data: knex.raw(\n `CASE id ${cases.map(() => \"WHEN ? THEN ?\").join(\" \")} END`,\n cases.flatMap((c: { id: string; data: string }) => [c.id, c.data])\n ),\n ...columnUpdates\n };\n\n await createModelEntryQuery(knex, tableName, model).andWhere(\"entryId\", entryId).update(update);\n};\n\nexport interface IListEntriesDeps {\n knex: Knex;\n tableName: string;\n storageModelProvider: CmsStorageModelProvider.Interface;\n storageTransformRegistry: StorageTransformRegistry.Interface;\n pathRegistry: FieldFilterPathRegistry.Interface;\n transformRegistry: FieldFilterValueTransformRegistry.Interface;\n filterCreateRegistry: FieldFilterCreateRegistry.Interface;\n sortingRegistry: FieldSortingRegistry.Interface;\n valueFilterRegistry: ValueFilterRegistry.Interface;\n}\n\nexport const listEntries = async <T extends CmsEntryValues = CmsEntryValues>(\n deps: IListEntriesDeps,\n initialModel: CmsModel,\n params: CmsEntryStorageOperationsListParams\n): Promise<CmsEntryStorageOperationsListResponse<CmsEntry<T>>> => {\n const model = deps.storageModelProvider.getModel(initialModel);\n const {\n where: initialWhere,\n sort: sortBy,\n search,\n fields: searchFields,\n limit: initialLimit,\n after\n } = params;\n\n const limit =\n initialLimit <= 0 || initialLimit >= MAX_LIST_LIMIT ? MAX_LIST_LIMIT : initialLimit;\n\n const qb = createEntryQuery(deps.knex, deps.tableName)\n .where(\"tenant\", model.tenant)\n .andWhere(\"modelId\", model.modelId);\n\n if (initialWhere.entryId) {\n qb.andWhere(\"entryId\", initialWhere.entryId);\n } else if (initialWhere.published === true) {\n qb.andWhere(\"isPublished\", true);\n } else {\n qb.andWhere(\"isLatest\", true);\n }\n\n if (initialWhere.wbyDeleted !== undefined) {\n qb.andWhere(\"wbyDeleted\", initialWhere.wbyDeleted);\n } else {\n qb.andWhere(\"wbyDeleted\", false);\n }\n\n const rows: IEntryRow[] = await qb;\n\n if (rows.length === 0) {\n return {\n hasMoreItems: false,\n totalCount: 0,\n cursor: null,\n items: [] as CmsEntry<T>[]\n };\n }\n\n const fromStorage = createStorageTransformCallable(deps.storageTransformRegistry, model);\n\n const records = await Promise.all(\n rows.map(async row => {\n const entry = rowToEntry(row) as CmsStorageEntry;\n\n for (const field of model.fields) {\n entry.values[field.fieldId] = await fromStorage(field, entry.values[field.fieldId]);\n }\n\n return entry as CmsEntry<T>;\n })\n );\n\n const where: Partial<CmsEntryListWhere> = { ...initialWhere };\n delete where[\"published\"];\n delete where[\"latest\"];\n delete where[\"entryId\"];\n delete where[\"wbyDeleted\"];\n\n const modelFields = createFields({\n pathRegistry: deps.pathRegistry,\n transformRegistry: deps.transformRegistry,\n fields: model.fields\n });\n\n const filteredItems = filter<T>({\n items: records,\n where,\n filterCreateRegistry: deps.filterCreateRegistry,\n transformRegistry: deps.transformRegistry,\n fields: modelFields,\n fullTextSearch: {\n term: search,\n fields: searchFields || []\n },\n valueFilterRegistry: deps.valueFilterRegistry\n });\n\n const totalCount = filteredItems.length;\n\n const sortedItems = sort<T>({\n model,\n items: filteredItems,\n sort: sortBy,\n fields: modelFields,\n sortingRegistry: deps.sortingRegistry\n });\n\n const start = parseInt((decodeCursor(after) as string) || \"0\") || 0;\n const hasMoreItems = totalCount > start + limit;\n const slicedItems = sortedItems.slice(start, start + limit);\n const cursor = encodeCursor(`${start + limit}`);\n\n return {\n hasMoreItems,\n totalCount,\n cursor,\n items: slicedItems\n };\n};\n"],"names":["MAX_LIST_LIMIT","createEntryQuery","knex","tableName","createModelEntryQuery","model","syncEntryToLatest","entry","extraPatch","latestRow","latest","JSON","merged","mergeEntryLevelMeta","patchAllEntryRevisions","entryId","patch","columnUpdates","rows","cases","row","parsed","update","c","listEntries","deps","initialModel","params","initialWhere","sortBy","search","searchFields","initialLimit","after","limit","qb","undefined","fromStorage","createStorageTransformCallable","records","Promise","rowToEntry","field","where","modelFields","createFields","filteredItems","filter","totalCount","sortedItems","sort","start","parseInt","decodeCursor","hasMoreItems","slicedItems","cursor","encodeCursor"],"mappings":";;;AA6BO,MAAMA,iBAAiB;AAEvB,MAAMC,mBAAmB,CAACC,MAAYC,YAClCD,KAAgBC;AAQpB,MAAMC,wBAAwB,CACjCF,MACAC,WACAE,QAEOJ,iBAAiBC,MAAMC,WACzB,KAAK,CAAC,UAAUE,MAAM,MAAM,EAC5B,QAAQ,CAAC,WAAWA,MAAM,OAAO;AAGnC,MAAMC,oBAAoB,OAC7BJ,MACAC,WACAE,OACAE,OACAC;IAEA,IAAID,MAAM,QAAQ,EACd;IAGJ,MAAME,YAAY,MAAML,sBAAsBF,MAAMC,WAAWE,OAC1D,QAAQ,CAAC,WAAWE,MAAM,OAAO,EACjC,QAAQ,CAAC,YAAY,MACrB,KAAK;IAEV,IAAI,CAACE,WACD;IAGJ,MAAMC,SAASC,KAAK,KAAK,CAACF,UAAU,IAAI;IACxC,MAAMG,SAASC,oBAAoBN,OAAOG;IAE1C,IAAIF,YACAA,WAAWI;IAGf,MAAMR,sBAAsBF,MAAMC,WAAWE,OACxC,QAAQ,CAAC,MAAMI,UAAU,EAAE,EAC3B,MAAM,CAAC;QAAE,MAAME,KAAK,SAAS,CAACC;IAAQ;AAC/C;AAEO,MAAME,yBAAyB,OAClCZ,MACAC,WACAE,OACAU,SACAC,OACAC;IAEA,MAAMC,OAAO,MAAMd,sBAAsBF,MAAMC,WAAWE,OAAO,QAAQ,CAAC,WAAWU;IAErF,IAAIG,AAAgB,MAAhBA,KAAK,MAAM,EACX;IAGJ,MAAMC,QAA6CD,KAAK,GAAG,CAAC,CAACE;QACzD,MAAMC,SAASV,KAAK,KAAK,CAACS,IAAI,IAAI;QAClCJ,MAAMK;QACN,OAAO;YAAE,IAAID,IAAI,EAAE;YAAE,MAAMT,KAAK,SAAS,CAACU;QAAQ;IACtD;IAEA,MAAMC,SAAkC;QACpC,MAAMpB,KAAK,GAAG,CACV,CAAC,QAAQ,EAAEiB,MAAM,GAAG,CAAC,IAAM,iBAAiB,IAAI,CAAC,KAAK,IAAI,CAAC,EAC3DA,MAAM,OAAO,CAAC,CAACI,IAAoC;gBAACA,EAAE,EAAE;gBAAEA,EAAE,IAAI;aAAC;QAErE,GAAGN,aAAa;IACpB;IAEA,MAAMb,sBAAsBF,MAAMC,WAAWE,OAAO,QAAQ,CAAC,WAAWU,SAAS,MAAM,CAACO;AAC5F;AAcO,MAAME,cAAc,OACvBC,MACAC,cACAC;IAEA,MAAMtB,QAAQoB,KAAK,oBAAoB,CAAC,QAAQ,CAACC;IACjD,MAAM,EACF,OAAOE,YAAY,EACnB,MAAMC,MAAM,EACZC,MAAM,EACN,QAAQC,YAAY,EACpB,OAAOC,YAAY,EACnBC,KAAK,EACR,GAAGN;IAEJ,MAAMO,QACFF,gBAAgB,KAAKA,gBAAgBhC,iBAAiBA,iBAAiBgC;IAE3E,MAAMG,KAAKlC,iBAAiBwB,KAAK,IAAI,EAAEA,KAAK,SAAS,EAChD,KAAK,CAAC,UAAUpB,MAAM,MAAM,EAC5B,QAAQ,CAAC,WAAWA,MAAM,OAAO;IAEtC,IAAIuB,aAAa,OAAO,EACpBO,GAAG,QAAQ,CAAC,WAAWP,aAAa,OAAO;SACxC,IAAIA,AAA2B,SAA3BA,aAAa,SAAS,EAC7BO,GAAG,QAAQ,CAAC,eAAe;SAE3BA,GAAG,QAAQ,CAAC,YAAY;IAG5B,IAAIP,AAA4BQ,WAA5BR,aAAa,UAAU,EACvBO,GAAG,QAAQ,CAAC,cAAcP,aAAa,UAAU;SAEjDO,GAAG,QAAQ,CAAC,cAAc;IAG9B,MAAMjB,OAAoB,MAAMiB;IAEhC,IAAIjB,AAAgB,MAAhBA,KAAK,MAAM,EACX,OAAO;QACH,cAAc;QACd,YAAY;QACZ,QAAQ;QACR,OAAO,EAAE;IACb;IAGJ,MAAMmB,cAAcC,+BAA+Bb,KAAK,wBAAwB,EAAEpB;IAElF,MAAMkC,UAAU,MAAMC,QAAQ,GAAG,CAC7BtB,KAAK,GAAG,CAAC,OAAME;QACX,MAAMb,QAAQkC,WAAWrB;QAEzB,KAAK,MAAMsB,SAASrC,MAAM,MAAM,CAC5BE,MAAM,MAAM,CAACmC,MAAM,OAAO,CAAC,GAAG,MAAML,YAAYK,OAAOnC,MAAM,MAAM,CAACmC,MAAM,OAAO,CAAC;QAGtF,OAAOnC;IACX;IAGJ,MAAMoC,QAAoC;QAAE,GAAGf,YAAY;IAAC;IAC5D,OAAOe,KAAK,CAAC,YAAY;IACzB,OAAOA,KAAK,CAAC,SAAS;IACtB,OAAOA,KAAK,CAAC,UAAU;IACvB,OAAOA,KAAK,CAAC,aAAa;IAE1B,MAAMC,cAAcC,aAAa;QAC7B,cAAcpB,KAAK,YAAY;QAC/B,mBAAmBA,KAAK,iBAAiB;QACzC,QAAQpB,MAAM,MAAM;IACxB;IAEA,MAAMyC,gBAAgBC,OAAU;QAC5B,OAAOR;QACPI;QACA,sBAAsBlB,KAAK,oBAAoB;QAC/C,mBAAmBA,KAAK,iBAAiB;QACzC,QAAQmB;QACR,gBAAgB;YACZ,MAAMd;YACN,QAAQC,gBAAgB,EAAE;QAC9B;QACA,qBAAqBN,KAAK,mBAAmB;IACjD;IAEA,MAAMuB,aAAaF,cAAc,MAAM;IAEvC,MAAMG,cAAcC,KAAQ;QACxB7C;QACA,OAAOyC;QACP,MAAMjB;QACN,QAAQe;QACR,iBAAiBnB,KAAK,eAAe;IACzC;IAEA,MAAM0B,QAAQC,SAAUC,aAAapB,UAAqB,QAAQ;IAClE,MAAMqB,eAAeN,aAAaG,QAAQjB;IAC1C,MAAMqB,cAAcN,YAAY,KAAK,CAACE,OAAOA,QAAQjB;IACrD,MAAMsB,SAASC,aAAa,GAAGN,QAAQjB,OAAO;IAE9C,OAAO;QACHoB;QACAN;QACAQ;QACA,OAAOD;IACX;AACJ"}
@@ -10,7 +10,7 @@ class SqlDeleteGroupImpl {
10
10
  }
11
11
  async execute(params) {
12
12
  await this.groupSchemaManager.ensure(this.tableName);
13
- await this.knex.client(this.tableName).where("id", params.group.id).delete();
13
+ await this.knex.client(this.tableName).where("tenant", params.group.tenant).andWhere("id", params.group.id).delete();
14
14
  }
15
15
  }
16
16
  const SqlDeleteGroup = DeleteGroupStorageOperation.createImplementation({
@@ -1 +1 @@
1
- {"version":3,"file":"operations/group/SqlDeleteGroup.js","sources":["../../../src/operations/group/SqlDeleteGroup.ts"],"sourcesContent":["import type { CmsGroupStorageOperationsDeleteParams } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { IGroupRow } from \"./types.js\";\nimport { DeleteGroupStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/group/DeleteGroupStorageOperation.js\";\nimport { TableNameResolver } from \"~/features/tableNameResolver/abstractions.js\";\nimport { GroupSchemaManager } from \"~/features/groupSchemaManager/abstractions.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\n\nclass SqlDeleteGroupImpl implements DeleteGroupStorageOperation.Interface {\n private tableName: string;\n\n constructor(\n private knex: KnexClient.Interface,\n tableNameResolver: TableNameResolver.Interface,\n private groupSchemaManager: GroupSchemaManager.Interface\n ) {\n this.tableName = tableNameResolver.resolve(\"groups\");\n }\n\n async execute(params: CmsGroupStorageOperationsDeleteParams) {\n await this.groupSchemaManager.ensure(this.tableName);\n await this.knex.client<IGroupRow>(this.tableName).where(\"id\", params.group.id).delete();\n }\n}\n\nexport const SqlDeleteGroup = DeleteGroupStorageOperation.createImplementation({\n implementation: SqlDeleteGroupImpl,\n dependencies: [KnexClient, TableNameResolver, GroupSchemaManager]\n});\n"],"names":["SqlDeleteGroupImpl","knex","tableNameResolver","groupSchemaManager","params","SqlDeleteGroup","DeleteGroupStorageOperation","KnexClient","TableNameResolver","GroupSchemaManager"],"mappings":";;;;AAOA,MAAMA;IAGF,YACYC,IAA0B,EAClCC,iBAA8C,EACtCC,kBAAgD,CAC1D;aAHUF,IAAI,GAAJA;aAEAE,kBAAkB,GAAlBA;QAER,IAAI,CAAC,SAAS,GAAGD,kBAAkB,OAAO,CAAC;IAC/C;IAEA,MAAM,QAAQE,MAA6C,EAAE;QACzD,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;QACnD,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAY,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,MAAMA,OAAO,KAAK,CAAC,EAAE,EAAE,MAAM;IACzF;AACJ;AAEO,MAAMC,iBAAiBC,4BAA4B,oBAAoB,CAAC;IAC3E,gBAAgBN;IAChB,cAAc;QAACO;QAAYC;QAAmBC;KAAmB;AACrE"}
1
+ {"version":3,"file":"operations/group/SqlDeleteGroup.js","sources":["../../../src/operations/group/SqlDeleteGroup.ts"],"sourcesContent":["import type { CmsGroupStorageOperationsDeleteParams } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { IGroupRow } from \"./types.js\";\nimport { DeleteGroupStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/group/DeleteGroupStorageOperation.js\";\nimport { TableNameResolver } from \"~/features/tableNameResolver/abstractions.js\";\nimport { GroupSchemaManager } from \"~/features/groupSchemaManager/abstractions.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\n\nclass SqlDeleteGroupImpl implements DeleteGroupStorageOperation.Interface {\n private tableName: string;\n\n constructor(\n private knex: KnexClient.Interface,\n tableNameResolver: TableNameResolver.Interface,\n private groupSchemaManager: GroupSchemaManager.Interface\n ) {\n this.tableName = tableNameResolver.resolve(\"groups\");\n }\n\n async execute(params: CmsGroupStorageOperationsDeleteParams) {\n await this.groupSchemaManager.ensure(this.tableName);\n await this.knex\n .client<IGroupRow>(this.tableName)\n .where(\"tenant\", params.group.tenant)\n .andWhere(\"id\", params.group.id)\n .delete();\n }\n}\n\nexport const SqlDeleteGroup = DeleteGroupStorageOperation.createImplementation({\n implementation: SqlDeleteGroupImpl,\n dependencies: [KnexClient, TableNameResolver, GroupSchemaManager]\n});\n"],"names":["SqlDeleteGroupImpl","knex","tableNameResolver","groupSchemaManager","params","SqlDeleteGroup","DeleteGroupStorageOperation","KnexClient","TableNameResolver","GroupSchemaManager"],"mappings":";;;;AAOA,MAAMA;IAGF,YACYC,IAA0B,EAClCC,iBAA8C,EACtCC,kBAAgD,CAC1D;aAHUF,IAAI,GAAJA;aAEAE,kBAAkB,GAAlBA;QAER,IAAI,CAAC,SAAS,GAAGD,kBAAkB,OAAO,CAAC;IAC/C;IAEA,MAAM,QAAQE,MAA6C,EAAE;QACzD,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;QACnD,MAAM,IAAI,CAAC,IAAI,CACV,MAAM,CAAY,IAAI,CAAC,SAAS,EAChC,KAAK,CAAC,UAAUA,OAAO,KAAK,CAAC,MAAM,EACnC,QAAQ,CAAC,MAAMA,OAAO,KAAK,CAAC,EAAE,EAC9B,MAAM;IACf;AACJ;AAEO,MAAMC,iBAAiBC,4BAA4B,oBAAoB,CAAC;IAC3E,gBAAgBN;IAChB,cAAc;QAACO;QAAYC;QAAmBC;KAAmB;AACrE"}
@@ -12,7 +12,7 @@ class SqlUpdateGroupImpl {
12
12
  async execute(params) {
13
13
  const row = groupToRow(params.group);
14
14
  await this.groupSchemaManager.ensure(this.tableName);
15
- await this.knex.client(this.tableName).where("id", params.group.id).update(row);
15
+ await this.knex.client(this.tableName).where("tenant", params.group.tenant).andWhere("id", params.group.id).update(row);
16
16
  }
17
17
  }
18
18
  const SqlUpdateGroup = UpdateGroupStorageOperation.createImplementation({
@@ -1 +1 @@
1
- {"version":3,"file":"operations/group/SqlUpdateGroup.js","sources":["../../../src/operations/group/SqlUpdateGroup.ts"],"sourcesContent":["import type { CmsGroupStorageOperationsUpdateParams } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { IGroupRow } from \"./types.js\";\nimport { UpdateGroupStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/group/UpdateGroupStorageOperation.js\";\nimport { TableNameResolver } from \"~/features/tableNameResolver/abstractions.js\";\nimport { GroupSchemaManager } from \"~/features/groupSchemaManager/abstractions.js\";\nimport { groupToRow } from \"./mappers.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\n\nclass SqlUpdateGroupImpl implements UpdateGroupStorageOperation.Interface {\n private tableName: string;\n\n constructor(\n private knex: KnexClient.Interface,\n tableNameResolver: TableNameResolver.Interface,\n private groupSchemaManager: GroupSchemaManager.Interface\n ) {\n this.tableName = tableNameResolver.resolve(\"groups\");\n }\n\n async execute(params: CmsGroupStorageOperationsUpdateParams) {\n const row = groupToRow(params.group);\n\n await this.groupSchemaManager.ensure(this.tableName);\n await this.knex.client<IGroupRow>(this.tableName).where(\"id\", params.group.id).update(row);\n }\n}\n\nexport const SqlUpdateGroup = UpdateGroupStorageOperation.createImplementation({\n implementation: SqlUpdateGroupImpl,\n dependencies: [KnexClient, TableNameResolver, GroupSchemaManager]\n});\n"],"names":["SqlUpdateGroupImpl","knex","tableNameResolver","groupSchemaManager","params","row","groupToRow","SqlUpdateGroup","UpdateGroupStorageOperation","KnexClient","TableNameResolver","GroupSchemaManager"],"mappings":";;;;;AAQA,MAAMA;IAGF,YACYC,IAA0B,EAClCC,iBAA8C,EACtCC,kBAAgD,CAC1D;aAHUF,IAAI,GAAJA;aAEAE,kBAAkB,GAAlBA;QAER,IAAI,CAAC,SAAS,GAAGD,kBAAkB,OAAO,CAAC;IAC/C;IAEA,MAAM,QAAQE,MAA6C,EAAE;QACzD,MAAMC,MAAMC,WAAWF,OAAO,KAAK;QAEnC,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;QACnD,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAY,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,MAAMA,OAAO,KAAK,CAAC,EAAE,EAAE,MAAM,CAACC;IAC1F;AACJ;AAEO,MAAME,iBAAiBC,4BAA4B,oBAAoB,CAAC;IAC3E,gBAAgBR;IAChB,cAAc;QAACS;QAAYC;QAAmBC;KAAmB;AACrE"}
1
+ {"version":3,"file":"operations/group/SqlUpdateGroup.js","sources":["../../../src/operations/group/SqlUpdateGroup.ts"],"sourcesContent":["import type { CmsGroupStorageOperationsUpdateParams } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { IGroupRow } from \"./types.js\";\nimport { UpdateGroupStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/group/UpdateGroupStorageOperation.js\";\nimport { TableNameResolver } from \"~/features/tableNameResolver/abstractions.js\";\nimport { GroupSchemaManager } from \"~/features/groupSchemaManager/abstractions.js\";\nimport { groupToRow } from \"./mappers.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\n\nclass SqlUpdateGroupImpl implements UpdateGroupStorageOperation.Interface {\n private tableName: string;\n\n constructor(\n private knex: KnexClient.Interface,\n tableNameResolver: TableNameResolver.Interface,\n private groupSchemaManager: GroupSchemaManager.Interface\n ) {\n this.tableName = tableNameResolver.resolve(\"groups\");\n }\n\n async execute(params: CmsGroupStorageOperationsUpdateParams) {\n const row = groupToRow(params.group);\n\n await this.groupSchemaManager.ensure(this.tableName);\n await this.knex\n .client<IGroupRow>(this.tableName)\n .where(\"tenant\", params.group.tenant)\n .andWhere(\"id\", params.group.id)\n .update(row);\n }\n}\n\nexport const SqlUpdateGroup = UpdateGroupStorageOperation.createImplementation({\n implementation: SqlUpdateGroupImpl,\n dependencies: [KnexClient, TableNameResolver, GroupSchemaManager]\n});\n"],"names":["SqlUpdateGroupImpl","knex","tableNameResolver","groupSchemaManager","params","row","groupToRow","SqlUpdateGroup","UpdateGroupStorageOperation","KnexClient","TableNameResolver","GroupSchemaManager"],"mappings":";;;;;AAQA,MAAMA;IAGF,YACYC,IAA0B,EAClCC,iBAA8C,EACtCC,kBAAgD,CAC1D;aAHUF,IAAI,GAAJA;aAEAE,kBAAkB,GAAlBA;QAER,IAAI,CAAC,SAAS,GAAGD,kBAAkB,OAAO,CAAC;IAC/C;IAEA,MAAM,QAAQE,MAA6C,EAAE;QACzD,MAAMC,MAAMC,WAAWF,OAAO,KAAK;QAEnC,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;QACnD,MAAM,IAAI,CAAC,IAAI,CACV,MAAM,CAAY,IAAI,CAAC,SAAS,EAChC,KAAK,CAAC,UAAUA,OAAO,KAAK,CAAC,MAAM,EACnC,QAAQ,CAAC,MAAMA,OAAO,KAAK,CAAC,EAAE,EAC9B,MAAM,CAACC;IAChB;AACJ;AAEO,MAAME,iBAAiBC,4BAA4B,oBAAoB,CAAC;IAC3E,gBAAgBR;IAChB,cAAc;QAACS;QAAYC;QAAmBC;KAAmB;AACrE"}
@@ -10,7 +10,7 @@ class SqlDeleteModelImpl {
10
10
  }
11
11
  async execute(params) {
12
12
  await this.modelSchemaManager.ensure(this.tableName);
13
- await this.knex.client(this.tableName).where("modelId", params.model.modelId).delete();
13
+ await this.knex.client(this.tableName).where("tenant", params.model.tenant).andWhere("modelId", params.model.modelId).delete();
14
14
  }
15
15
  }
16
16
  const SqlDeleteModel = DeleteModelStorageOperation.createImplementation({
@@ -1 +1 @@
1
- {"version":3,"file":"operations/model/SqlDeleteModel.js","sources":["../../../src/operations/model/SqlDeleteModel.ts"],"sourcesContent":["import type { CmsModelStorageOperationsDeleteParams } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { IModelRow } from \"./types.js\";\nimport { DeleteModelStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/model/DeleteModelStorageOperation.js\";\nimport { TableNameResolver } from \"~/features/tableNameResolver/abstractions.js\";\nimport { ModelSchemaManager } from \"~/features/modelSchemaManager/abstractions.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\n\nclass SqlDeleteModelImpl implements DeleteModelStorageOperation.Interface {\n private tableName: string;\n\n constructor(\n private knex: KnexClient.Interface,\n tableNameResolver: TableNameResolver.Interface,\n private modelSchemaManager: ModelSchemaManager.Interface\n ) {\n this.tableName = tableNameResolver.resolve(\"models\");\n }\n\n async execute(params: CmsModelStorageOperationsDeleteParams) {\n await this.modelSchemaManager.ensure(this.tableName);\n await this.knex\n .client<IModelRow>(this.tableName)\n .where(\"modelId\", params.model.modelId)\n .delete();\n }\n}\n\nexport const SqlDeleteModel = DeleteModelStorageOperation.createImplementation({\n implementation: SqlDeleteModelImpl,\n dependencies: [KnexClient, TableNameResolver, ModelSchemaManager]\n});\n"],"names":["SqlDeleteModelImpl","knex","tableNameResolver","modelSchemaManager","params","SqlDeleteModel","DeleteModelStorageOperation","KnexClient","TableNameResolver","ModelSchemaManager"],"mappings":";;;;AAOA,MAAMA;IAGF,YACYC,IAA0B,EAClCC,iBAA8C,EACtCC,kBAAgD,CAC1D;aAHUF,IAAI,GAAJA;aAEAE,kBAAkB,GAAlBA;QAER,IAAI,CAAC,SAAS,GAAGD,kBAAkB,OAAO,CAAC;IAC/C;IAEA,MAAM,QAAQE,MAA6C,EAAE;QACzD,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;QACnD,MAAM,IAAI,CAAC,IAAI,CACV,MAAM,CAAY,IAAI,CAAC,SAAS,EAChC,KAAK,CAAC,WAAWA,OAAO,KAAK,CAAC,OAAO,EACrC,MAAM;IACf;AACJ;AAEO,MAAMC,iBAAiBC,4BAA4B,oBAAoB,CAAC;IAC3E,gBAAgBN;IAChB,cAAc;QAACO;QAAYC;QAAmBC;KAAmB;AACrE"}
1
+ {"version":3,"file":"operations/model/SqlDeleteModel.js","sources":["../../../src/operations/model/SqlDeleteModel.ts"],"sourcesContent":["import type { CmsModelStorageOperationsDeleteParams } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { IModelRow } from \"./types.js\";\nimport { DeleteModelStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/model/DeleteModelStorageOperation.js\";\nimport { TableNameResolver } from \"~/features/tableNameResolver/abstractions.js\";\nimport { ModelSchemaManager } from \"~/features/modelSchemaManager/abstractions.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\n\nclass SqlDeleteModelImpl implements DeleteModelStorageOperation.Interface {\n private tableName: string;\n\n constructor(\n private knex: KnexClient.Interface,\n tableNameResolver: TableNameResolver.Interface,\n private modelSchemaManager: ModelSchemaManager.Interface\n ) {\n this.tableName = tableNameResolver.resolve(\"models\");\n }\n\n async execute(params: CmsModelStorageOperationsDeleteParams) {\n await this.modelSchemaManager.ensure(this.tableName);\n await this.knex\n .client<IModelRow>(this.tableName)\n .where(\"tenant\", params.model.tenant)\n .andWhere(\"modelId\", params.model.modelId)\n .delete();\n }\n}\n\nexport const SqlDeleteModel = DeleteModelStorageOperation.createImplementation({\n implementation: SqlDeleteModelImpl,\n dependencies: [KnexClient, TableNameResolver, ModelSchemaManager]\n});\n"],"names":["SqlDeleteModelImpl","knex","tableNameResolver","modelSchemaManager","params","SqlDeleteModel","DeleteModelStorageOperation","KnexClient","TableNameResolver","ModelSchemaManager"],"mappings":";;;;AAOA,MAAMA;IAGF,YACYC,IAA0B,EAClCC,iBAA8C,EACtCC,kBAAgD,CAC1D;aAHUF,IAAI,GAAJA;aAEAE,kBAAkB,GAAlBA;QAER,IAAI,CAAC,SAAS,GAAGD,kBAAkB,OAAO,CAAC;IAC/C;IAEA,MAAM,QAAQE,MAA6C,EAAE;QACzD,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;QACnD,MAAM,IAAI,CAAC,IAAI,CACV,MAAM,CAAY,IAAI,CAAC,SAAS,EAChC,KAAK,CAAC,UAAUA,OAAO,KAAK,CAAC,MAAM,EACnC,QAAQ,CAAC,WAAWA,OAAO,KAAK,CAAC,OAAO,EACxC,MAAM;IACf;AACJ;AAEO,MAAMC,iBAAiBC,4BAA4B,oBAAoB,CAAC;IAC3E,gBAAgBN;IAChB,cAAc;QAACO;QAAYC;QAAmBC;KAAmB;AACrE"}
@@ -13,7 +13,7 @@ class SqlUpdateModelImpl {
13
13
  const model = params.model;
14
14
  const row = modelToRow(model);
15
15
  await this.modelSchemaManager.ensure(this.tableName);
16
- await this.knex.client(this.tableName).where("modelId", model.modelId).update(row);
16
+ await this.knex.client(this.tableName).where("tenant", model.tenant).andWhere("modelId", model.modelId).update(row);
17
17
  return model;
18
18
  }
19
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"operations/model/SqlUpdateModel.js","sources":["../../../src/operations/model/SqlUpdateModel.ts"],"sourcesContent":["import type { CmsModelStorageOperationsUpdateParams } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { IModelRow } from \"./types.js\";\nimport { UpdateModelStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/model/UpdateModelStorageOperation.js\";\nimport { TableNameResolver } from \"~/features/tableNameResolver/abstractions.js\";\nimport { ModelSchemaManager } from \"~/features/modelSchemaManager/abstractions.js\";\nimport { modelToRow } from \"./mappers.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\n\nclass SqlUpdateModelImpl implements UpdateModelStorageOperation.Interface {\n private tableName: string;\n\n constructor(\n private knex: KnexClient.Interface,\n tableNameResolver: TableNameResolver.Interface,\n private modelSchemaManager: ModelSchemaManager.Interface\n ) {\n this.tableName = tableNameResolver.resolve(\"models\");\n }\n\n async execute(params: CmsModelStorageOperationsUpdateParams) {\n const model = params.model;\n const row = modelToRow(model);\n\n await this.modelSchemaManager.ensure(this.tableName);\n await this.knex\n .client<IModelRow>(this.tableName)\n .where(\"modelId\", model.modelId)\n .update(row);\n\n return model;\n }\n}\n\nexport const SqlUpdateModel = UpdateModelStorageOperation.createImplementation({\n implementation: SqlUpdateModelImpl,\n dependencies: [KnexClient, TableNameResolver, ModelSchemaManager]\n});\n"],"names":["SqlUpdateModelImpl","knex","tableNameResolver","modelSchemaManager","params","model","row","modelToRow","SqlUpdateModel","UpdateModelStorageOperation","KnexClient","TableNameResolver","ModelSchemaManager"],"mappings":";;;;;AAQA,MAAMA;IAGF,YACYC,IAA0B,EAClCC,iBAA8C,EACtCC,kBAAgD,CAC1D;aAHUF,IAAI,GAAJA;aAEAE,kBAAkB,GAAlBA;QAER,IAAI,CAAC,SAAS,GAAGD,kBAAkB,OAAO,CAAC;IAC/C;IAEA,MAAM,QAAQE,MAA6C,EAAE;QACzD,MAAMC,QAAQD,OAAO,KAAK;QAC1B,MAAME,MAAMC,WAAWF;QAEvB,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;QACnD,MAAM,IAAI,CAAC,IAAI,CACV,MAAM,CAAY,IAAI,CAAC,SAAS,EAChC,KAAK,CAAC,WAAWA,MAAM,OAAO,EAC9B,MAAM,CAACC;QAEZ,OAAOD;IACX;AACJ;AAEO,MAAMG,iBAAiBC,4BAA4B,oBAAoB,CAAC;IAC3E,gBAAgBT;IAChB,cAAc;QAACU;QAAYC;QAAmBC;KAAmB;AACrE"}
1
+ {"version":3,"file":"operations/model/SqlUpdateModel.js","sources":["../../../src/operations/model/SqlUpdateModel.ts"],"sourcesContent":["import type { CmsModelStorageOperationsUpdateParams } from \"@webiny/api-headless-cms/types/index.js\";\nimport type { IModelRow } from \"./types.js\";\nimport { UpdateModelStorageOperation } from \"@webiny/api-headless-cms/features/shared/storageOperations/model/UpdateModelStorageOperation.js\";\nimport { TableNameResolver } from \"~/features/tableNameResolver/abstractions.js\";\nimport { ModelSchemaManager } from \"~/features/modelSchemaManager/abstractions.js\";\nimport { modelToRow } from \"./mappers.js\";\nimport { KnexClient } from \"@webiny/api-core-sql\";\n\nclass SqlUpdateModelImpl implements UpdateModelStorageOperation.Interface {\n private tableName: string;\n\n constructor(\n private knex: KnexClient.Interface,\n tableNameResolver: TableNameResolver.Interface,\n private modelSchemaManager: ModelSchemaManager.Interface\n ) {\n this.tableName = tableNameResolver.resolve(\"models\");\n }\n\n async execute(params: CmsModelStorageOperationsUpdateParams) {\n const model = params.model;\n const row = modelToRow(model);\n\n await this.modelSchemaManager.ensure(this.tableName);\n await this.knex\n .client<IModelRow>(this.tableName)\n .where(\"tenant\", model.tenant)\n .andWhere(\"modelId\", model.modelId)\n .update(row);\n\n return model;\n }\n}\n\nexport const SqlUpdateModel = UpdateModelStorageOperation.createImplementation({\n implementation: SqlUpdateModelImpl,\n dependencies: [KnexClient, TableNameResolver, ModelSchemaManager]\n});\n"],"names":["SqlUpdateModelImpl","knex","tableNameResolver","modelSchemaManager","params","model","row","modelToRow","SqlUpdateModel","UpdateModelStorageOperation","KnexClient","TableNameResolver","ModelSchemaManager"],"mappings":";;;;;AAQA,MAAMA;IAGF,YACYC,IAA0B,EAClCC,iBAA8C,EACtCC,kBAAgD,CAC1D;aAHUF,IAAI,GAAJA;aAEAE,kBAAkB,GAAlBA;QAER,IAAI,CAAC,SAAS,GAAGD,kBAAkB,OAAO,CAAC;IAC/C;IAEA,MAAM,QAAQE,MAA6C,EAAE;QACzD,MAAMC,QAAQD,OAAO,KAAK;QAC1B,MAAME,MAAMC,WAAWF;QAEvB,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS;QACnD,MAAM,IAAI,CAAC,IAAI,CACV,MAAM,CAAY,IAAI,CAAC,SAAS,EAChC,KAAK,CAAC,UAAUA,MAAM,MAAM,EAC5B,QAAQ,CAAC,WAAWA,MAAM,OAAO,EACjC,MAAM,CAACC;QAEZ,OAAOD;IACX;AACJ;AAEO,MAAMG,iBAAiBC,4BAA4B,oBAAoB,CAAC;IAC3E,gBAAgBT;IAChB,cAAc;QAACU;QAAYC;QAAmBC;KAAmB;AACrE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/api-headless-cms-sql",
3
- "version": "0.0.0-unstable.0d717d18dd",
3
+ "version": "0.0.0-unstable.7c2def32a7",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -22,25 +22,25 @@
22
22
  "description": "SQL storage operations for Headless CMS API.",
23
23
  "license": "MIT",
24
24
  "dependencies": {
25
- "@webiny/api-core-sql": "0.0.0-unstable.0d717d18dd",
26
- "@webiny/api-headless-cms": "0.0.0-unstable.0d717d18dd",
27
- "@webiny/api-headless-cms-storage": "0.0.0-unstable.0d717d18dd",
28
- "@webiny/db-utils": "0.0.0-unstable.0d717d18dd",
29
- "@webiny/feature": "0.0.0-unstable.0d717d18dd",
30
- "@webiny/handler": "0.0.0-unstable.0d717d18dd",
31
- "@webiny/utils": "0.0.0-unstable.0d717d18dd",
25
+ "@webiny/api-core-sql": "0.0.0-unstable.7c2def32a7",
26
+ "@webiny/api-headless-cms": "0.0.0-unstable.7c2def32a7",
27
+ "@webiny/api-headless-cms-storage": "0.0.0-unstable.7c2def32a7",
28
+ "@webiny/db-utils": "0.0.0-unstable.7c2def32a7",
29
+ "@webiny/feature": "0.0.0-unstable.7c2def32a7",
30
+ "@webiny/handler": "0.0.0-unstable.7c2def32a7",
31
+ "@webiny/utils": "0.0.0-unstable.7c2def32a7",
32
32
  "knex": "3.3.0"
33
33
  },
34
34
  "devDependencies": {
35
- "@electric-sql/pglite": "0.5.4",
36
- "@electric-sql/pglite-socket": "0.2.7",
37
- "@webiny/build-tools": "0.0.0-unstable.0d717d18dd",
38
- "@webiny/di": "1.0.2",
39
- "@webiny/project-utils": "0.0.0-unstable.0d717d18dd",
40
- "better-sqlite3": "13.0.2",
41
- "pg": "8.22.0",
35
+ "@electric-sql/pglite": "0.5.5",
36
+ "@electric-sql/pglite-socket": "0.2.8",
37
+ "@webiny/api-core": "0.0.0-unstable.7c2def32a7",
38
+ "@webiny/build-tools": "0.0.0-unstable.7c2def32a7",
39
+ "@webiny/di": "2.0.0",
40
+ "better-sqlite3": "13.0.3",
41
+ "pg": "8.23.0",
42
42
  "typescript": "7.0.2",
43
- "vitest": "4.1.10"
43
+ "vitest": "4.1.11"
44
44
  },
45
45
  "publishConfig": {
46
46
  "access": "public"