@porulle/core 0.10.6 → 0.11.0

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 (136) hide show
  1. package/dist/config/types.d.ts +3 -0
  2. package/dist/config/types.d.ts.map +1 -1
  3. package/dist/hooks/checkout.d.ts +2 -0
  4. package/dist/hooks/checkout.d.ts.map +1 -1
  5. package/dist/hooks/checkout.js +2 -0
  6. package/dist/index.d.ts +3 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +1 -0
  9. package/dist/interfaces/rest/index.d.ts.map +1 -1
  10. package/dist/interfaces/rest/index.js +4 -0
  11. package/dist/interfaces/rest/routes/admin/custom-field-proposals.d.ts +5 -0
  12. package/dist/interfaces/rest/routes/admin/custom-field-proposals.d.ts.map +1 -0
  13. package/dist/interfaces/rest/routes/admin/custom-field-proposals.js +22 -0
  14. package/dist/interfaces/rest/routes/admin/entity-field-definitions.d.ts +5 -0
  15. package/dist/interfaces/rest/routes/admin/entity-field-definitions.d.ts.map +1 -0
  16. package/dist/interfaces/rest/routes/admin/entity-field-definitions.js +39 -0
  17. package/dist/interfaces/rest/routes/catalog.d.ts.map +1 -1
  18. package/dist/interfaces/rest/routes/catalog.js +37 -2
  19. package/dist/interfaces/rest/routes/checkout.d.ts.map +1 -1
  20. package/dist/interfaces/rest/routes/checkout.js +7 -1
  21. package/dist/interfaces/rest/routes/payments.d.ts.map +1 -1
  22. package/dist/interfaces/rest/routes/payments.js +48 -30
  23. package/dist/interfaces/rest/routes/search.d.ts.map +1 -1
  24. package/dist/interfaces/rest/routes/search.js +12 -0
  25. package/dist/interfaces/rest/schemas/admin-custom-field-proposals.d.ts +134 -0
  26. package/dist/interfaces/rest/schemas/admin-custom-field-proposals.d.ts.map +1 -0
  27. package/dist/interfaces/rest/schemas/admin-custom-field-proposals.js +26 -0
  28. package/dist/interfaces/rest/schemas/admin-entity-field-definitions.d.ts +592 -0
  29. package/dist/interfaces/rest/schemas/admin-entity-field-definitions.d.ts.map +1 -0
  30. package/dist/interfaces/rest/schemas/admin-entity-field-definitions.js +109 -0
  31. package/dist/interfaces/rest/schemas/catalog.d.ts +1364 -401
  32. package/dist/interfaces/rest/schemas/catalog.d.ts.map +1 -1
  33. package/dist/interfaces/rest/schemas/catalog.js +86 -0
  34. package/dist/interfaces/rest/schemas/pricing.d.ts +1 -0
  35. package/dist/interfaces/rest/schemas/pricing.d.ts.map +1 -1
  36. package/dist/interfaces/rest/schemas/search.d.ts +1 -0
  37. package/dist/interfaces/rest/schemas/search.d.ts.map +1 -1
  38. package/dist/interfaces/rest/schemas/search.js +1 -0
  39. package/dist/kernel/error-mapper.d.ts.map +1 -1
  40. package/dist/kernel/error-mapper.js +3 -0
  41. package/dist/modules/catalog/entity-service.d.ts +5 -3
  42. package/dist/modules/catalog/entity-service.d.ts.map +1 -1
  43. package/dist/modules/catalog/entity-service.js +73 -22
  44. package/dist/modules/catalog/module.d.ts +6 -1
  45. package/dist/modules/catalog/module.d.ts.map +1 -1
  46. package/dist/modules/catalog/module.js +6 -1
  47. package/dist/modules/catalog/ownership.d.ts +5 -0
  48. package/dist/modules/catalog/ownership.d.ts.map +1 -0
  49. package/dist/modules/catalog/ownership.js +11 -0
  50. package/dist/modules/catalog/repository/index.d.ts +52 -1
  51. package/dist/modules/catalog/repository/index.d.ts.map +1 -1
  52. package/dist/modules/catalog/repository/index.js +321 -2
  53. package/dist/modules/catalog/revision.d.ts +4 -0
  54. package/dist/modules/catalog/revision.d.ts.map +1 -0
  55. package/dist/modules/catalog/revision.js +33 -0
  56. package/dist/modules/catalog/schema.d.ts +979 -110
  57. package/dist/modules/catalog/schema.d.ts.map +1 -1
  58. package/dist/modules/catalog/schema.js +112 -2
  59. package/dist/modules/catalog/schemas.d.ts +2 -0
  60. package/dist/modules/catalog/schemas.d.ts.map +1 -1
  61. package/dist/modules/catalog/schemas.js +2 -0
  62. package/dist/modules/catalog/service.d.ts +66 -3
  63. package/dist/modules/catalog/service.d.ts.map +1 -1
  64. package/dist/modules/catalog/service.js +512 -11
  65. package/dist/modules/channels/adapter.d.ts +85 -0
  66. package/dist/modules/channels/adapter.d.ts.map +1 -1
  67. package/dist/modules/channels/adapter.js +9 -1
  68. package/dist/modules/media/module.d.ts +68 -0
  69. package/dist/modules/media/module.d.ts.map +1 -1
  70. package/dist/modules/media/module.js +2 -0
  71. package/dist/modules/media/schema.d.ts +70 -0
  72. package/dist/modules/media/schema.d.ts.map +1 -1
  73. package/dist/modules/media/schema.js +20 -2
  74. package/dist/modules/media/service.d.ts +8 -1
  75. package/dist/modules/media/service.d.ts.map +1 -1
  76. package/dist/modules/media/service.js +66 -18
  77. package/dist/modules/orders/service.d.ts +2 -0
  78. package/dist/modules/orders/service.d.ts.map +1 -1
  79. package/dist/modules/orders/service.js +1 -0
  80. package/dist/modules/pricing/schema.d.ts +17 -0
  81. package/dist/modules/pricing/schema.d.ts.map +1 -1
  82. package/dist/modules/pricing/schema.js +1 -0
  83. package/dist/modules/pricing/schemas.d.ts +1 -0
  84. package/dist/modules/pricing/schemas.d.ts.map +1 -1
  85. package/dist/modules/pricing/schemas.js +1 -0
  86. package/dist/modules/pricing/service.d.ts.map +1 -1
  87. package/dist/modules/pricing/service.js +6 -1
  88. package/dist/modules/search/adapter.d.ts +2 -0
  89. package/dist/modules/search/adapter.d.ts.map +1 -1
  90. package/dist/modules/search/module.d.ts.map +1 -1
  91. package/dist/modules/search/module.js +2 -0
  92. package/dist/modules/search/service.d.ts +4 -0
  93. package/dist/modules/search/service.d.ts.map +1 -1
  94. package/dist/modules/search/service.js +74 -5
  95. package/dist/runtime/kernel-modules.d.ts +73 -0
  96. package/dist/runtime/kernel-modules.d.ts.map +1 -1
  97. package/dist/utils/id.d.ts +1 -0
  98. package/dist/utils/id.d.ts.map +1 -1
  99. package/dist/utils/id.js +8 -0
  100. package/package.json +1 -1
  101. package/src/config/types.ts +3 -0
  102. package/src/hooks/checkout.ts +4 -0
  103. package/src/index.ts +14 -0
  104. package/src/interfaces/rest/index.ts +4 -0
  105. package/src/interfaces/rest/routes/admin/custom-field-proposals.ts +37 -0
  106. package/src/interfaces/rest/routes/admin/entity-field-definitions.ts +89 -0
  107. package/src/interfaces/rest/routes/catalog.ts +85 -0
  108. package/src/interfaces/rest/routes/checkout.ts +7 -1
  109. package/src/interfaces/rest/routes/payments.ts +55 -35
  110. package/src/interfaces/rest/routes/search.ts +16 -0
  111. package/src/interfaces/rest/schemas/admin-custom-field-proposals.ts +29 -0
  112. package/src/interfaces/rest/schemas/admin-entity-field-definitions.ts +120 -0
  113. package/src/interfaces/rest/schemas/catalog.ts +92 -0
  114. package/src/interfaces/rest/schemas/search.ts +2 -0
  115. package/src/kernel/error-mapper.ts +3 -0
  116. package/src/modules/catalog/entity-service.ts +73 -20
  117. package/src/modules/catalog/module.ts +15 -0
  118. package/src/modules/catalog/ownership.ts +17 -0
  119. package/src/modules/catalog/repository/index.ts +547 -1
  120. package/src/modules/catalog/revision.ts +35 -0
  121. package/src/modules/catalog/schema.ts +169 -1
  122. package/src/modules/catalog/schemas.ts +2 -0
  123. package/src/modules/catalog/service.ts +738 -13
  124. package/src/modules/channels/adapter.ts +107 -1
  125. package/src/modules/media/module.ts +2 -0
  126. package/src/modules/media/schema.ts +23 -2
  127. package/src/modules/media/service.ts +84 -23
  128. package/src/modules/orders/service.ts +3 -0
  129. package/src/modules/pricing/schema.ts +1 -0
  130. package/src/modules/pricing/schemas.ts +1 -0
  131. package/src/modules/pricing/service.ts +7 -2
  132. package/src/modules/search/adapter.ts +2 -0
  133. package/src/modules/search/module.ts +2 -0
  134. package/src/modules/search/service.ts +87 -6
  135. package/src/utils/id.ts +11 -0
  136. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,12 +1,15 @@
