@open-mercato/core 0.4.5-develop-610fbb24ec → 0.4.5-develop-636d33c995
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/modules/catalog/data/validators.js +4 -3
- package/dist/modules/catalog/data/validators.js.map +2 -2
- package/package.json +3 -3
- package/src/modules/catalog/data/validators.ts +47 -45
- package/src/modules/customers/migrations/.snapshot-open-mercato.json +236 -0
- package/src/modules/customers/migrations/.snapshot-openmercato.json +236 -0
|
@@ -99,7 +99,7 @@ function productUomCrossFieldRefinement(input, ctx) {
|
|
|
99
99
|
});
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
|
-
const
|
|
102
|
+
const productBaseSchema = scoped.extend({
|
|
103
103
|
title: z.string().trim().min(1).max(255),
|
|
104
104
|
subtitle: z.string().trim().max(255).optional(),
|
|
105
105
|
description: z.string().trim().max(4e3).optional(),
|
|
@@ -138,10 +138,11 @@ const productCreateSchema = scoped.extend({
|
|
|
138
138
|
offers: z.array(offerInputSchema.omit({ id: true })).optional(),
|
|
139
139
|
categoryIds: z.array(uuid()).max(100).optional(),
|
|
140
140
|
tags: z.array(tagLabelSchema).max(100).optional()
|
|
141
|
-
})
|
|
141
|
+
});
|
|
142
|
+
const productCreateSchema = productBaseSchema.superRefine(productUomCrossFieldRefinement);
|
|
142
143
|
const productUpdateSchema = z.object({
|
|
143
144
|
id: uuid()
|
|
144
|
-
}).merge(
|
|
145
|
+
}).merge(productBaseSchema.partial()).extend({
|
|
145
146
|
productType: productTypeSchema.optional()
|
|
146
147
|
}).superRefine(productUomCrossFieldRefinement);
|
|
147
148
|
const variantCreateSchema = scoped.extend({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/modules/catalog/data/validators.ts"],
|
|
4
|
-
"sourcesContent": ["import { z } from 'zod'\nimport { CATALOG_PRICE_DISPLAY_MODES, CATALOG_PRODUCT_TYPES } from './types'\nimport { REFERENCE_UNIT_CODES } from '../lib/unitCodes'\n\nconst uuid = () => z.string().uuid()\n\nconst scoped = z.object({\n organizationId: uuid(),\n tenantId: uuid(),\n})\n\nconst tenantScoped = z.object({\n tenantId: uuid(),\n})\n\nconst currencyCodeSchema = z\n .string()\n .trim()\n .regex(/^[A-Z]{3}$/, 'currency code must be a three-letter ISO code')\n\nconst metadataSchema = z.record(z.string(), z.unknown()).optional()\n\nconst slugSchema = z\n .string()\n .trim()\n .toLowerCase()\n .regex(/^[a-z0-9\\-_]+$/, 'code must contain lowercase letters, digits, hyphen, or underscore')\n .max(150)\n\nconst handleSchema = z\n .string()\n .trim()\n .toLowerCase()\n .regex(/^[a-z0-9\\-_]+$/, 'handle must contain lowercase letters, digits, hyphen, or underscore')\n .max(150)\n\nconst skuSchema = z\n .string()\n .trim()\n .regex(/^[A-Za-z0-9\\-_\\.]+$/, 'SKU may include letters, numbers, hyphen, underscore, or period')\n .max(191)\n\nconst variantOptionValuesSchema = z\n .record(\n z\n .string()\n .trim()\n .min(1)\n .max(191),\n z.string().trim().max(255)\n )\n .optional()\n\nconst optionChoiceSchema = z.object({\n code: slugSchema,\n label: z.string().trim().max(255).optional(),\n})\n\nconst optionDefinitionSchema = z.object({\n code: slugSchema,\n label: z.string().trim().min(1).max(255),\n description: z.string().trim().max(2000).optional(),\n inputType: z.enum(['select', 'text', 'textarea', 'number']),\n isRequired: z.boolean().optional(),\n isMultiple: z.boolean().optional(),\n choices: z.array(optionChoiceSchema).max(200).optional(),\n})\n\nconst optionSchema = z.object({\n version: z.number().int().min(1).optional(),\n name: z.string().trim().max(255).optional(),\n description: z.string().trim().max(4000).optional(),\n options: z.array(optionDefinitionSchema).max(64),\n})\n\nconst tagLabelSchema = z.string().trim().min(1).max(100)\n\nconst offerBaseSchema = z.object({\n channelId: uuid(),\n title: z.string().trim().min(1).max(255),\n description: z.string().trim().max(4000).optional(),\n defaultMediaId: uuid().optional().nullable(),\n defaultMediaUrl: z.string().trim().max(500).optional().nullable(),\n metadata: metadataSchema,\n isActive: z.boolean().optional(),\n})\n\nconst offerInputSchema = offerBaseSchema.extend({\n id: uuid().optional(),\n})\n\nexport const offerCreateSchema = scoped.merge(\n offerBaseSchema.extend({\n productId: uuid(),\n })\n)\n\nexport const offerUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(\n offerBaseSchema\n .extend({\n productId: uuid().optional(),\n })\n .partial()\n )\n\nconst productTypeSchema = z.enum(CATALOG_PRODUCT_TYPES)\nconst uomRoundingModeSchema = z.enum(['half_up', 'down', 'up'])\nconst unitPriceReferenceUnitSchema = z.enum(REFERENCE_UNIT_CODES)\nconst unitPriceConfigSchema = z.object({\n enabled: z.boolean().optional(),\n referenceUnit: unitPriceReferenceUnitSchema.nullable().optional(),\n baseQuantity: z.coerce.number().positive().optional(),\n})\n\nfunction productUomCrossFieldRefinement(\n input: {\n defaultUnit?: string | null\n defaultSalesUnit?: string | null\n unitPriceEnabled?: boolean\n unitPriceReferenceUnit?: string | null\n unitPriceBaseQuantity?: number\n unitPrice?: { enabled?: boolean; referenceUnit?: string | null; baseQuantity?: number }\n },\n ctx: z.RefinementCtx,\n) {\n const defaultUnit = typeof input.defaultUnit === 'string' ? input.defaultUnit.trim() : ''\n const defaultSalesUnit =\n typeof input.defaultSalesUnit === 'string' ? input.defaultSalesUnit.trim() : ''\n if (defaultSalesUnit && !defaultUnit) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['defaultSalesUnit'],\n message: 'catalog.products.validation.baseUnitRequired',\n })\n }\n const unitPriceEnabled = input.unitPrice?.enabled ?? input.unitPriceEnabled ?? false\n if (!unitPriceEnabled) return\n const referenceUnit =\n input.unitPrice?.referenceUnit ?? input.unitPriceReferenceUnit ?? null\n const baseQuantity =\n input.unitPrice?.baseQuantity ?? input.unitPriceBaseQuantity ?? null\n if (!referenceUnit) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['unitPrice'],\n message: 'catalog.products.validation.referenceUnitRequired',\n })\n }\n if (baseQuantity === null || baseQuantity === undefined || Number(baseQuantity) <= 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['unitPrice'],\n message: 'catalog.products.unitPrice.errors.baseQuantity',\n })\n }\n}\n\nexport const productCreateSchema = scoped\n .extend({\n title: z.string().trim().min(1).max(255),\n subtitle: z.string().trim().max(255).optional(),\n description: z.string().trim().max(4000).optional(),\n sku: skuSchema.optional(),\n handle: handleSchema.optional(),\n taxRateId: uuid().nullable().optional(),\n taxRate: z.coerce.number().min(0).max(100).optional().nullable(),\n productType: productTypeSchema.default('simple'),\n statusEntryId: uuid().optional(),\n primaryCurrencyCode: currencyCodeSchema.optional(),\n defaultUnit: z.string().trim().max(50).optional().nullable(),\n defaultSalesUnit: z.string().trim().max(50).optional().nullable(),\n defaultSalesUnitQuantity: z.coerce.number().positive().optional(),\n uomRoundingScale: z.coerce.number().int().min(0).max(6).optional(),\n uomRoundingMode: uomRoundingModeSchema.optional(),\n unitPriceEnabled: z.boolean().optional(),\n unitPriceReferenceUnit: unitPriceReferenceUnitSchema.nullable().optional(),\n unitPriceBaseQuantity: z.coerce.number().positive().optional(),\n unitPrice: unitPriceConfigSchema.optional(),\n defaultMediaId: uuid().optional().nullable(),\n defaultMediaUrl: z.string().trim().max(500).optional().nullable(),\n weightValue: z.coerce.number().min(0).optional().nullable(),\n weightUnit: z.string().trim().max(25).optional().nullable(),\n dimensions: z\n .object({\n width: z.coerce.number().min(0).optional(),\n height: z.coerce.number().min(0).optional(),\n depth: z.coerce.number().min(0).optional(),\n unit: z.string().trim().max(25).optional(),\n })\n .optional()\n .nullable(),\n optionSchemaId: uuid().nullable().optional(),\n optionSchema: optionSchema.optional(),\n customFieldsetCode: slugSchema.nullable().optional(),\n isConfigurable: z.boolean().optional(),\n isActive: z.boolean().optional(),\n metadata: metadataSchema,\n offers: z.array(offerInputSchema.omit({ id: true })).optional(),\n categoryIds: z.array(uuid()).max(100).optional(),\n tags: z.array(tagLabelSchema).max(100).optional(),\n })\n .superRefine(productUomCrossFieldRefinement)\n\nexport const productUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(productCreateSchema.partial())\n .extend({\n productType: productTypeSchema.optional(),\n })\n .superRefine(productUomCrossFieldRefinement)\n\nexport const variantCreateSchema = scoped.extend({\n productId: uuid(),\n name: z.string().trim().max(255).optional(),\n sku: z\n .string()\n .trim()\n .regex(/^[A-Za-z0-9\\-_\\.]+$/)\n .max(191)\n .optional(),\n barcode: z.string().trim().max(191).optional(),\n statusEntryId: uuid().optional(),\n isDefault: z.boolean().optional(),\n isActive: z.boolean().optional(),\n defaultMediaId: uuid().optional().nullable(),\n defaultMediaUrl: z.string().trim().max(500).optional().nullable(),\n weightValue: z.coerce.number().min(0).optional(),\n weightUnit: z.string().trim().max(25).optional(),\n taxRateId: uuid().nullable().optional(),\n taxRate: z.coerce.number().min(0).max(100).optional().nullable(),\n dimensions: z\n .object({\n width: z.coerce.number().min(0).optional(),\n height: z.coerce.number().min(0).optional(),\n depth: z.coerce.number().min(0).optional(),\n unit: z.string().trim().max(25).optional(),\n })\n .optional(),\n metadata: metadataSchema,\n optionValues: variantOptionValuesSchema,\n customFieldsetCode: slugSchema.nullable().optional(),\n})\n\nexport const variantUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(variantCreateSchema.partial())\n\nexport const optionSchemaTemplateCreateSchema = scoped.extend({\n name: z.string().trim().min(1).max(255),\n code: slugSchema.optional(),\n description: z.string().trim().max(4000).optional(),\n schema: optionSchema,\n metadata: metadataSchema,\n isActive: z.boolean().optional(),\n})\n\nexport const optionSchemaTemplateUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(optionSchemaTemplateCreateSchema.partial())\n\nconst priceDisplayModeSchema = z.enum(CATALOG_PRICE_DISPLAY_MODES)\n\nexport const priceKindCreateSchema = tenantScoped.extend({\n code: slugSchema,\n title: z.string().trim().min(1).max(255),\n displayMode: priceDisplayModeSchema.default('excluding-tax'),\n currencyCode: currencyCodeSchema.optional(),\n isPromotion: z.boolean().optional(),\n isActive: z.boolean().optional(),\n})\n\nexport const priceKindUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(priceKindCreateSchema.partial())\n\nexport const priceCreateSchema = scoped.extend({\n variantId: uuid().optional(),\n productId: uuid().optional(),\n offerId: uuid().optional(),\n currencyCode: currencyCodeSchema,\n priceKindId: uuid(),\n minQuantity: z.coerce.number().int().min(1).optional(),\n maxQuantity: z.coerce.number().int().min(1).optional(),\n unitPriceNet: z.coerce.number().min(0).optional(),\n unitPriceGross: z.coerce.number().min(0).optional(),\n taxRate: z.coerce.number().min(0).max(100).optional(),\n taxRateId: uuid().nullable().optional(),\n channelId: uuid().optional(),\n userId: uuid().optional(),\n userGroupId: uuid().optional(),\n customerId: uuid().optional(),\n customerGroupId: uuid().optional(),\n metadata: metadataSchema,\n startsAt: z.coerce.date().optional(),\n endsAt: z.coerce.date().optional(),\n})\n\nexport const priceUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(priceCreateSchema.partial())\n\nexport const categoryCreateSchema = scoped.extend({\n name: z.string().trim().min(1).max(255),\n slug: slugSchema.optional().nullable(),\n description: z.string().trim().max(2000).optional(),\n parentId: uuid().optional().nullable(),\n isActive: z.boolean().optional(),\n})\n\nexport const categoryUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(categoryCreateSchema.partial())\n\nexport const productUnitConversionCreateSchema = scoped.extend({\n productId: uuid(),\n unitCode: z.string().trim().min(1).max(50),\n toBaseFactor: z.coerce.number().positive().max(1_000_000),\n sortOrder: z.coerce.number().int().optional(),\n isActive: z.boolean().optional(),\n metadata: metadataSchema,\n})\n\nexport const productUnitConversionUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(productUnitConversionCreateSchema.omit({ productId: true }).partial())\n\nexport const productUnitConversionDeleteSchema = scoped.extend({\n id: uuid(),\n})\n\nexport type ProductCreateInput = z.infer<typeof productCreateSchema>\nexport type ProductUpdateInput = z.infer<typeof productUpdateSchema>\nexport type VariantCreateInput = z.infer<typeof variantCreateSchema>\nexport type VariantUpdateInput = z.infer<typeof variantUpdateSchema>\nexport type OptionSchemaTemplateCreateInput = z.infer<typeof optionSchemaTemplateCreateSchema>\nexport type OptionSchemaTemplateUpdateInput = z.infer<typeof optionSchemaTemplateUpdateSchema>\nexport type PriceKindCreateInput = z.infer<typeof priceKindCreateSchema>\nexport type PriceKindUpdateInput = z.infer<typeof priceKindUpdateSchema>\nexport type PriceCreateInput = z.infer<typeof priceCreateSchema>\nexport type PriceUpdateInput = z.infer<typeof priceUpdateSchema>\nexport type CategoryCreateInput = z.infer<typeof categoryCreateSchema>\nexport type CategoryUpdateInput = z.infer<typeof categoryUpdateSchema>\nexport type OfferInput = z.infer<typeof offerInputSchema>\nexport type OfferCreateInput = z.infer<typeof offerCreateSchema>\nexport type OfferUpdateInput = z.infer<typeof offerUpdateSchema>\nexport type ProductUnitConversionCreateInput = z.infer<typeof productUnitConversionCreateSchema>\nexport type ProductUnitConversionUpdateInput = z.infer<typeof productUnitConversionUpdateSchema>\nexport type ProductUnitConversionDeleteInput = z.infer<typeof productUnitConversionDeleteSchema>\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod'\nimport { CATALOG_PRICE_DISPLAY_MODES, CATALOG_PRODUCT_TYPES } from './types'\nimport { REFERENCE_UNIT_CODES } from '../lib/unitCodes'\n\nconst uuid = () => z.string().uuid()\n\nconst scoped = z.object({\n organizationId: uuid(),\n tenantId: uuid(),\n})\n\nconst tenantScoped = z.object({\n tenantId: uuid(),\n})\n\nconst currencyCodeSchema = z\n .string()\n .trim()\n .regex(/^[A-Z]{3}$/, 'currency code must be a three-letter ISO code')\n\nconst metadataSchema = z.record(z.string(), z.unknown()).optional()\n\nconst slugSchema = z\n .string()\n .trim()\n .toLowerCase()\n .regex(/^[a-z0-9\\-_]+$/, 'code must contain lowercase letters, digits, hyphen, or underscore')\n .max(150)\n\nconst handleSchema = z\n .string()\n .trim()\n .toLowerCase()\n .regex(/^[a-z0-9\\-_]+$/, 'handle must contain lowercase letters, digits, hyphen, or underscore')\n .max(150)\n\nconst skuSchema = z\n .string()\n .trim()\n .regex(/^[A-Za-z0-9\\-_\\.]+$/, 'SKU may include letters, numbers, hyphen, underscore, or period')\n .max(191)\n\nconst variantOptionValuesSchema = z\n .record(\n z\n .string()\n .trim()\n .min(1)\n .max(191),\n z.string().trim().max(255)\n )\n .optional()\n\nconst optionChoiceSchema = z.object({\n code: slugSchema,\n label: z.string().trim().max(255).optional(),\n})\n\nconst optionDefinitionSchema = z.object({\n code: slugSchema,\n label: z.string().trim().min(1).max(255),\n description: z.string().trim().max(2000).optional(),\n inputType: z.enum(['select', 'text', 'textarea', 'number']),\n isRequired: z.boolean().optional(),\n isMultiple: z.boolean().optional(),\n choices: z.array(optionChoiceSchema).max(200).optional(),\n})\n\nconst optionSchema = z.object({\n version: z.number().int().min(1).optional(),\n name: z.string().trim().max(255).optional(),\n description: z.string().trim().max(4000).optional(),\n options: z.array(optionDefinitionSchema).max(64),\n})\n\nconst tagLabelSchema = z.string().trim().min(1).max(100)\n\nconst offerBaseSchema = z.object({\n channelId: uuid(),\n title: z.string().trim().min(1).max(255),\n description: z.string().trim().max(4000).optional(),\n defaultMediaId: uuid().optional().nullable(),\n defaultMediaUrl: z.string().trim().max(500).optional().nullable(),\n metadata: metadataSchema,\n isActive: z.boolean().optional(),\n})\n\nconst offerInputSchema = offerBaseSchema.extend({\n id: uuid().optional(),\n})\n\nexport const offerCreateSchema = scoped.merge(\n offerBaseSchema.extend({\n productId: uuid(),\n })\n)\n\nexport const offerUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(\n offerBaseSchema\n .extend({\n productId: uuid().optional(),\n })\n .partial()\n )\n\nconst productTypeSchema = z.enum(CATALOG_PRODUCT_TYPES)\nconst uomRoundingModeSchema = z.enum(['half_up', 'down', 'up'])\nconst unitPriceReferenceUnitSchema = z.enum(REFERENCE_UNIT_CODES)\nconst unitPriceConfigSchema = z.object({\n enabled: z.boolean().optional(),\n referenceUnit: unitPriceReferenceUnitSchema.nullable().optional(),\n baseQuantity: z.coerce.number().positive().optional(),\n})\n\nfunction productUomCrossFieldRefinement(\n input: {\n defaultUnit?: string | null\n defaultSalesUnit?: string | null\n unitPriceEnabled?: boolean\n unitPriceReferenceUnit?: string | null\n unitPriceBaseQuantity?: number\n unitPrice?: { enabled?: boolean; referenceUnit?: string | null; baseQuantity?: number }\n },\n ctx: z.RefinementCtx,\n) {\n const defaultUnit = typeof input.defaultUnit === 'string' ? input.defaultUnit.trim() : ''\n const defaultSalesUnit =\n typeof input.defaultSalesUnit === 'string' ? input.defaultSalesUnit.trim() : ''\n if (defaultSalesUnit && !defaultUnit) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['defaultSalesUnit'],\n message: 'catalog.products.validation.baseUnitRequired',\n })\n }\n const unitPriceEnabled = input.unitPrice?.enabled ?? input.unitPriceEnabled ?? false\n if (!unitPriceEnabled) return\n const referenceUnit =\n input.unitPrice?.referenceUnit ?? input.unitPriceReferenceUnit ?? null\n const baseQuantity =\n input.unitPrice?.baseQuantity ?? input.unitPriceBaseQuantity ?? null\n if (!referenceUnit) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['unitPrice'],\n message: 'catalog.products.validation.referenceUnitRequired',\n })\n }\n if (baseQuantity === null || baseQuantity === undefined || Number(baseQuantity) <= 0) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: ['unitPrice'],\n message: 'catalog.products.unitPrice.errors.baseQuantity',\n })\n }\n}\n\n// Base schema without refinements (used for .partial() in update schema)\nconst productBaseSchema = scoped.extend({\n title: z.string().trim().min(1).max(255),\n subtitle: z.string().trim().max(255).optional(),\n description: z.string().trim().max(4000).optional(),\n sku: skuSchema.optional(),\n handle: handleSchema.optional(),\n taxRateId: uuid().nullable().optional(),\n taxRate: z.coerce.number().min(0).max(100).optional().nullable(),\n productType: productTypeSchema.default('simple'),\n statusEntryId: uuid().optional(),\n primaryCurrencyCode: currencyCodeSchema.optional(),\n defaultUnit: z.string().trim().max(50).optional().nullable(),\n defaultSalesUnit: z.string().trim().max(50).optional().nullable(),\n defaultSalesUnitQuantity: z.coerce.number().positive().optional(),\n uomRoundingScale: z.coerce.number().int().min(0).max(6).optional(),\n uomRoundingMode: uomRoundingModeSchema.optional(),\n unitPriceEnabled: z.boolean().optional(),\n unitPriceReferenceUnit: unitPriceReferenceUnitSchema.nullable().optional(),\n unitPriceBaseQuantity: z.coerce.number().positive().optional(),\n unitPrice: unitPriceConfigSchema.optional(),\n defaultMediaId: uuid().optional().nullable(),\n defaultMediaUrl: z.string().trim().max(500).optional().nullable(),\n weightValue: z.coerce.number().min(0).optional().nullable(),\n weightUnit: z.string().trim().max(25).optional().nullable(),\n dimensions: z\n .object({\n width: z.coerce.number().min(0).optional(),\n height: z.coerce.number().min(0).optional(),\n depth: z.coerce.number().min(0).optional(),\n unit: z.string().trim().max(25).optional(),\n })\n .optional()\n .nullable(),\n optionSchemaId: uuid().nullable().optional(),\n optionSchema: optionSchema.optional(),\n customFieldsetCode: slugSchema.nullable().optional(),\n isConfigurable: z.boolean().optional(),\n isActive: z.boolean().optional(),\n metadata: metadataSchema,\n offers: z.array(offerInputSchema.omit({ id: true })).optional(),\n categoryIds: z.array(uuid()).max(100).optional(),\n tags: z.array(tagLabelSchema).max(100).optional(),\n})\n\nexport const productCreateSchema = productBaseSchema\n .superRefine(productUomCrossFieldRefinement)\n\nexport const productUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(productBaseSchema.partial())\n .extend({\n productType: productTypeSchema.optional(),\n })\n .superRefine(productUomCrossFieldRefinement)\n\nexport const variantCreateSchema = scoped.extend({\n productId: uuid(),\n name: z.string().trim().max(255).optional(),\n sku: z\n .string()\n .trim()\n .regex(/^[A-Za-z0-9\\-_\\.]+$/)\n .max(191)\n .optional(),\n barcode: z.string().trim().max(191).optional(),\n statusEntryId: uuid().optional(),\n isDefault: z.boolean().optional(),\n isActive: z.boolean().optional(),\n defaultMediaId: uuid().optional().nullable(),\n defaultMediaUrl: z.string().trim().max(500).optional().nullable(),\n weightValue: z.coerce.number().min(0).optional(),\n weightUnit: z.string().trim().max(25).optional(),\n taxRateId: uuid().nullable().optional(),\n taxRate: z.coerce.number().min(0).max(100).optional().nullable(),\n dimensions: z\n .object({\n width: z.coerce.number().min(0).optional(),\n height: z.coerce.number().min(0).optional(),\n depth: z.coerce.number().min(0).optional(),\n unit: z.string().trim().max(25).optional(),\n })\n .optional(),\n metadata: metadataSchema,\n optionValues: variantOptionValuesSchema,\n customFieldsetCode: slugSchema.nullable().optional(),\n})\n\nexport const variantUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(variantCreateSchema.partial())\n\nexport const optionSchemaTemplateCreateSchema = scoped.extend({\n name: z.string().trim().min(1).max(255),\n code: slugSchema.optional(),\n description: z.string().trim().max(4000).optional(),\n schema: optionSchema,\n metadata: metadataSchema,\n isActive: z.boolean().optional(),\n})\n\nexport const optionSchemaTemplateUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(optionSchemaTemplateCreateSchema.partial())\n\nconst priceDisplayModeSchema = z.enum(CATALOG_PRICE_DISPLAY_MODES)\n\nexport const priceKindCreateSchema = tenantScoped.extend({\n code: slugSchema,\n title: z.string().trim().min(1).max(255),\n displayMode: priceDisplayModeSchema.default('excluding-tax'),\n currencyCode: currencyCodeSchema.optional(),\n isPromotion: z.boolean().optional(),\n isActive: z.boolean().optional(),\n})\n\nexport const priceKindUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(priceKindCreateSchema.partial())\n\nexport const priceCreateSchema = scoped.extend({\n variantId: uuid().optional(),\n productId: uuid().optional(),\n offerId: uuid().optional(),\n currencyCode: currencyCodeSchema,\n priceKindId: uuid(),\n minQuantity: z.coerce.number().int().min(1).optional(),\n maxQuantity: z.coerce.number().int().min(1).optional(),\n unitPriceNet: z.coerce.number().min(0).optional(),\n unitPriceGross: z.coerce.number().min(0).optional(),\n taxRate: z.coerce.number().min(0).max(100).optional(),\n taxRateId: uuid().nullable().optional(),\n channelId: uuid().optional(),\n userId: uuid().optional(),\n userGroupId: uuid().optional(),\n customerId: uuid().optional(),\n customerGroupId: uuid().optional(),\n metadata: metadataSchema,\n startsAt: z.coerce.date().optional(),\n endsAt: z.coerce.date().optional(),\n})\n\nexport const priceUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(priceCreateSchema.partial())\n\nexport const categoryCreateSchema = scoped.extend({\n name: z.string().trim().min(1).max(255),\n slug: slugSchema.optional().nullable(),\n description: z.string().trim().max(2000).optional(),\n parentId: uuid().optional().nullable(),\n isActive: z.boolean().optional(),\n})\n\nexport const categoryUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(categoryCreateSchema.partial())\n\nexport const productUnitConversionCreateSchema = scoped.extend({\n productId: uuid(),\n unitCode: z.string().trim().min(1).max(50),\n toBaseFactor: z.coerce.number().positive().max(1_000_000),\n sortOrder: z.coerce.number().int().optional(),\n isActive: z.boolean().optional(),\n metadata: metadataSchema,\n})\n\nexport const productUnitConversionUpdateSchema = z\n .object({\n id: uuid(),\n })\n .merge(productUnitConversionCreateSchema.omit({ productId: true }).partial())\n\nexport const productUnitConversionDeleteSchema = scoped.extend({\n id: uuid(),\n})\n\nexport type ProductCreateInput = z.infer<typeof productCreateSchema>\nexport type ProductUpdateInput = z.infer<typeof productUpdateSchema>\nexport type VariantCreateInput = z.infer<typeof variantCreateSchema>\nexport type VariantUpdateInput = z.infer<typeof variantUpdateSchema>\nexport type OptionSchemaTemplateCreateInput = z.infer<typeof optionSchemaTemplateCreateSchema>\nexport type OptionSchemaTemplateUpdateInput = z.infer<typeof optionSchemaTemplateUpdateSchema>\nexport type PriceKindCreateInput = z.infer<typeof priceKindCreateSchema>\nexport type PriceKindUpdateInput = z.infer<typeof priceKindUpdateSchema>\nexport type PriceCreateInput = z.infer<typeof priceCreateSchema>\nexport type PriceUpdateInput = z.infer<typeof priceUpdateSchema>\nexport type CategoryCreateInput = z.infer<typeof categoryCreateSchema>\nexport type CategoryUpdateInput = z.infer<typeof categoryUpdateSchema>\nexport type OfferInput = z.infer<typeof offerInputSchema>\nexport type OfferCreateInput = z.infer<typeof offerCreateSchema>\nexport type OfferUpdateInput = z.infer<typeof offerUpdateSchema>\nexport type ProductUnitConversionCreateInput = z.infer<typeof productUnitConversionCreateSchema>\nexport type ProductUnitConversionUpdateInput = z.infer<typeof productUnitConversionUpdateSchema>\nexport type ProductUnitConversionDeleteInput = z.infer<typeof productUnitConversionDeleteSchema>\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-mercato/core",
|
|
3
|
-
"version": "0.4.5-develop-
|
|
3
|
+
"version": "0.4.5-develop-636d33c995",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -207,7 +207,8 @@
|
|
|
207
207
|
}
|
|
208
208
|
},
|
|
209
209
|
"dependencies": {
|
|
210
|
-
"@open-mercato/shared": "0.4.5-develop-
|
|
210
|
+
"@open-mercato/shared": "0.4.5-develop-636d33c995",
|
|
211
|
+
"@types/html-to-text": "^9.0.4",
|
|
211
212
|
"@types/semver": "^7.5.8",
|
|
212
213
|
"@xyflow/react": "^12.6.0",
|
|
213
214
|
"ai": "^6.0.0",
|
|
@@ -220,7 +221,6 @@
|
|
|
220
221
|
"@testing-library/dom": "^10.4.1",
|
|
221
222
|
"@testing-library/jest-dom": "^6.9.1",
|
|
222
223
|
"@testing-library/react": "^16.3.1",
|
|
223
|
-
"@types/html-to-text": "^9.0.4",
|
|
224
224
|
"@types/jest": "^30.0.0",
|
|
225
225
|
"jest": "^30.2.0",
|
|
226
226
|
"jest-environment-jsdom": "^30.2.0",
|
|
@@ -159,57 +159,59 @@ function productUomCrossFieldRefinement(
|
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
162
|
+
// Base schema without refinements (used for .partial() in update schema)
|
|
163
|
+
const productBaseSchema = scoped.extend({
|
|
164
|
+
title: z.string().trim().min(1).max(255),
|
|
165
|
+
subtitle: z.string().trim().max(255).optional(),
|
|
166
|
+
description: z.string().trim().max(4000).optional(),
|
|
167
|
+
sku: skuSchema.optional(),
|
|
168
|
+
handle: handleSchema.optional(),
|
|
169
|
+
taxRateId: uuid().nullable().optional(),
|
|
170
|
+
taxRate: z.coerce.number().min(0).max(100).optional().nullable(),
|
|
171
|
+
productType: productTypeSchema.default('simple'),
|
|
172
|
+
statusEntryId: uuid().optional(),
|
|
173
|
+
primaryCurrencyCode: currencyCodeSchema.optional(),
|
|
174
|
+
defaultUnit: z.string().trim().max(50).optional().nullable(),
|
|
175
|
+
defaultSalesUnit: z.string().trim().max(50).optional().nullable(),
|
|
176
|
+
defaultSalesUnitQuantity: z.coerce.number().positive().optional(),
|
|
177
|
+
uomRoundingScale: z.coerce.number().int().min(0).max(6).optional(),
|
|
178
|
+
uomRoundingMode: uomRoundingModeSchema.optional(),
|
|
179
|
+
unitPriceEnabled: z.boolean().optional(),
|
|
180
|
+
unitPriceReferenceUnit: unitPriceReferenceUnitSchema.nullable().optional(),
|
|
181
|
+
unitPriceBaseQuantity: z.coerce.number().positive().optional(),
|
|
182
|
+
unitPrice: unitPriceConfigSchema.optional(),
|
|
183
|
+
defaultMediaId: uuid().optional().nullable(),
|
|
184
|
+
defaultMediaUrl: z.string().trim().max(500).optional().nullable(),
|
|
185
|
+
weightValue: z.coerce.number().min(0).optional().nullable(),
|
|
186
|
+
weightUnit: z.string().trim().max(25).optional().nullable(),
|
|
187
|
+
dimensions: z
|
|
188
|
+
.object({
|
|
189
|
+
width: z.coerce.number().min(0).optional(),
|
|
190
|
+
height: z.coerce.number().min(0).optional(),
|
|
191
|
+
depth: z.coerce.number().min(0).optional(),
|
|
192
|
+
unit: z.string().trim().max(25).optional(),
|
|
193
|
+
})
|
|
194
|
+
.optional()
|
|
195
|
+
.nullable(),
|
|
196
|
+
optionSchemaId: uuid().nullable().optional(),
|
|
197
|
+
optionSchema: optionSchema.optional(),
|
|
198
|
+
customFieldsetCode: slugSchema.nullable().optional(),
|
|
199
|
+
isConfigurable: z.boolean().optional(),
|
|
200
|
+
isActive: z.boolean().optional(),
|
|
201
|
+
metadata: metadataSchema,
|
|
202
|
+
offers: z.array(offerInputSchema.omit({ id: true })).optional(),
|
|
203
|
+
categoryIds: z.array(uuid()).max(100).optional(),
|
|
204
|
+
tags: z.array(tagLabelSchema).max(100).optional(),
|
|
205
|
+
})
|
|
206
|
+
|
|
207
|
+
export const productCreateSchema = productBaseSchema
|
|
206
208
|
.superRefine(productUomCrossFieldRefinement)
|
|
207
209
|
|
|
208
210
|
export const productUpdateSchema = z
|
|
209
211
|
.object({
|
|
210
212
|
id: uuid(),
|
|
211
213
|
})
|
|
212
|
-
.merge(
|
|
214
|
+
.merge(productBaseSchema.partial())
|
|
213
215
|
.extend({
|
|
214
216
|
productType: productTypeSchema.optional(),
|
|
215
217
|
})
|
|
@@ -175,6 +175,24 @@
|
|
|
175
175
|
"nullable": true,
|
|
176
176
|
"length": 6,
|
|
177
177
|
"mappedType": "datetime"
|
|
178
|
+
},
|
|
179
|
+
"pipeline_id": {
|
|
180
|
+
"name": "pipeline_id",
|
|
181
|
+
"type": "uuid",
|
|
182
|
+
"unsigned": false,
|
|
183
|
+
"autoincrement": false,
|
|
184
|
+
"primary": false,
|
|
185
|
+
"nullable": true,
|
|
186
|
+
"mappedType": "uuid"
|
|
187
|
+
},
|
|
188
|
+
"pipeline_stage_id": {
|
|
189
|
+
"name": "pipeline_stage_id",
|
|
190
|
+
"type": "uuid",
|
|
191
|
+
"unsigned": false,
|
|
192
|
+
"autoincrement": false,
|
|
193
|
+
"primary": false,
|
|
194
|
+
"nullable": true,
|
|
195
|
+
"mappedType": "uuid"
|
|
178
196
|
}
|
|
179
197
|
},
|
|
180
198
|
"name": "customer_deals",
|
|
@@ -2585,6 +2603,224 @@
|
|
|
2585
2603
|
}
|
|
2586
2604
|
},
|
|
2587
2605
|
"nativeEnums": {}
|
|
2606
|
+
},
|
|
2607
|
+
{
|
|
2608
|
+
"columns": {
|
|
2609
|
+
"id": {
|
|
2610
|
+
"name": "id",
|
|
2611
|
+
"type": "uuid",
|
|
2612
|
+
"unsigned": false,
|
|
2613
|
+
"autoincrement": false,
|
|
2614
|
+
"primary": false,
|
|
2615
|
+
"nullable": false,
|
|
2616
|
+
"default": "gen_random_uuid()",
|
|
2617
|
+
"mappedType": "uuid"
|
|
2618
|
+
},
|
|
2619
|
+
"organization_id": {
|
|
2620
|
+
"name": "organization_id",
|
|
2621
|
+
"type": "uuid",
|
|
2622
|
+
"unsigned": false,
|
|
2623
|
+
"autoincrement": false,
|
|
2624
|
+
"primary": false,
|
|
2625
|
+
"nullable": false,
|
|
2626
|
+
"mappedType": "uuid"
|
|
2627
|
+
},
|
|
2628
|
+
"tenant_id": {
|
|
2629
|
+
"name": "tenant_id",
|
|
2630
|
+
"type": "uuid",
|
|
2631
|
+
"unsigned": false,
|
|
2632
|
+
"autoincrement": false,
|
|
2633
|
+
"primary": false,
|
|
2634
|
+
"nullable": false,
|
|
2635
|
+
"mappedType": "uuid"
|
|
2636
|
+
},
|
|
2637
|
+
"name": {
|
|
2638
|
+
"name": "name",
|
|
2639
|
+
"type": "text",
|
|
2640
|
+
"unsigned": false,
|
|
2641
|
+
"autoincrement": false,
|
|
2642
|
+
"primary": false,
|
|
2643
|
+
"nullable": false,
|
|
2644
|
+
"mappedType": "text"
|
|
2645
|
+
},
|
|
2646
|
+
"is_default": {
|
|
2647
|
+
"name": "is_default",
|
|
2648
|
+
"type": "boolean",
|
|
2649
|
+
"unsigned": false,
|
|
2650
|
+
"autoincrement": false,
|
|
2651
|
+
"primary": false,
|
|
2652
|
+
"nullable": false,
|
|
2653
|
+
"default": "false",
|
|
2654
|
+
"mappedType": "boolean"
|
|
2655
|
+
},
|
|
2656
|
+
"created_at": {
|
|
2657
|
+
"name": "created_at",
|
|
2658
|
+
"type": "timestamptz",
|
|
2659
|
+
"unsigned": false,
|
|
2660
|
+
"autoincrement": false,
|
|
2661
|
+
"primary": false,
|
|
2662
|
+
"nullable": false,
|
|
2663
|
+
"length": 6,
|
|
2664
|
+
"mappedType": "datetime"
|
|
2665
|
+
},
|
|
2666
|
+
"updated_at": {
|
|
2667
|
+
"name": "updated_at",
|
|
2668
|
+
"type": "timestamptz",
|
|
2669
|
+
"unsigned": false,
|
|
2670
|
+
"autoincrement": false,
|
|
2671
|
+
"primary": false,
|
|
2672
|
+
"nullable": false,
|
|
2673
|
+
"length": 6,
|
|
2674
|
+
"mappedType": "datetime"
|
|
2675
|
+
}
|
|
2676
|
+
},
|
|
2677
|
+
"name": "customer_pipelines",
|
|
2678
|
+
"schema": "public",
|
|
2679
|
+
"indexes": [
|
|
2680
|
+
{
|
|
2681
|
+
"keyName": "customer_pipelines_org_tenant_idx",
|
|
2682
|
+
"columnNames": [
|
|
2683
|
+
"organization_id",
|
|
2684
|
+
"tenant_id"
|
|
2685
|
+
],
|
|
2686
|
+
"composite": true,
|
|
2687
|
+
"constraint": false,
|
|
2688
|
+
"primary": false,
|
|
2689
|
+
"unique": false
|
|
2690
|
+
},
|
|
2691
|
+
{
|
|
2692
|
+
"keyName": "customer_pipelines_pkey",
|
|
2693
|
+
"columnNames": [
|
|
2694
|
+
"id"
|
|
2695
|
+
],
|
|
2696
|
+
"composite": false,
|
|
2697
|
+
"constraint": true,
|
|
2698
|
+
"primary": true,
|
|
2699
|
+
"unique": true
|
|
2700
|
+
}
|
|
2701
|
+
],
|
|
2702
|
+
"checks": [],
|
|
2703
|
+
"foreignKeys": {},
|
|
2704
|
+
"nativeEnums": {}
|
|
2705
|
+
},
|
|
2706
|
+
{
|
|
2707
|
+
"columns": {
|
|
2708
|
+
"id": {
|
|
2709
|
+
"name": "id",
|
|
2710
|
+
"type": "uuid",
|
|
2711
|
+
"unsigned": false,
|
|
2712
|
+
"autoincrement": false,
|
|
2713
|
+
"primary": false,
|
|
2714
|
+
"nullable": false,
|
|
2715
|
+
"default": "gen_random_uuid()",
|
|
2716
|
+
"mappedType": "uuid"
|
|
2717
|
+
},
|
|
2718
|
+
"organization_id": {
|
|
2719
|
+
"name": "organization_id",
|
|
2720
|
+
"type": "uuid",
|
|
2721
|
+
"unsigned": false,
|
|
2722
|
+
"autoincrement": false,
|
|
2723
|
+
"primary": false,
|
|
2724
|
+
"nullable": false,
|
|
2725
|
+
"mappedType": "uuid"
|
|
2726
|
+
},
|
|
2727
|
+
"tenant_id": {
|
|
2728
|
+
"name": "tenant_id",
|
|
2729
|
+
"type": "uuid",
|
|
2730
|
+
"unsigned": false,
|
|
2731
|
+
"autoincrement": false,
|
|
2732
|
+
"primary": false,
|
|
2733
|
+
"nullable": false,
|
|
2734
|
+
"mappedType": "uuid"
|
|
2735
|
+
},
|
|
2736
|
+
"pipeline_id": {
|
|
2737
|
+
"name": "pipeline_id",
|
|
2738
|
+
"type": "uuid",
|
|
2739
|
+
"unsigned": false,
|
|
2740
|
+
"autoincrement": false,
|
|
2741
|
+
"primary": false,
|
|
2742
|
+
"nullable": false,
|
|
2743
|
+
"mappedType": "uuid"
|
|
2744
|
+
},
|
|
2745
|
+
"name": {
|
|
2746
|
+
"name": "name",
|
|
2747
|
+
"type": "text",
|
|
2748
|
+
"unsigned": false,
|
|
2749
|
+
"autoincrement": false,
|
|
2750
|
+
"primary": false,
|
|
2751
|
+
"nullable": false,
|
|
2752
|
+
"mappedType": "text"
|
|
2753
|
+
},
|
|
2754
|
+
"position": {
|
|
2755
|
+
"name": "position",
|
|
2756
|
+
"type": "int",
|
|
2757
|
+
"unsigned": false,
|
|
2758
|
+
"autoincrement": false,
|
|
2759
|
+
"primary": false,
|
|
2760
|
+
"nullable": false,
|
|
2761
|
+
"default": "0",
|
|
2762
|
+
"mappedType": "integer"
|
|
2763
|
+
},
|
|
2764
|
+
"created_at": {
|
|
2765
|
+
"name": "created_at",
|
|
2766
|
+
"type": "timestamptz",
|
|
2767
|
+
"unsigned": false,
|
|
2768
|
+
"autoincrement": false,
|
|
2769
|
+
"primary": false,
|
|
2770
|
+
"nullable": false,
|
|
2771
|
+
"length": 6,
|
|
2772
|
+
"mappedType": "datetime"
|
|
2773
|
+
},
|
|
2774
|
+
"updated_at": {
|
|
2775
|
+
"name": "updated_at",
|
|
2776
|
+
"type": "timestamptz",
|
|
2777
|
+
"unsigned": false,
|
|
2778
|
+
"autoincrement": false,
|
|
2779
|
+
"primary": false,
|
|
2780
|
+
"nullable": false,
|
|
2781
|
+
"length": 6,
|
|
2782
|
+
"mappedType": "datetime"
|
|
2783
|
+
}
|
|
2784
|
+
},
|
|
2785
|
+
"name": "customer_pipeline_stages",
|
|
2786
|
+
"schema": "public",
|
|
2787
|
+
"indexes": [
|
|
2788
|
+
{
|
|
2789
|
+
"keyName": "customer_pipeline_stages_pipeline_position_idx",
|
|
2790
|
+
"columnNames": [
|
|
2791
|
+
"pipeline_id",
|
|
2792
|
+
"position"
|
|
2793
|
+
],
|
|
2794
|
+
"composite": true,
|
|
2795
|
+
"constraint": false,
|
|
2796
|
+
"primary": false,
|
|
2797
|
+
"unique": false
|
|
2798
|
+
},
|
|
2799
|
+
{
|
|
2800
|
+
"keyName": "customer_pipeline_stages_org_tenant_idx",
|
|
2801
|
+
"columnNames": [
|
|
2802
|
+
"organization_id",
|
|
2803
|
+
"tenant_id"
|
|
2804
|
+
],
|
|
2805
|
+
"composite": true,
|
|
2806
|
+
"constraint": false,
|
|
2807
|
+
"primary": false,
|
|
2808
|
+
"unique": false
|
|
2809
|
+
},
|
|
2810
|
+
{
|
|
2811
|
+
"keyName": "customer_pipeline_stages_pkey",
|
|
2812
|
+
"columnNames": [
|
|
2813
|
+
"id"
|
|
2814
|
+
],
|
|
2815
|
+
"composite": false,
|
|
2816
|
+
"constraint": true,
|
|
2817
|
+
"primary": true,
|
|
2818
|
+
"unique": true
|
|
2819
|
+
}
|
|
2820
|
+
],
|
|
2821
|
+
"checks": [],
|
|
2822
|
+
"foreignKeys": {},
|
|
2823
|
+
"nativeEnums": {}
|
|
2588
2824
|
}
|
|
2589
2825
|
],
|
|
2590
2826
|
"nativeEnums": {}
|
|
@@ -157,6 +157,24 @@
|
|
|
157
157
|
"nullable": true,
|
|
158
158
|
"length": 6,
|
|
159
159
|
"mappedType": "datetime"
|
|
160
|
+
},
|
|
161
|
+
"pipeline_id": {
|
|
162
|
+
"name": "pipeline_id",
|
|
163
|
+
"type": "uuid",
|
|
164
|
+
"unsigned": false,
|
|
165
|
+
"autoincrement": false,
|
|
166
|
+
"primary": false,
|
|
167
|
+
"nullable": true,
|
|
168
|
+
"mappedType": "uuid"
|
|
169
|
+
},
|
|
170
|
+
"pipeline_stage_id": {
|
|
171
|
+
"name": "pipeline_stage_id",
|
|
172
|
+
"type": "uuid",
|
|
173
|
+
"unsigned": false,
|
|
174
|
+
"autoincrement": false,
|
|
175
|
+
"primary": false,
|
|
176
|
+
"nullable": true,
|
|
177
|
+
"mappedType": "uuid"
|
|
160
178
|
}
|
|
161
179
|
},
|
|
162
180
|
"name": "customer_deals",
|
|
@@ -2349,6 +2367,224 @@
|
|
|
2349
2367
|
}
|
|
2350
2368
|
},
|
|
2351
2369
|
"nativeEnums": {}
|
|
2370
|
+
},
|
|
2371
|
+
{
|
|
2372
|
+
"columns": {
|
|
2373
|
+
"id": {
|
|
2374
|
+
"name": "id",
|
|
2375
|
+
"type": "uuid",
|
|
2376
|
+
"unsigned": false,
|
|
2377
|
+
"autoincrement": false,
|
|
2378
|
+
"primary": false,
|
|
2379
|
+
"nullable": false,
|
|
2380
|
+
"default": "gen_random_uuid()",
|
|
2381
|
+
"mappedType": "uuid"
|
|
2382
|
+
},
|
|
2383
|
+
"organization_id": {
|
|
2384
|
+
"name": "organization_id",
|
|
2385
|
+
"type": "uuid",
|
|
2386
|
+
"unsigned": false,
|
|
2387
|
+
"autoincrement": false,
|
|
2388
|
+
"primary": false,
|
|
2389
|
+
"nullable": false,
|
|
2390
|
+
"mappedType": "uuid"
|
|
2391
|
+
},
|
|
2392
|
+
"tenant_id": {
|
|
2393
|
+
"name": "tenant_id",
|
|
2394
|
+
"type": "uuid",
|
|
2395
|
+
"unsigned": false,
|
|
2396
|
+
"autoincrement": false,
|
|
2397
|
+
"primary": false,
|
|
2398
|
+
"nullable": false,
|
|
2399
|
+
"mappedType": "uuid"
|
|
2400
|
+
},
|
|
2401
|
+
"name": {
|
|
2402
|
+
"name": "name",
|
|
2403
|
+
"type": "text",
|
|
2404
|
+
"unsigned": false,
|
|
2405
|
+
"autoincrement": false,
|
|
2406
|
+
"primary": false,
|
|
2407
|
+
"nullable": false,
|
|
2408
|
+
"mappedType": "text"
|
|
2409
|
+
},
|
|
2410
|
+
"is_default": {
|
|
2411
|
+
"name": "is_default",
|
|
2412
|
+
"type": "boolean",
|
|
2413
|
+
"unsigned": false,
|
|
2414
|
+
"autoincrement": false,
|
|
2415
|
+
"primary": false,
|
|
2416
|
+
"nullable": false,
|
|
2417
|
+
"default": "false",
|
|
2418
|
+
"mappedType": "boolean"
|
|
2419
|
+
},
|
|
2420
|
+
"created_at": {
|
|
2421
|
+
"name": "created_at",
|
|
2422
|
+
"type": "timestamptz",
|
|
2423
|
+
"unsigned": false,
|
|
2424
|
+
"autoincrement": false,
|
|
2425
|
+
"primary": false,
|
|
2426
|
+
"nullable": false,
|
|
2427
|
+
"length": 6,
|
|
2428
|
+
"mappedType": "datetime"
|
|
2429
|
+
},
|
|
2430
|
+
"updated_at": {
|
|
2431
|
+
"name": "updated_at",
|
|
2432
|
+
"type": "timestamptz",
|
|
2433
|
+
"unsigned": false,
|
|
2434
|
+
"autoincrement": false,
|
|
2435
|
+
"primary": false,
|
|
2436
|
+
"nullable": false,
|
|
2437
|
+
"length": 6,
|
|
2438
|
+
"mappedType": "datetime"
|
|
2439
|
+
}
|
|
2440
|
+
},
|
|
2441
|
+
"name": "customer_pipelines",
|
|
2442
|
+
"schema": "public",
|
|
2443
|
+
"indexes": [
|
|
2444
|
+
{
|
|
2445
|
+
"keyName": "customer_pipelines_org_tenant_idx",
|
|
2446
|
+
"columnNames": [
|
|
2447
|
+
"organization_id",
|
|
2448
|
+
"tenant_id"
|
|
2449
|
+
],
|
|
2450
|
+
"composite": true,
|
|
2451
|
+
"constraint": false,
|
|
2452
|
+
"primary": false,
|
|
2453
|
+
"unique": false
|
|
2454
|
+
},
|
|
2455
|
+
{
|
|
2456
|
+
"keyName": "customer_pipelines_pkey",
|
|
2457
|
+
"columnNames": [
|
|
2458
|
+
"id"
|
|
2459
|
+
],
|
|
2460
|
+
"composite": false,
|
|
2461
|
+
"constraint": true,
|
|
2462
|
+
"primary": true,
|
|
2463
|
+
"unique": true
|
|
2464
|
+
}
|
|
2465
|
+
],
|
|
2466
|
+
"checks": [],
|
|
2467
|
+
"foreignKeys": {},
|
|
2468
|
+
"nativeEnums": {}
|
|
2469
|
+
},
|
|
2470
|
+
{
|
|
2471
|
+
"columns": {
|
|
2472
|
+
"id": {
|
|
2473
|
+
"name": "id",
|
|
2474
|
+
"type": "uuid",
|
|
2475
|
+
"unsigned": false,
|
|
2476
|
+
"autoincrement": false,
|
|
2477
|
+
"primary": false,
|
|
2478
|
+
"nullable": false,
|
|
2479
|
+
"default": "gen_random_uuid()",
|
|
2480
|
+
"mappedType": "uuid"
|
|
2481
|
+
},
|
|
2482
|
+
"organization_id": {
|
|
2483
|
+
"name": "organization_id",
|
|
2484
|
+
"type": "uuid",
|
|
2485
|
+
"unsigned": false,
|
|
2486
|
+
"autoincrement": false,
|
|
2487
|
+
"primary": false,
|
|
2488
|
+
"nullable": false,
|
|
2489
|
+
"mappedType": "uuid"
|
|
2490
|
+
},
|
|
2491
|
+
"tenant_id": {
|
|
2492
|
+
"name": "tenant_id",
|
|
2493
|
+
"type": "uuid",
|
|
2494
|
+
"unsigned": false,
|
|
2495
|
+
"autoincrement": false,
|
|
2496
|
+
"primary": false,
|
|
2497
|
+
"nullable": false,
|
|
2498
|
+
"mappedType": "uuid"
|
|
2499
|
+
},
|
|
2500
|
+
"pipeline_id": {
|
|
2501
|
+
"name": "pipeline_id",
|
|
2502
|
+
"type": "uuid",
|
|
2503
|
+
"unsigned": false,
|
|
2504
|
+
"autoincrement": false,
|
|
2505
|
+
"primary": false,
|
|
2506
|
+
"nullable": false,
|
|
2507
|
+
"mappedType": "uuid"
|
|
2508
|
+
},
|
|
2509
|
+
"name": {
|
|
2510
|
+
"name": "name",
|
|
2511
|
+
"type": "text",
|
|
2512
|
+
"unsigned": false,
|
|
2513
|
+
"autoincrement": false,
|
|
2514
|
+
"primary": false,
|
|
2515
|
+
"nullable": false,
|
|
2516
|
+
"mappedType": "text"
|
|
2517
|
+
},
|
|
2518
|
+
"position": {
|
|
2519
|
+
"name": "position",
|
|
2520
|
+
"type": "int",
|
|
2521
|
+
"unsigned": false,
|
|
2522
|
+
"autoincrement": false,
|
|
2523
|
+
"primary": false,
|
|
2524
|
+
"nullable": false,
|
|
2525
|
+
"default": "0",
|
|
2526
|
+
"mappedType": "integer"
|
|
2527
|
+
},
|
|
2528
|
+
"created_at": {
|
|
2529
|
+
"name": "created_at",
|
|
2530
|
+
"type": "timestamptz",
|
|
2531
|
+
"unsigned": false,
|
|
2532
|
+
"autoincrement": false,
|
|
2533
|
+
"primary": false,
|
|
2534
|
+
"nullable": false,
|
|
2535
|
+
"length": 6,
|
|
2536
|
+
"mappedType": "datetime"
|
|
2537
|
+
},
|
|
2538
|
+
"updated_at": {
|
|
2539
|
+
"name": "updated_at",
|
|
2540
|
+
"type": "timestamptz",
|
|
2541
|
+
"unsigned": false,
|
|
2542
|
+
"autoincrement": false,
|
|
2543
|
+
"primary": false,
|
|
2544
|
+
"nullable": false,
|
|
2545
|
+
"length": 6,
|
|
2546
|
+
"mappedType": "datetime"
|
|
2547
|
+
}
|
|
2548
|
+
},
|
|
2549
|
+
"name": "customer_pipeline_stages",
|
|
2550
|
+
"schema": "public",
|
|
2551
|
+
"indexes": [
|
|
2552
|
+
{
|
|
2553
|
+
"keyName": "customer_pipeline_stages_pipeline_position_idx",
|
|
2554
|
+
"columnNames": [
|
|
2555
|
+
"pipeline_id",
|
|
2556
|
+
"position"
|
|
2557
|
+
],
|
|
2558
|
+
"composite": true,
|
|
2559
|
+
"constraint": false,
|
|
2560
|
+
"primary": false,
|
|
2561
|
+
"unique": false
|
|
2562
|
+
},
|
|
2563
|
+
{
|
|
2564
|
+
"keyName": "customer_pipeline_stages_org_tenant_idx",
|
|
2565
|
+
"columnNames": [
|
|
2566
|
+
"organization_id",
|
|
2567
|
+
"tenant_id"
|
|
2568
|
+
],
|
|
2569
|
+
"composite": true,
|
|
2570
|
+
"constraint": false,
|
|
2571
|
+
"primary": false,
|
|
2572
|
+
"unique": false
|
|
2573
|
+
},
|
|
2574
|
+
{
|
|
2575
|
+
"keyName": "customer_pipeline_stages_pkey",
|
|
2576
|
+
"columnNames": [
|
|
2577
|
+
"id"
|
|
2578
|
+
],
|
|
2579
|
+
"composite": false,
|
|
2580
|
+
"constraint": true,
|
|
2581
|
+
"primary": true,
|
|
2582
|
+
"unique": true
|
|
2583
|
+
}
|
|
2584
|
+
],
|
|
2585
|
+
"checks": [],
|
|
2586
|
+
"foreignKeys": {},
|
|
2587
|
+
"nativeEnums": {}
|
|
2352
2588
|
}
|
|
2353
2589
|
],
|
|
2354
2590
|
"nativeEnums": {}
|