1
1
  import type { TxContext } from "../../../kernel/database/tx-context.js";
2
2
  import type { DrizzleDatabase } from "../../../kernel/database/drizzle-db.js";
3
- import { sellableEntities, sellableAttributes, sellableCustomFields, categories, entityCategories, brands, entityBrands, optionTypes, optionValues, variants, variantOptionValues } from "../schema.js";
3
+ import { sellableEntities, sellableAttributes, sellableCustomFields, entityFieldDefinitions, categories, entityCategories, brands, entityBrands, entityTags, optionTypes, optionValues, variants, variantOptionValues, sellableEntityRevisions, catalogFieldOwnership, type SellableEntityRevisionSnapshot } from "../schema.js";
4
+ import { entityMedia } from "../../media/schema.js";
4
5
  export type SellableEntity = typeof sellableEntities.$inferSelect;
5
6
  export type SellableEntityInsert = typeof sellableEntities.$inferInsert;
6
7
  export type SellableAttribute = typeof sellableAttributes.$inferSelect;
7
8
  export type SellableAttributeInsert = typeof sellableAttributes.$inferInsert;
8
9
  export type SellableCustomField = typeof sellableCustomFields.$inferSelect;
9
10
  export type SellableCustomFieldInsert = typeof sellableCustomFields.$inferInsert;
11
+ export type EntityFieldDefinitionRecord = typeof entityFieldDefinitions.$inferSelect;
12
+ export type EntityFieldDefinitionInsert = typeof entityFieldDefinitions.$inferInsert;
10
13
  export type Category = typeof categories.$inferSelect;
11
14
  export type CategoryInsert = typeof categories.$inferInsert;
12
15
  export type EntityCategory = typeof entityCategories.$inferSelect;
@@ -23,6 +26,14 @@ export type Variant = typeof variants.$inferSelect;
23
26
  export type VariantInsert = typeof variants.$inferInsert;
24
27
  export type VariantOptionValue = typeof variantOptionValues.$inferSelect;
25
28
  export type VariantOptionValueInsert = typeof variantOptionValues.$inferInsert;
29
+ export type SellableEntityRevision = typeof sellableEntityRevisions.$inferSelect;
30
+ export type SellableEntityRevisionInsert = typeof sellableEntityRevisions.$inferInsert;
31
+ export type CatalogFieldOwnership = typeof catalogFieldOwnership.$inferSelect;
32
+ export type CatalogFieldOwnershipInsert = typeof catalogFieldOwnership.$inferInsert;
33
+ export type ProposedCustomField = SellableCustomField & {
34
+ entitySlug: string;
35
+ entityType: string;
36
+ };
26
37
  /**
27
38
  * CatalogRepository provides type-safe database operations for catalog entities.
28
39
  *
@@ -50,6 +61,21 @@ export declare class CatalogRepository {
50
61
  createEntity(data: SellableEntityInsert, ctx?: TxContext): Promise<SellableEntity>;
51
62
  updateEntity(id: string, data: Partial<Omit<SellableEntityInsert, "id">>, ctx?: TxContext): Promise<SellableEntity | undefined>;
52
63
  deleteEntity(id: string, ctx?: TxContext): Promise<boolean>;
64
+ findFieldOwnership(entityId: string, ctx?: TxContext, storeId?: string): Promise<CatalogFieldOwnership[]>;
65
+ findFieldOwnershipForResolution(entityId: string, storeId: string, variantId: string | null, ctx?: TxContext): Promise<CatalogFieldOwnership[]>;
66
+ upsertFieldOwnership(data: CatalogFieldOwnershipInsert, ctx?: TxContext): Promise<CatalogFieldOwnership>;
67
+ seedFieldOwnership(data: CatalogFieldOwnershipInsert[], ctx?: TxContext): Promise<void>;
68
+ findRevisionsByEntityId(entityId: string, ctx?: TxContext): Promise<SellableEntityRevision[]>;
69
+ findRevisionMarkers(entityId: string, since?: Date, ctx?: TxContext): Promise<Array<Pick<SellableEntityRevision, "createdAt" | "reason">>>;
70
+ findLatestRevision(entityId: string, ctx?: TxContext): Promise<SellableEntityRevision | undefined>;
71
+ findRevisionById(entityId: string, id: string, ctx?: TxContext): Promise<SellableEntityRevision | undefined>;
72
+ createRevision(data: Omit<SellableEntityRevisionInsert, "id" | "revision" | "pinned">, ctx?: TxContext): Promise<SellableEntityRevision>;
73
+ updateRevision(id: string, data: Partial<Pick<SellableEntityRevisionInsert, "createdAt" | "pinned">>, ctx?: TxContext): Promise<SellableEntityRevision | undefined>;
74
+ deleteRevisionsOlderThan(organizationId: string, cutoff: Date, ctx?: TxContext): Promise<number>;
75
+ snapshotEntity(entityId: string, ctx?: TxContext): Promise<SellableEntityRevisionSnapshot>;
76
+ findEntityMedia(entityId: string, ctx?: TxContext): Promise<Array<typeof entityMedia.$inferSelect>>;
77
+ deleteEntityMediaByEntityId(entityId: string, ctx?: TxContext): Promise<void>;
78
+ createEntityMedia(data: typeof entityMedia.$inferInsert, ctx?: TxContext): Promise<typeof entityMedia.$inferSelect>;
53
79
  findAttributesByEntityId(entityId: string, ctx?: TxContext): Promise<SellableAttribute[]>;
54
80
  findAttributeByLocale(entityId: string, locale: string, ctx?: TxContext): Promise<SellableAttribute | undefined>;
55
81
  createAttribute(data: SellableAttributeInsert, ctx?: TxContext): Promise<SellableAttribute>;
@@ -57,8 +83,30 @@ export declare class CatalogRepository {
57
83
  upsertAttribute(entityId: string, locale: string, data: Omit<SellableAttributeInsert, "entityId" | "locale">, ctx?: TxContext): Promise<SellableAttribute>;
58
84
  deleteAttributesByEntityId(entityId: string, ctx?: TxContext): Promise<void>;
59
85
  findCustomFieldsByEntityId(entityId: string, ctx?: TxContext): Promise<SellableCustomField[]>;
86
+ findAllCustomFieldsByEntityId(entityId: string, ctx?: TxContext): Promise<SellableCustomField[]>;
87
+ findProposedCustomField(entityId: string, fieldName: string, locale?: string, ctx?: TxContext): Promise<SellableCustomField | undefined>;
88
+ updateProposedCustomField(id: string, data: Partial<Omit<SellableCustomFieldInsert, "id">>, ctx?: TxContext): Promise<SellableCustomField | undefined>;
89
+ rejectOtherProposedCustomFields(entityId: string, fieldName: string, locale: string, excludeId: string, ctx?: TxContext): Promise<number>;
90
+ listProposedCustomFields(organizationId: string, pagination: {
91
+ page: number;
92
+ limit: number;
93
+ }, filter?: {
94
+ entityType?: string;
95
+ }, ctx?: TxContext): Promise<{
96
+ items: ProposedCustomField[];
97
+ total: number;
98
+ }>;
99
+ findCustomFieldByName(entityId: string, fieldName: string, locale?: string, ctx?: TxContext): Promise<SellableCustomField | undefined>;
60
100
  createCustomField(data: SellableCustomFieldInsert, ctx?: TxContext): Promise<SellableCustomField>;
101
+ updateCustomField(id: string, data: Partial<Omit<SellableCustomFieldInsert, "id">>, ctx?: TxContext): Promise<SellableCustomField | undefined>;
102
+ upsertCustomField(entityId: string, fieldName: string, locale: string, data: Omit<SellableCustomFieldInsert, "entityId" | "fieldName">, ctx?: TxContext): Promise<SellableCustomField>;
103
+ deleteCustomField(entityId: string, fieldName: string, locale?: string, ctx?: TxContext): Promise<void>;
61
104
  deleteCustomFieldsByEntityId(entityId: string, ctx?: TxContext): Promise<void>;
105
+ findEntityFieldDefinitions(organizationId: string, entityType?: string, ctx?: TxContext): Promise<EntityFieldDefinitionRecord[]>;
106
+ findActiveEntityFieldDefinitions(organizationId: string, entityType: string, ctx?: TxContext): Promise<EntityFieldDefinitionRecord[]>;
107
+ findEntityFieldDefinitionById(organizationId: string, id: string, ctx?: TxContext): Promise<EntityFieldDefinitionRecord | undefined>;
108
+ createEntityFieldDefinition(data: EntityFieldDefinitionInsert, ctx?: TxContext): Promise<EntityFieldDefinitionRecord>;
109
+ updateEntityFieldDefinition(organizationId: string, id: string, data: Partial<Omit<EntityFieldDefinitionInsert, "id" | "organizationId">>, ctx?: TxContext): Promise<EntityFieldDefinitionRecord | undefined>;
62
110
  findCategoryById(id: string, ctx?: TxContext): Promise<Category | undefined>;
63
111
  findCategoryBySlug(orgId: string, slug: string, ctx?: TxContext): Promise<Category | undefined>;
64
112
  findAllCategories(orgId: string, ctx?: TxContext): Promise<Category[]>;
@@ -78,6 +126,9 @@ export declare class CatalogRepository {
78
126
  updateBrand(id: string, data: Partial<Omit<BrandInsert, "id">>, ctx?: TxContext): Promise<Brand | undefined>;
79
127
  deleteBrand(id: string, ctx?: TxContext): Promise<boolean>;
80
128
  findEntityBrands(entityId: string, ctx?: TxContext): Promise<EntityBrand[]>;
129
+ findEntityTags(entityId: string, ctx?: TxContext): Promise<Array<typeof entityTags.$inferSelect>>;
130
+ addEntityTag(entityId: string, tagId: string, ctx?: TxContext): Promise<void>;
131
+ deleteEntityTagsByEntityId(entityId: string, ctx?: TxContext): Promise<void>;
81
132
  addEntityToBrand(entityId: string, brandId: string, sortOrder?: number, ctx?: TxContext): Promise<void>;
82
133
  removeEntityFromBrand(entityId: string, brandId: string, ctx?: TxContext): Promise<boolean>;
83
134
  deleteEntityBrandsByEntityId(entityId: string, ctx?: TxContext): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/catalog/repository/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/catalog/repository/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AAExE,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,MAAM,EACN,YAAY,EACZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EACrB,KAAK,8BAA8B,EACpC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD,MAAM,MAAM,cAAc,GAAG,OAAO,gBAAgB,CAAC,YAAY,CAAC;AAClE,MAAM,MAAM,oBAAoB,GAAG,OAAO,gBAAgB,CAAC,YAAY,CAAC;AACxE,MAAM,MAAM,iBAAiB,GAAG,OAAO,kBAAkB,CAAC,YAAY,CAAC;AACvE,MAAM,MAAM,uBAAuB,GAAG,OAAO,kBAAkB,CAAC,YAAY,CAAC;AAC7E,MAAM,MAAM,mBAAmB,GAAG,OAAO,oBAAoB,CAAC,YAAY,CAAC;AAC3E,MAAM,MAAM,yBAAyB,GACnC,OAAO,oBAAoB,CAAC,YAAY,CAAC;AAC3C,MAAM,MAAM,2BAA2B,GAAG,OAAO,sBAAsB,CAAC,YAAY,CAAC;AACrF,MAAM,MAAM,2BAA2B,GAAG,OAAO,sBAAsB,CAAC,YAAY,CAAC;AACrF,MAAM,MAAM,QAAQ,GAAG,OAAO,UAAU,CAAC,YAAY,CAAC;AACtD,MAAM,MAAM,cAAc,GAAG,OAAO,UAAU,CAAC,YAAY,CAAC;AAC5D,MAAM,MAAM,cAAc,GAAG,OAAO,gBAAgB,CAAC,YAAY,CAAC;AAClE,MAAM,MAAM,oBAAoB,GAAG,OAAO,gBAAgB,CAAC,YAAY,CAAC;AACxE,MAAM,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,YAAY,CAAC;AAC/C,MAAM,MAAM,WAAW,GAAG,OAAO,MAAM,CAAC,YAAY,CAAC;AACrD,MAAM,MAAM,WAAW,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAC3D,MAAM,MAAM,iBAAiB,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AACjE,MAAM,MAAM,UAAU,GAAG,OAAO,WAAW,CAAC,YAAY,CAAC;AACzD,MAAM,MAAM,gBAAgB,GAAG,OAAO,WAAW,CAAC,YAAY,CAAC;AAC/D,MAAM,MAAM,WAAW,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AAC3D,MAAM,MAAM,iBAAiB,GAAG,OAAO,YAAY,CAAC,YAAY,CAAC;AACjE,MAAM,MAAM,OAAO,GAAG,OAAO,QAAQ,CAAC,YAAY,CAAC;AACnD,MAAM,MAAM,aAAa,GAAG,OAAO,QAAQ,CAAC,YAAY,CAAC;AACzD,MAAM,MAAM,kBAAkB,GAAG,OAAO,mBAAmB,CAAC,YAAY,CAAC;AACzE,MAAM,MAAM,wBAAwB,GAAG,OAAO,mBAAmB,CAAC,YAAY,CAAC;AAC/E,MAAM,MAAM,sBAAsB,GAAG,OAAO,uBAAuB,CAAC,YAAY,CAAC;AACjF,MAAM,MAAM,4BAA4B,GAAG,OAAO,uBAAuB,CAAC,YAAY,CAAC;AACvF,MAAM,MAAM,qBAAqB,GAAG,OAAO,qBAAqB,CAAC,YAAY,CAAC;AAC9E,MAAM,MAAM,2BAA2B,GAAG,OAAO,qBAAqB,CAAC,YAAY,CAAC;AACpF,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,GAAG;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;GAQG;AACH,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,eAAe;IAEhD;;;OAGG;IACH,OAAO,CAAC,KAAK;IAQP,cAAc,CAClB,EAAE,EAAE,MAAM,EACV,GAAG,CAAC,EAAE,SAAS,EACf,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAahC,gBAAgB,CACpB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAchC,YAAY,CAChB,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;KAChB,EACD,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,cAAc,EAAE,CAAC;IAsBtB,YAAY,CAChB,IAAI,EAAE,oBAAoB,EAC1B,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,cAAc,CAAC;IAMpB,YAAY,CAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC,EAC/C,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAUhC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3D,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,EACf,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAa7B,+BAA+B,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAc7B,oBAAoB,CACxB,IAAI,EAAE,2BAA2B,EACjC,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,qBAAqB,CAAC;IAsB3B,kBAAkB,CACtB,IAAI,EAAE,2BAA2B,EAAE,EACnC,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IAMV,uBAAuB,CAC3B,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAS9B,mBAAmB,CACvB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,IAAI,EACZ,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC;IAejE,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAWxC,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAcxC,cAAc,CAClB,IAAI,EAAE,IAAI,CAAC,4BAA4B,EAAE,IAAI,GAAG,UAAU,GAAG,QAAQ,CAAC,EACtE,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,sBAAsB,CAAC;IAkB5B,cAAc,CAClB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,WAAW,GAAG,QAAQ,CAAC,CAAC,EACzE,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAUxC,wBAAwB,CAC5B,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,IAAI,EACZ,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,MAAM,CAAC;IAgBZ,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,8BAA8B,CAAC;IAsBpC,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC;IAQ5C,2BAA2B,CAC/B,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IAKV,iBAAiB,CACrB,IAAI,EAAE,OAAO,WAAW,CAAC,YAAY,EACrC,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,OAAO,WAAW,CAAC,YAAY,CAAC;IAUrC,wBAAwB,CAC5B,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAQzB,qBAAqB,CACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAcnC,eAAe,CACnB,IAAI,EAAE,uBAAuB,EAC7B,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,iBAAiB,CAAC;IAMvB,eAAe,CACnB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC,EAClD,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAUnC,eAAe,CACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,CAAC,uBAAuB,EAAE,UAAU,GAAG,QAAQ,CAAC,EAC1D,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,iBAAiB,CAAC;IASvB,0BAA0B,CAC9B,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IAWV,0BAA0B,CAC9B,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAa3B,6BAA6B,CACjC,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAQ3B,uBAAuB,CAC3B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,SAAO,EACb,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAkBrC,yBAAyB,CAC7B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC,EACpD,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAerC,+BAA+B,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,MAAM,CAAC;IAkBZ,wBAAwB,CAC5B,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAC3C,MAAM,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,EAChC,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC;QAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAuCrD,qBAAqB,CACzB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,SAAO,EACb,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAgBrC,iBAAiB,CACrB,IAAI,EAAE,yBAAyB,EAC/B,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,mBAAmB,CAAC;IAMzB,iBAAiB,CACrB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC,EACpD,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAUrC,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,CAAC,yBAAyB,EAAE,UAAU,GAAG,WAAW,CAAC,EAC/D,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,mBAAmB,CAAC;IASzB,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,SAAO,EACb,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IAcV,4BAA4B,CAChC,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IAOV,0BAA0B,CAC9B,cAAc,EAAE,MAAM,EACtB,UAAU,CAAC,EAAE,MAAM,EACnB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,2BAA2B,EAAE,CAAC;IAanC,gCAAgC,CACpC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,2BAA2B,EAAE,CAAC;IAenC,6BAA6B,CACjC,cAAc,EAAE,MAAM,EACtB,EAAE,EAAE,MAAM,EACV,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC;IAS7C,2BAA2B,CAC/B,IAAI,EAAE,2BAA2B,EACjC,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,2BAA2B,CAAC;IAMjC,2BAA2B,CAC/B,cAAc,EAAE,MAAM,EACtB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,IAAI,GAAG,gBAAgB,CAAC,CAAC,EACzE,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,2BAA2B,GAAG,SAAS,CAAC;IAc7C,gBAAgB,CACpB,EAAE,EAAE,MAAM,EACV,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAS1B,kBAAkB,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAc1B,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,QAAQ,EAAE,CAAC;IAQhB,cAAc,CAClB,IAAI,EAAE,cAAc,EACpB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,QAAQ,CAAC;IAMd,cAAc,CAClB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,EACzC,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAU1B,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAa7D,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,cAAc,EAAE,CAAC;IAQtB,sBAAsB,CAC1B,UAAU,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,MAAM,EAAE,CAAC;IASd,mBAAmB,CACvB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,SAAI,EACb,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IAQV,wBAAwB,CAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,OAAO,CAAC;IAcb,gCAAgC,CACpC,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IAOV,kCAAkC,CACtC,UAAU,EAAE,MAAM,EAClB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IAWV,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAMtE,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAcvB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAQ/D,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;IAM/D,WAAW,CACf,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,EACtC,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IAUvB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAU1D,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,WAAW,EAAE,CAAC;IAQnB,cAAc,CAClB,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC;IAQ3C,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7E,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5E,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,SAAI,EACb,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IAQV,qBAAqB,CACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,OAAO,CAAC;IAcb,4BAA4B,CAChC,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IAKV,2BAA2B,CAC/B,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IASV,yBAAyB,CAC7B,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,UAAU,EAAE,CAAC;IAQlB,kBAAkB,CACtB,EAAE,EAAE,MAAM,EACV,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAS5B,gBAAgB,CACpB,IAAI,EAAE,gBAAgB,EACtB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,UAAU,CAAC;IAMhB,2BAA2B,CAC/B,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IASV,wBAAwB,CAC5B,YAAY,EAAE,MAAM,EACpB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,WAAW,EAAE,CAAC;IAQnB,mBAAmB,CACvB,EAAE,EAAE,MAAM,EACV,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAS7B,qBAAqB,CACzB,GAAG,EAAE,MAAM,EAAE,EACb,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,WAAW,EAAE,CAAC;IAMnB,iBAAiB,CACrB,IAAI,EAAE,iBAAiB,EACvB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,WAAW,CAAC;IAMjB,0BAA0B,CAC9B,YAAY,EAAE,MAAM,EACpB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IAWV,sBAAsB,CAC1B,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,OAAO,EAAE,CAAC;IAKf,eAAe,CACnB,EAAE,EAAE,MAAM,EACV,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAMzB,gBAAgB,CACpB,GAAG,EAAE,MAAM,EACX,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAMzB,oBAAoB,CACxB,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IASzB,aAAa,CACjB,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,GAAG,eAAe,CAAC,EAC7D,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,OAAO,CAAC;IAYb,aAAa,CACjB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,gBAAgB,GAAG,eAAe,CAAC,CAAC,EAC7E,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAUzB,wBAAwB,CAC5B,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IASV,uBAAuB,CAC3B,SAAS,EAAE,MAAM,EACjB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAQ1B,yBAAyB,CAC7B,IAAI,EAAE,wBAAwB,EAAE,EAChC,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IAMV,oCAAoC,CACxC,SAAS,EAAE,MAAM,EACjB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;IAOV,mCAAmC,CACvC,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,SAAS,GACd,OAAO,CAAC,IAAI,CAAC;CAWjB"}
@@ -1,6 +1,7 @@
1
- import { eq, and, inArray } from "drizzle-orm";
1
+ import { eq, and, asc, count, desc, gt, inArray, isNull, lt, max, ne, or } from "drizzle-orm";
2
2
  import { CommerceNotFoundError } from "../../../kernel/errors.js";
3
- import { sellableEntities, sellableAttributes, sellableCustomFields, categories, entityCategories, brands, entityBrands, optionTypes, optionValues, variants, variantOptionValues, } from "../schema.js";
3
+ import { sellableEntities, sellableAttributes, sellableCustomFields, entityFieldDefinitions, categories, entityCategories, brands, entityBrands, entityTags, optionTypes, optionValues, variants, variantOptionValues, sellableEntityRevisions, catalogFieldOwnership, } from "../schema.js";
4
+ import { entityMedia } from "../../media/schema.js";
4
5
  /**
5
6
  * CatalogRepository provides type-safe database operations for catalog entities.
6
7
  *
@@ -84,6 +85,163 @@ export class CatalogRepository {
84
85
  .returning();
85
86
  return result.length > 0;
86
87
  }
88
+ async findFieldOwnership(entityId, ctx, storeId) {
89
+ const db = this.getDb(ctx);
90
+ const conditions = [eq(catalogFieldOwnership.entityId, entityId)];
91
+ if (storeId !== undefined) {
92
+ conditions.push(or(isNull(catalogFieldOwnership.storeId), eq(catalogFieldOwnership.storeId, storeId)));
93
+ }
94
+ return db
95
+ .select()
96
+ .from(catalogFieldOwnership)
97
+ .where(and(...conditions))
98
+ .orderBy(asc(catalogFieldOwnership.fieldPath), asc(catalogFieldOwnership.updatedAt));
99
+ }
100
+ async findFieldOwnershipForResolution(entityId, storeId, variantId, ctx) {
101
+ const db = this.getDb(ctx);
102
+ return db
103
+ .select()
104
+ .from(catalogFieldOwnership)
105
+ .where(and(eq(catalogFieldOwnership.entityId, entityId), or(isNull(catalogFieldOwnership.storeId), eq(catalogFieldOwnership.storeId, storeId)), variantId == null
106
+ ? isNull(catalogFieldOwnership.variantId)
107
+ : or(isNull(catalogFieldOwnership.variantId), eq(catalogFieldOwnership.variantId, variantId))));
108
+ }
109
+ async upsertFieldOwnership(data, ctx) {
110
+ const db = this.getDb(ctx);
111
+ const rows = await db
112
+ .insert(catalogFieldOwnership)
113
+ .values(data)
114
+ .onConflictDoUpdate({
115
+ target: [
116
+ catalogFieldOwnership.organizationId,
117
+ catalogFieldOwnership.entityId,
118
+ catalogFieldOwnership.variantId,
119
+ catalogFieldOwnership.storeId,
120
+ catalogFieldOwnership.fieldPath,
121
+ ],
122
+ set: {
123
+ owner: data.owner,
124
+ updatedAt: data.updatedAt ?? new Date(),
125
+ },
126
+ })
127
+ .returning();
128
+ return rows[0];
129
+ }
130
+ async seedFieldOwnership(data, ctx) {
131
+ if (data.length === 0)
132
+ return;
133
+ const db = this.getDb(ctx);
134
+ await db.insert(catalogFieldOwnership).values(data).onConflictDoNothing();
135
+ }
136
+ async findRevisionsByEntityId(entityId, ctx) {
137
+ const db = this.getDb(ctx);
138
+ return db
139
+ .select()
140
+ .from(sellableEntityRevisions)
141
+ .where(eq(sellableEntityRevisions.entityId, entityId))
142
+ .orderBy(asc(sellableEntityRevisions.revision));
143
+ }
144
+ async findRevisionMarkers(entityId, since, ctx) {
145
+ const db = this.getDb(ctx);
146
+ return db
147
+ .select({
148
+ createdAt: sellableEntityRevisions.createdAt,
149
+ reason: sellableEntityRevisions.reason,
150
+ })
151
+ .from(sellableEntityRevisions)
152
+ .where(and(eq(sellableEntityRevisions.entityId, entityId), ...(since ? [gt(sellableEntityRevisions.createdAt, since)] : [])))
153
+ .orderBy(asc(sellableEntityRevisions.createdAt));
154
+ }
155
+ async findLatestRevision(entityId, ctx) {
156
+ const db = this.getDb(ctx);
157
+ const rows = await db
158
+ .select()
159
+ .from(sellableEntityRevisions)
160
+ .where(eq(sellableEntityRevisions.entityId, entityId))
161
+ .orderBy(desc(sellableEntityRevisions.revision))
162
+ .limit(1);
163
+ return rows[0];
164
+ }
165
+ async findRevisionById(entityId, id, ctx) {
166
+ const db = this.getDb(ctx);
167
+ const rows = await db
168
+ .select()
169
+ .from(sellableEntityRevisions)
170
+ .where(and(eq(sellableEntityRevisions.entityId, entityId), eq(sellableEntityRevisions.id, id)));
171
+ return rows[0];
172
+ }
173
+ async createRevision(data, ctx) {
174
+ const db = this.getDb(ctx);
175
+ const rows = await db
176
+ .select({ revision: max(sellableEntityRevisions.revision) })
177
+ .from(sellableEntityRevisions)
178
+ .where(eq(sellableEntityRevisions.entityId, data.entityId));
179
+ const revision = (rows[0]?.revision ?? 0) + 1;
180
+ const inserted = await db
181
+ .insert(sellableEntityRevisions)
182
+ .values({
183
+ ...data,
184
+ revision,
185
+ pinned: revision === 1,
186
+ })
187
+ .returning();
188
+ return inserted[0];
189
+ }
190
+ async updateRevision(id, data, ctx) {
191
+ const db = this.getDb(ctx);
192
+ const rows = await db
193
+ .update(sellableEntityRevisions)
194
+ .set(data)
195
+ .where(eq(sellableEntityRevisions.id, id))
196
+ .returning();
197
+ return rows[0];
198
+ }
199
+ async deleteRevisionsOlderThan(organizationId, cutoff, ctx) {
200
+ const db = this.getDb(ctx);
201
+ const deleted = await db
202
+ .delete(sellableEntityRevisions)
203
+ .where(and(eq(sellableEntityRevisions.organizationId, organizationId), lt(sellableEntityRevisions.createdAt, cutoff), eq(sellableEntityRevisions.pinned, false), gt(sellableEntityRevisions.revision, 1)))
204
+ .returning({ id: sellableEntityRevisions.id });
205
+ return deleted.length;
206
+ }
207
+ async snapshotEntity(entityId, ctx) {
208
+ const entity = await this.findEntityById(entityId, ctx);
209
+ if (!entity)
210
+ throw new CommerceNotFoundError("Entity not found.");
211
+ const [attributes, customFields, categoriesForEntity, brandsForEntity, media, tagsForEntity] = await Promise.all([
212
+ this.findAttributesByEntityId(entityId, ctx),
213
+ this.findAllCustomFieldsByEntityId(entityId, ctx),
214
+ this.findEntityCategories(entityId, ctx),
215
+ this.findEntityBrands(entityId, ctx),
216
+ this.findEntityMedia(entityId, ctx),
217
+ this.findEntityTags(entityId, ctx),
218
+ ]);
219
+ return {
220
+ entity: entity,
221
+ attributes: attributes.sort((a, b) => a.locale.localeCompare(b.locale) || a.id.localeCompare(b.id)),
222
+ customFields: customFields.sort((a, b) => a.locale.localeCompare(b.locale) || a.fieldName.localeCompare(b.fieldName) || a.id.localeCompare(b.id)),
223
+ media: media.sort((a, b) => a.mediaAssetId.localeCompare(b.mediaAssetId) || (a.variantId ?? "").localeCompare(b.variantId ?? "")),
224
+ categories: categoriesForEntity.sort((a, b) => a.categoryId.localeCompare(b.categoryId)),
225
+ brands: brandsForEntity.sort((a, b) => a.brandId.localeCompare(b.brandId)),
226
+ tags: tagsForEntity.sort((a, b) => a.tagId.localeCompare(b.tagId)),
227
+ };
228
+ }
229
+ async findEntityMedia(entityId, ctx) {
230
+ const db = this.getDb(ctx);
231
+ return db
232
+ .select()
233
+ .from(entityMedia)
234
+ .where(eq(entityMedia.entityId, entityId));
235
+ }
236
+ async deleteEntityMediaByEntityId(entityId, ctx) {
237
+ const db = this.getDb(ctx);
238
+ await db.delete(entityMedia).where(eq(entityMedia.entityId, entityId));
239
+ }
240
+ async createEntityMedia(data, ctx) {
241
+ const db = this.getDb(ctx);
242
+ const rows = await db.insert(entityMedia).values(data).returning();
243
+ return rows[0];
244
+ }
87
245
  // ─────────────────────────────────────────────────────────────────────────────
88
246
  // Sellable Attributes
89
247
  // ─────────────────────────────────────────────────────────────────────────────
@@ -134,23 +292,169 @@ export class CatalogRepository {
134
292
  // Custom Fields
135
293
  // ─────────────────────────────────────────────────────────────────────────────
136
294
  async findCustomFieldsByEntityId(entityId, ctx) {
295
+ const db = this.getDb(ctx);
296
+ return db
297
+ .select()
298
+ .from(sellableCustomFields)
299
+ .where(and(eq(sellableCustomFields.entityId, entityId), eq(sellableCustomFields.status, "approved")));
300
+ }
301
+ async findAllCustomFieldsByEntityId(entityId, ctx) {
137
302
  const db = this.getDb(ctx);
138
303
  return db
139
304
  .select()
140
305
  .from(sellableCustomFields)
141
306
  .where(eq(sellableCustomFields.entityId, entityId));
142
307
  }
308
+ async findProposedCustomField(entityId, fieldName, locale = "en", ctx) {
309
+ const db = this.getDb(ctx);
310
+ const rows = await db
311
+ .select()
312
+ .from(sellableCustomFields)
313
+ .where(and(eq(sellableCustomFields.entityId, entityId), eq(sellableCustomFields.fieldName, fieldName), eq(sellableCustomFields.locale, locale), eq(sellableCustomFields.status, "proposed")))
314
+ .orderBy(desc(sellableCustomFields.createdAt), desc(sellableCustomFields.id))
315
+ .limit(1);
316
+ return rows[0];
317
+ }
318
+ async updateProposedCustomField(id, data, ctx) {
319
+ const db = this.getDb(ctx);
320
+ const rows = await db
321
+ .update(sellableCustomFields)
322
+ .set({ ...data, updatedAt: new Date() })
323
+ .where(and(eq(sellableCustomFields.id, id), eq(sellableCustomFields.status, "proposed")))
324
+ .returning();
325
+ return rows[0];
326
+ }
327
+ async rejectOtherProposedCustomFields(entityId, fieldName, locale, excludeId, ctx) {
328
+ const db = this.getDb(ctx);
329
+ const rows = await db
330
+ .update(sellableCustomFields)
331
+ .set({ status: "rejected", updatedAt: new Date() })
332
+ .where(and(eq(sellableCustomFields.entityId, entityId), eq(sellableCustomFields.fieldName, fieldName), eq(sellableCustomFields.locale, locale), eq(sellableCustomFields.status, "proposed"), ne(sellableCustomFields.id, excludeId)))
333
+ .returning({ id: sellableCustomFields.id });
334
+ return rows.length;
335
+ }
336
+ async listProposedCustomFields(organizationId, pagination, filter, ctx) {
337
+ const db = this.getDb(ctx);
338
+ const page = Math.max(1, pagination.page);
339
+ const limit = Math.max(1, pagination.limit);
340
+ const conditions = [
341
+ eq(sellableCustomFields.status, "proposed"),
342
+ eq(sellableEntities.organizationId, organizationId),
343
+ ];
344
+ if (filter?.entityType !== undefined) {
345
+ conditions.push(eq(sellableEntities.type, filter.entityType));
346
+ }
347
+ const where = and(...conditions);
348
+ const rows = await db
349
+ .select({
350
+ customField: sellableCustomFields,
351
+ entitySlug: sellableEntities.slug,
352
+ entityType: sellableEntities.type,
353
+ })
354
+ .from(sellableCustomFields)
355
+ .innerJoin(sellableEntities, eq(sellableCustomFields.entityId, sellableEntities.id))
356
+ .where(where)
357
+ .orderBy(asc(sellableCustomFields.createdAt), asc(sellableCustomFields.id))
358
+ .limit(limit)
359
+ .offset((page - 1) * limit);
360
+ const totalRows = await db
361
+ .select({ count: count() })
362
+ .from(sellableCustomFields)
363
+ .innerJoin(sellableEntities, eq(sellableCustomFields.entityId, sellableEntities.id))
364
+ .where(where);
365
+ return {
366
+ items: rows.map(({ customField, entitySlug, entityType }) => ({
367
+ ...customField,
368
+ entitySlug,
369
+ entityType,
370
+ })),
371
+ total: totalRows[0]?.count ?? 0,
372
+ };
373
+ }
374
+ async findCustomFieldByName(entityId, fieldName, locale = "en", ctx) {
375
+ const db = this.getDb(ctx);
376
+ const rows = await db
377
+ .select()
378
+ .from(sellableCustomFields)
379
+ .where(and(eq(sellableCustomFields.entityId, entityId), eq(sellableCustomFields.fieldName, fieldName), eq(sellableCustomFields.locale, locale), eq(sellableCustomFields.status, "approved")));
380
+ return rows[0];
381
+ }
143
382
  async createCustomField(data, ctx) {
144
383
  const db = this.getDb(ctx);
145
384
  const rows = await db.insert(sellableCustomFields).values(data).returning();
146
385
  return rows[0];
147
386
  }
387
+ async updateCustomField(id, data, ctx) {
388
+ const db = this.getDb(ctx);
389
+ const rows = await db
390
+ .update(sellableCustomFields)
391
+ .set({ ...data, updatedAt: new Date() })
392
+ .where(eq(sellableCustomFields.id, id))
393
+ .returning();
394
+ return rows[0];
395
+ }
396
+ async upsertCustomField(entityId, fieldName, locale, data, ctx) {
397
+ const existing = await this.findCustomFieldByName(entityId, fieldName, locale, ctx);
398
+ if (existing) {
399
+ const updated = await this.updateCustomField(existing.id, data, ctx);
400
+ return updated;
401
+ }
402
+ return this.createCustomField({ ...data, entityId, fieldName, locale }, ctx);
403
+ }
404
+ async deleteCustomField(entityId, fieldName, locale = "en", ctx) {
405
+ const db = this.getDb(ctx);
406
+ await db
407
+ .delete(sellableCustomFields)
408
+ .where(and(eq(sellableCustomFields.entityId, entityId), eq(sellableCustomFields.fieldName, fieldName), eq(sellableCustomFields.locale, locale), eq(sellableCustomFields.status, "approved")));
409
+ }
148
410
  async deleteCustomFieldsByEntityId(entityId, ctx) {
149
411
  const db = this.getDb(ctx);
150
412
  await db
151
413
  .delete(sellableCustomFields)
152
414
  .where(eq(sellableCustomFields.entityId, entityId));
153
415
  }
416
+ async findEntityFieldDefinitions(organizationId, entityType, ctx) {
417
+ const db = this.getDb(ctx);
418
+ const conditions = [eq(entityFieldDefinitions.organizationId, organizationId)];
419
+ if (entityType !== undefined) {
420
+ conditions.push(eq(entityFieldDefinitions.entityType, entityType));
421
+ }
422
+ return db
423
+ .select()
424
+ .from(entityFieldDefinitions)
425
+ .where(and(...conditions))
426
+ .orderBy(asc(entityFieldDefinitions.entityType), asc(entityFieldDefinitions.sortOrder), asc(entityFieldDefinitions.name));
427
+ }
428
+ async findActiveEntityFieldDefinitions(organizationId, entityType, ctx) {
429
+ const db = this.getDb(ctx);
430
+ return db
431
+ .select()
432
+ .from(entityFieldDefinitions)
433
+ .where(and(eq(entityFieldDefinitions.organizationId, organizationId), eq(entityFieldDefinitions.entityType, entityType), eq(entityFieldDefinitions.status, "active")))
434
+ .orderBy(asc(entityFieldDefinitions.sortOrder), asc(entityFieldDefinitions.name));
435
+ }
436
+ async findEntityFieldDefinitionById(organizationId, id, ctx) {
437
+ const db = this.getDb(ctx);
438
+ const rows = await db
439
+ .select()
440
+ .from(entityFieldDefinitions)
441
+ .where(and(eq(entityFieldDefinitions.organizationId, organizationId), eq(entityFieldDefinitions.id, id)));
442
+ return rows[0];
443
+ }
444
+ async createEntityFieldDefinition(data, ctx) {
445
+ const db = this.getDb(ctx);
446
+ const rows = await db.insert(entityFieldDefinitions).values(data).returning();
447
+ return rows[0];
448
+ }
449
+ async updateEntityFieldDefinition(organizationId, id, data, ctx) {
450
+ const db = this.getDb(ctx);
451
+ const rows = await db
452
+ .update(entityFieldDefinitions)
453
+ .set({ ...data, updatedAt: new Date() })
454
+ .where(and(eq(entityFieldDefinitions.organizationId, organizationId), eq(entityFieldDefinitions.id, id)))
455
+ .returning();
456
+ return rows[0];
457
+ }
154
458
  // ─────────────────────────────────────────────────────────────────────────────
155
459
  // Categories
156
460
  // ─────────────────────────────────────────────────────────────────────────────
@@ -296,6 +600,21 @@ export class CatalogRepository {
296
600
  .from(entityBrands)
297
601
  .where(eq(entityBrands.entityId, entityId));
298
602
  }
603
+ async findEntityTags(entityId, ctx) {
604
+ const db = this.getDb(ctx);
605
+ return db
606
+ .select()
607
+ .from(entityTags)
608
+ .where(eq(entityTags.entityId, entityId));
609
+ }
610
+ async addEntityTag(entityId, tagId, ctx) {
611
+ const db = this.getDb(ctx);
612
+ await db.insert(entityTags).values({ entityId, tagId }).onConflictDoNothing();
613
+ }
614
+ async deleteEntityTagsByEntityId(entityId, ctx) {
615
+ const db = this.getDb(ctx);
616
+ await db.delete(entityTags).where(eq(entityTags.entityId, entityId));
617
+ }
299
618
  async addEntityToBrand(entityId, brandId, sortOrder = 0, ctx) {
300
619
  const db = this.getDb(ctx);
301
620
  await db
@@ -0,0 +1,4 @@
1
+ import type { SellableEntityRevisionSnapshot } from "./schema.js";
2
+ export declare function canonicalSerialize(value: unknown): string;
3
+ export declare function comparableSerialize(snapshot: SellableEntityRevisionSnapshot): string;
4
+ //# sourceMappingURL=revision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revision.d.ts","sourceRoot":"","sources":["../../../src/modules/catalog/revision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAElE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAWzD;AAWD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,8BAA8B,GAAG,MAAM,CAUpF"}
@@ -0,0 +1,33 @@
1
+ export function canonicalSerialize(value) {
2
+ if (value instanceof Date)
3
+ return JSON.stringify(value.toISOString());
4
+ if (Array.isArray(value))
5
+ return `[${value.map(canonicalSerialize).join(",")}]`;
6
+ if (value !== null && typeof value === "object") {
7
+ const record = value;
8
+ return `{${Object.keys(record)
9
+ .sort()
10
+ .map((key) => `${JSON.stringify(key)}:${canonicalSerialize(record[key])}`)
11
+ .join(",")}}`;
12
+ }
13
+ return JSON.stringify(value) ?? "null";
14
+ }
15
+ // Row bookkeeping timestamps are excluded from comparison only at row roots,
16
+ // never inside nested jsonb where a user key may share the same name.
17
+ function stripRowTimestamps(row) {
18
+ const { createdAt, updatedAt, ...rest } = row;
19
+ void createdAt;
20
+ void updatedAt;
21
+ return rest;
22
+ }
23
+ export function comparableSerialize(snapshot) {
24
+ return canonicalSerialize({
25
+ entity: stripRowTimestamps(snapshot.entity),
26
+ attributes: snapshot.attributes.map(stripRowTimestamps),
27
+ customFields: snapshot.customFields.map(stripRowTimestamps),
28
+ media: snapshot.media.map(stripRowTimestamps),
29
+ categories: snapshot.categories.map(stripRowTimestamps),
30
+ brands: snapshot.brands.map(stripRowTimestamps),
31
+ tags: (snapshot.tags ?? []).map(stripRowTimestamps),
32
+ });
33
+ }