From 6f18030f88f60c2a22039803298b8017ed9da63b Mon Sep 17 00:00:00 2001 From: m7338ohd-debug Date: Sat, 25 Jul 2026 16:01:13 +0530 Subject: [PATCH] upadted flow --- app.js | 11 +- .../catalogs/catalogs/catalog.repository.js | 2 +- .../catalogs/catalogs/catalog.service.js | 124 +++++++++++-- .../catalogs/catalogs/catalog.validation.js | 22 ++- .../catalogs/familyVariantAxis.model.js | 40 ++++- .../catalogs/familyVariantAxisValue.model.js | 42 +++++ .../products/products/product.controller.js | 33 ++++ .../products/products/product.routes.js | 23 +++ .../products/products/product.service.js | 61 +++++++ .../products/productVariantValue.model.js | 50 ++++++ ...000-create-variant-architecture-tables.cjs | 169 ++++++++++++++++++ src/shared/config/multer.config.js | 12 +- src/shared/database/models.js | 5 + uploads/file-1784889835686-987349251.png | Bin 0 -> 32918 bytes uploads/file-1784972477523-568619782.png | Bin 0 -> 25717 bytes uploads/file-1784972946995-331362761.png | Bin 0 -> 30529 bytes 16 files changed, 569 insertions(+), 25 deletions(-) create mode 100644 src/features/catalogs/catalogs/familyVariantAxisValue.model.js create mode 100644 src/features/products/products/productVariantValue.model.js create mode 100644 src/migrations/20260724120000-create-variant-architecture-tables.cjs create mode 100644 uploads/file-1784889835686-987349251.png create mode 100644 uploads/file-1784972477523-568619782.png create mode 100644 uploads/file-1784972946995-331362761.png diff --git a/app.js b/app.js index 057c103..a9c247a 100644 --- a/app.js +++ b/app.js @@ -13,7 +13,9 @@ import { buildContext } from './src/shared/middleware/context.middleware.js'; const app = express(); // Middlewares -app.use(helmet()); +app.use(helmet({ + crossOriginResourcePolicy: { policy: 'cross-origin' }, +})); app.use(cors({ origin: process.env.CORS_ORIGIN || '*', methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS', 'PATCH'], @@ -38,7 +40,12 @@ app.get('/health', (req, res) => { }); // Centralized Feature Router Loader -app.use('/uploads', express.static('uploads')); +app.use('/uploads', express.static('uploads', { + setHeaders: (res) => { + res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin'); + res.setHeader('Access-Control-Allow-Origin', '*'); + } +})); registerRoutes(app); // Global Error Handler diff --git a/src/features/catalogs/catalogs/catalog.repository.js b/src/features/catalogs/catalogs/catalog.repository.js index b77cd1d..d9dfef0 100644 --- a/src/features/catalogs/catalogs/catalog.repository.js +++ b/src/features/catalogs/catalogs/catalog.repository.js @@ -92,7 +92,7 @@ export class CatalogRepository { { model: models.Attribute, as: 'variantAxes', - through: { attributes: [] }, + through: { attributes: ['id', 'required', 'display_order', 'active'] }, required: false, include: [ { diff --git a/src/features/catalogs/catalogs/catalog.service.js b/src/features/catalogs/catalogs/catalog.service.js index a304111..28bafa2 100644 --- a/src/features/catalogs/catalogs/catalog.service.js +++ b/src/features/catalogs/catalogs/catalog.service.js @@ -101,6 +101,22 @@ export class CatalogService { throw new ApiError(404, 'Product Family not found'); } await this.attachCounts(record); + + if (record.variantAxes && Array.isArray(record.variantAxes)) { + for (const axisAttr of record.variantAxes) { + const throughId = axisAttr.FamilyVariantAxis ? axisAttr.FamilyVariantAxis.id : null; + if (throughId) { + const suggestedVals = await models.FamilyVariantAxisValue.findAll({ + where: { axis_id: throughId }, + order: [['sort_order', 'ASC']] + }); + axisAttr.setDataValue('suggestedValues', suggestedVals.map(v => v.value)); + } else { + axisAttr.setDataValue('suggestedValues', []); + } + } + } + return record; } @@ -189,13 +205,15 @@ export class CatalogService { // 4. Variant Strategy Validation & Deduplication let variantAxes = []; if (data.variantAxes && Array.isArray(data.variantAxes)) { - const uniqueAxes = [...new Set(data.variantAxes)]; const attributesSet = new Set(attributes); - const invalidAxes = uniqueAxes.filter(axis => !attributesSet.has(axis)); + const invalidAxes = data.variantAxes.filter(axis => { + const attrId = typeof axis === 'string' ? axis : (axis.attributeId || axis.attribute_id || axis.id); + return !attrId || !attributesSet.has(attrId); + }); if (invalidAxes.length > 0) { throw new Error('Variant axes must be a subset of family attributes'); } - variantAxes = uniqueAxes; + variantAxes = data.variantAxes; } // 5. Asset Family Validation & Deduplication @@ -271,13 +289,23 @@ export class CatalogService { throw new Error(`Total completeness rules weight must equal 100% (currently ${totalWeight}%)`); } + // Category Resolution + const rawCategoryId = data.category || data.category_id || data.categoryId || null; + let categoryId = null; + if (rawCategoryId) { + const catObj = await models.Categorie.findByPk(rawCategoryId, { transaction }); + if (catObj) { + categoryId = catObj.id; + } + } + // 9. Save Catalog const createData = { code: data.code, name: data.name, description: data.description, status: data.status || 'draft', - category_id: null, + category_id: categoryId, workflow_code: workflowCode, completeness_rules: completenessRules, attribute_set_id: attributeSetId @@ -295,11 +323,32 @@ export class CatalogService { } // Save variant axis relationships - for (const attributeId of variantAxes) { - await models.FamilyVariantAxis.create({ + for (let i = 0; i < variantAxes.length; i++) { + const item = variantAxes[i]; + const attrId = typeof item === 'string' ? item : (item.attributeId || item.attribute_id || item.id); + const required = typeof item === 'object' && item.required !== undefined ? !!item.required : true; + const active = typeof item === 'object' && item.active !== undefined ? !!item.active : true; + const displayOrder = typeof item === 'object' && item.display_order !== undefined ? item.display_order : i; + + const axisRecord = await models.FamilyVariantAxis.create({ family_id: record.id, - attribute_id: attributeId + attribute_id: attrId, + required, + display_order: displayOrder, + active }, { transaction }); + + const suggestedValues = typeof item === 'object' ? (item.suggestedValues || item.suggested_values || []) : []; + for (let j = 0; j < suggestedValues.length; j++) { + const valItem = suggestedValues[j]; + const valText = typeof valItem === 'string' ? valItem : valItem.value; + if (!valText) continue; + await models.FamilyVariantAxisValue.create({ + axis_id: axisRecord.id, + value: valText, + sort_order: typeof valItem === 'object' && valItem.sort_order !== undefined ? valItem.sort_order : j + }, { transaction }); + } } // Save asset requirements @@ -420,14 +469,16 @@ export class CatalogService { // 4. Variant Strategy Validation & Deduplication let variantAxes = null; if (data.variantAxes && Array.isArray(data.variantAxes)) { - const uniqueAxes = [...new Set(data.variantAxes)]; const targetAttributes = attributes || (await record.getAttributes({ transaction })).map(a => a.id); const attributesSet = new Set(targetAttributes); - const invalidAxes = uniqueAxes.filter(axis => !attributesSet.has(axis)); + const invalidAxes = data.variantAxes.filter(axis => { + const attrId = typeof axis === 'string' ? axis : (axis.attributeId || axis.attribute_id || axis.id); + return !attrId || !attributesSet.has(attrId); + }); if (invalidAxes.length > 0) { throw new Error('Variant axes must be a subset of family attributes'); } - variantAxes = uniqueAxes; + variantAxes = data.variantAxes; } // 5. Asset Family Validation & Deduplication @@ -509,6 +560,22 @@ export class CatalogService { throw new Error(`Total completeness rules weight must equal 100% (currently ${totalWeight}%)`); } + // Category Resolution for Update + const rawCategoryId = data.hasOwnProperty('category') ? data.category : (data.hasOwnProperty('category_id') ? data.category_id : (data.hasOwnProperty('categoryId') ? data.categoryId : undefined)); + let categoryId = undefined; + if (rawCategoryId !== undefined) { + if (rawCategoryId) { + const catObj = await models.Categorie.findByPk(rawCategoryId, { transaction }); + if (catObj) { + categoryId = catObj.id; + } else { + categoryId = null; + } + } else { + categoryId = null; + } + } + // 9. Update Catalog const updateData = { name: data.name || record.name, @@ -518,6 +585,9 @@ export class CatalogService { completeness_rules: completenessRules, attribute_set_id: attributeSetId }; + if (categoryId !== undefined) { + updateData.category_id = categoryId; + } await record.update(updateData, { transaction }); @@ -535,12 +605,40 @@ export class CatalogService { } if (variantAxes !== null) { + // Find existing axis records to clean up suggested values + const existingAxes = await models.FamilyVariantAxis.findAll({ where: { family_id: id }, transaction }); + const existingAxisIds = existingAxes.map(a => a.id); + if (existingAxisIds.length > 0) { + await models.FamilyVariantAxisValue.destroy({ where: { axis_id: existingAxisIds }, transaction }); + } await models.FamilyVariantAxis.destroy({ where: { family_id: id }, transaction }); - for (const attributeId of variantAxes) { - await models.FamilyVariantAxis.create({ + + for (let i = 0; i < variantAxes.length; i++) { + const item = variantAxes[i]; + const attrId = typeof item === 'string' ? item : (item.attributeId || item.attribute_id || item.id); + const required = typeof item === 'object' && item.required !== undefined ? !!item.required : true; + const active = typeof item === 'object' && item.active !== undefined ? !!item.active : true; + const displayOrder = typeof item === 'object' && item.display_order !== undefined ? item.display_order : i; + + const axisRecord = await models.FamilyVariantAxis.create({ family_id: id, - attribute_id: attributeId + attribute_id: attrId, + required, + display_order: displayOrder, + active }, { transaction }); + + const suggestedValues = typeof item === 'object' ? (item.suggestedValues || item.suggested_values || []) : []; + for (let j = 0; j < suggestedValues.length; j++) { + const valItem = suggestedValues[j]; + const valText = typeof valItem === 'string' ? valItem : valItem.value; + if (!valText) continue; + await models.FamilyVariantAxisValue.create({ + axis_id: axisRecord.id, + value: valText, + sort_order: typeof valItem === 'object' && valItem.sort_order !== undefined ? valItem.sort_order : j + }, { transaction }); + } } await AuditService.log({ action: 'VARIANT_AXES_CHANGED', resource: 'Catalog', resourceId: id, userId: context.userId || 'system', details: variantAxes }); } diff --git a/src/features/catalogs/catalogs/catalog.validation.js b/src/features/catalogs/catalogs/catalog.validation.js index 25fabcb..cfc0788 100644 --- a/src/features/catalogs/catalogs/catalog.validation.js +++ b/src/features/catalogs/catalogs/catalog.validation.js @@ -39,7 +39,16 @@ export const createValidation = [ .isArray() .withMessage('Allowed units must be an array') .custom((value) => value.every(val => typeof val === 'string')) - .withMessage('Allowed units must be an array of unit IDs') + .withMessage('Allowed units must be an array of unit IDs'), + body('category') + .optional({ nullable: true }) + .isString(), + body('category_id') + .optional({ nullable: true }) + .isString(), + body('categoryId') + .optional({ nullable: true }) + .isString() ]; export const updateValidation = [ @@ -85,7 +94,16 @@ export const updateValidation = [ .isArray() .withMessage('Allowed units must be an array') .custom((value) => value.every(val => typeof val === 'string')) - .withMessage('Allowed units must be an array of unit IDs') + .withMessage('Allowed units must be an array of unit IDs'), + body('category') + .optional({ nullable: true }) + .isString(), + body('category_id') + .optional({ nullable: true }) + .isString(), + body('categoryId') + .optional({ nullable: true }) + .isString() ]; export const deleteValidation = [ diff --git a/src/features/catalogs/catalogs/familyVariantAxis.model.js b/src/features/catalogs/catalogs/familyVariantAxis.model.js index d3eef15..618ad09 100644 --- a/src/features/catalogs/catalogs/familyVariantAxis.model.js +++ b/src/features/catalogs/catalogs/familyVariantAxis.model.js @@ -1,20 +1,52 @@ import { Model, DataTypes } from 'sequelize'; export class FamilyVariantAxis extends Model { - static associate(models) {} + static associate(models) { + FamilyVariantAxis.belongsTo(models.Catalog, { + foreignKey: 'family_id', + as: 'family' + }); + FamilyVariantAxis.belongsTo(models.Attribute, { + foreignKey: 'attribute_id', + as: 'attribute' + }); + FamilyVariantAxis.hasMany(models.FamilyVariantAxisValue, { + foreignKey: 'axis_id', + as: 'suggestedValues' + }); + } } export default (sequelize) => { FamilyVariantAxis.init({ + id: { + type: DataTypes.UUID, + defaultValue: DataTypes.UUIDV4, + primaryKey: true, + allowNull: false + }, family_id: { type: DataTypes.UUID, - allowNull: false, - primaryKey: true + allowNull: false }, attribute_id: { type: DataTypes.UUID, + allowNull: false + }, + required: { + type: DataTypes.BOOLEAN, allowNull: false, - primaryKey: true + defaultValue: true + }, + display_order: { + type: DataTypes.INTEGER, + allowNull: false, + defaultValue: 0 + }, + active: { + type: DataTypes.BOOLEAN, + allowNull: false, + defaultValue: true } }, { sequelize, diff --git a/src/features/catalogs/catalogs/familyVariantAxisValue.model.js b/src/features/catalogs/catalogs/familyVariantAxisValue.model.js new file mode 100644 index 0000000..a435377 --- /dev/null +++ b/src/features/catalogs/catalogs/familyVariantAxisValue.model.js @@ -0,0 +1,42 @@ +import { Model, DataTypes } from 'sequelize'; + +export class FamilyVariantAxisValue extends Model { + static associate(models) { + FamilyVariantAxisValue.belongsTo(models.FamilyVariantAxis, { + foreignKey: 'axis_id', + as: 'axis' + }); + } +} + +export default (sequelize) => { + FamilyVariantAxisValue.init({ + id: { + type: DataTypes.UUID, + defaultValue: DataTypes.UUIDV4, + primaryKey: true, + allowNull: false + }, + axis_id: { + type: DataTypes.UUID, + allowNull: false + }, + value: { + type: DataTypes.TEXT, + allowNull: false + }, + sort_order: { + type: DataTypes.INTEGER, + allowNull: false, + defaultValue: 0 + } + }, { + sequelize, + modelName: 'FamilyVariantAxisValue', + tableName: 'family_variant_axis_values', + timestamps: true, + underscored: true + }); + + return FamilyVariantAxisValue; +}; diff --git a/src/features/products/products/product.controller.js b/src/features/products/products/product.controller.js index 213d785..6598786 100644 --- a/src/features/products/products/product.controller.js +++ b/src/features/products/products/product.controller.js @@ -99,6 +99,39 @@ export class ProductController { next(error); } } + + getVariantValues = async (req, res, next) => { + try { + const data = await service.getVariantValues(req.params.id, req.context); + return res.status(200).json({ success: true, data }); + } catch (error) { + next(error); + } + } + + saveVariantValues = async (req, res, next) => { + try { + const data = await service.saveVariantValues(req.params.id, req.body.values, req.context); + return res.status(200).json({ success: true, data }); + } catch (error) { + next(error); + } + } + + generateVariants = async (req, res, next) => { + try { + const result = await service.generateVariants(req.params.id, req.body, req.context); + return res.status(200).json({ + success: true, + variants: result.variants, + generatedCount: result.generatedCount, + warnings: result.warnings + }); + } catch (error) { + next(error); + } + } } export default new ProductController(); + diff --git a/src/features/products/products/product.routes.js b/src/features/products/products/product.routes.js index a683cb1..dd1b004 100644 --- a/src/features/products/products/product.routes.js +++ b/src/features/products/products/product.routes.js @@ -171,4 +171,27 @@ router.post( controller.restore ); +router.get( + '/:id/variant-values', + authenticate, + authorize(['products.items']), + controller.getVariantValues +); + +router.post( + '/:id/variant-values', + authenticate, + authorize(['products.items']), + controller.saveVariantValues +); + +router.post( + '/:id/generate-variants', + authenticate, + authorize(['products.items']), + audit('GENERATE_VARIANTS'), + controller.generateVariants +); + export default router; + diff --git a/src/features/products/products/product.service.js b/src/features/products/products/product.service.js index e8c5714..44105c7 100644 --- a/src/features/products/products/product.service.js +++ b/src/features/products/products/product.service.js @@ -850,6 +850,67 @@ export class ProductService { return restored; } + + async getVariantValues(productId, context = {}) { + const values = await models.ProductVariantValue.findAll({ + where: { product_id: productId }, + include: [ + { + model: models.Attribute, + as: 'axis', + attributes: ['id', 'code', 'name', 'type'] + } + ], + order: [['sort_order', 'ASC'], ['created_at', 'ASC']] + }); + return values; + } + + async saveVariantValues(productId, values = [], context = {}) { + const transaction = await sequelize.transaction(); + try { + await models.ProductVariantValue.destroy({ + where: { product_id: productId }, + transaction + }); + + const records = []; + for (let i = 0; i < values.length; i++) { + const item = values[i]; + if (!item.axis_id || !item.value) continue; + const created = await models.ProductVariantValue.create({ + product_id: productId, + axis_id: item.axis_id, + value: item.value, + sort_order: item.sort_order !== undefined ? item.sort_order : i + }, { transaction }); + records.push(created); + } + + await transaction.commit(); + return records; + } catch (error) { + await transaction.rollback(); + throw error; + } + } + + async generateVariants(productId, data, context = {}) { + // Import variantService dynamically to avoid circular dependencies + const variantService = (await import('../../variants/variants/variant.service.js')).default; + const result = await variantService.generateBatch({ + productId, + axes: data.axes, + skuTemplate: data.skuTemplate + }, context); + + return { + variants: result.variants, + generatedCount: result.created ? result.created.length : 0, + warnings: result.skipped ? result.skipped.map(s => `Skipped combination ${JSON.stringify(s.combination)}: ${s.reason}`) : [] + }; + } } export default new ProductService(); + diff --git a/src/features/products/products/productVariantValue.model.js b/src/features/products/products/productVariantValue.model.js new file mode 100644 index 0000000..32863f7 --- /dev/null +++ b/src/features/products/products/productVariantValue.model.js @@ -0,0 +1,50 @@ +import { Model, DataTypes } from 'sequelize'; + +export class ProductVariantValue extends Model { + static associate(models) { + ProductVariantValue.belongsTo(models.Product, { + foreignKey: 'product_id', + as: 'product' + }); + ProductVariantValue.belongsTo(models.Attribute, { + foreignKey: 'axis_id', + as: 'axis' + }); + } +} + +export default (sequelize) => { + ProductVariantValue.init({ + id: { + type: DataTypes.UUID, + defaultValue: DataTypes.UUIDV4, + primaryKey: true, + allowNull: false + }, + product_id: { + type: DataTypes.UUID, + allowNull: false + }, + axis_id: { + type: DataTypes.UUID, + allowNull: false + }, + value: { + type: DataTypes.TEXT, + allowNull: false + }, + sort_order: { + type: DataTypes.INTEGER, + allowNull: false, + defaultValue: 0 + } + }, { + sequelize, + modelName: 'ProductVariantValue', + tableName: 'product_variant_values', + timestamps: true, + underscored: true + }); + + return ProductVariantValue; +}; diff --git a/src/migrations/20260724120000-create-variant-architecture-tables.cjs b/src/migrations/20260724120000-create-variant-architecture-tables.cjs new file mode 100644 index 0000000..0fdfe91 --- /dev/null +++ b/src/migrations/20260724120000-create-variant-architecture-tables.cjs @@ -0,0 +1,169 @@ +'use strict'; + +module.exports = { + up: async (queryInterface, Sequelize) => { + // 1. Extend or recreate family_variant_axes to ensure id, required, display_order, active exist + const familyAxesExists = await queryInterface.describeTable('family_variant_axes').catch(() => null); + if (familyAxesExists) { + if (!familyAxesExists.id) { + await queryInterface.addColumn('family_variant_axes', 'id', { + type: Sequelize.UUID, + defaultValue: Sequelize.UUIDV4, + allowNull: true + }); + } + if (!familyAxesExists.required) { + await queryInterface.addColumn('family_variant_axes', 'required', { + type: Sequelize.BOOLEAN, + allowNull: false, + defaultValue: true + }); + } + if (!familyAxesExists.display_order) { + await queryInterface.addColumn('family_variant_axes', 'display_order', { + type: Sequelize.INTEGER, + allowNull: false, + defaultValue: 0 + }); + } + if (!familyAxesExists.active) { + await queryInterface.addColumn('family_variant_axes', 'active', { + type: Sequelize.BOOLEAN, + allowNull: false, + defaultValue: true + }); + } + } else { + await queryInterface.createTable('family_variant_axes', { + id: { + type: Sequelize.UUID, + defaultValue: Sequelize.UUIDV4, + primaryKey: true, + allowNull: false + }, + family_id: { + type: Sequelize.UUID, + allowNull: false, + references: { model: 'catalogs', key: 'id' }, + onUpdate: 'CASCADE', + onDelete: 'CASCADE' + }, + attribute_id: { + type: Sequelize.UUID, + allowNull: false, + references: { model: 'attributes', key: 'id' }, + onUpdate: 'CASCADE', + onDelete: 'RESTRICT' + }, + required: { + type: Sequelize.BOOLEAN, + allowNull: false, + defaultValue: true + }, + display_order: { + type: Sequelize.INTEGER, + allowNull: false, + defaultValue: 0 + }, + active: { + type: Sequelize.BOOLEAN, + allowNull: false, + defaultValue: true + }, + created_at: { + type: Sequelize.DATE, + allowNull: false + }, + updated_at: { + type: Sequelize.DATE, + allowNull: false + } + }); + } + + // 2. Create family_variant_axis_values table + const familyAxisValuesExists = await queryInterface.describeTable('family_variant_axis_values').catch(() => null); + if (!familyAxisValuesExists) { + await queryInterface.createTable('family_variant_axis_values', { + id: { + type: Sequelize.UUID, + defaultValue: Sequelize.UUIDV4, + primaryKey: true, + allowNull: false + }, + axis_id: { + type: Sequelize.UUID, + allowNull: false + }, + value: { + type: Sequelize.TEXT, + allowNull: false + }, + sort_order: { + type: Sequelize.INTEGER, + allowNull: false, + defaultValue: 0 + }, + created_at: { + type: Sequelize.DATE, + allowNull: false + }, + updated_at: { + type: Sequelize.DATE, + allowNull: false + } + }); + await queryInterface.addIndex('family_variant_axis_values', ['axis_id'], { name: 'idx_fam_var_axis_val_axis' }).catch(() => null); + } + + // 3. Create product_variant_values table + const productVariantValuesExists = await queryInterface.describeTable('product_variant_values').catch(() => null); + if (!productVariantValuesExists) { + await queryInterface.createTable('product_variant_values', { + id: { + type: Sequelize.UUID, + defaultValue: Sequelize.UUIDV4, + primaryKey: true, + allowNull: false + }, + product_id: { + type: Sequelize.UUID, + allowNull: false, + references: { model: 'products', key: 'id' }, + onUpdate: 'CASCADE', + onDelete: 'CASCADE' + }, + axis_id: { + type: Sequelize.UUID, + allowNull: false, + references: { model: 'attributes', key: 'id' }, + onUpdate: 'CASCADE', + onDelete: 'RESTRICT' + }, + value: { + type: Sequelize.TEXT, + allowNull: false + }, + sort_order: { + type: Sequelize.INTEGER, + allowNull: false, + defaultValue: 0 + }, + created_at: { + type: Sequelize.DATE, + allowNull: false + }, + updated_at: { + type: Sequelize.DATE, + allowNull: false + } + }); + await queryInterface.addIndex('product_variant_values', ['product_id'], { name: 'idx_prod_var_val_prod' }).catch(() => null); + } + }, + + down: async (queryInterface, Sequelize) => { + await queryInterface.dropTable('product_variant_values').catch(() => null); + await queryInterface.dropTable('family_variant_axis_values').catch(() => null); + } +}; diff --git a/src/shared/config/multer.config.js b/src/shared/config/multer.config.js index 5f98525..9f9b35c 100644 --- a/src/shared/config/multer.config.js +++ b/src/shared/config/multer.config.js @@ -18,11 +18,17 @@ const storage = multer.diskStorage({ }); export const fileFilter = (req, file, cb) => { - const allowedTypes = ['image/jpeg', 'image/png', 'image/webp', 'application/pdf', 'text/csv', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']; - if (allowedTypes.includes(file.mimetype)) { + const allowedTypes = [ + 'image/jpeg', 'image/jpg', 'image/png', 'image/webp', 'image/gif', 'image/svg+xml', 'image/avif', 'image/bmp', + 'video/mp4', 'video/webm', 'video/quicktime', + 'application/pdf', 'text/csv', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'application/vnd.ms-excel', 'application/msword', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' + ]; + if (allowedTypes.includes(file.mimetype) || file.mimetype.startsWith('image/') || file.mimetype.startsWith('video/')) { cb(null, true); } else { - cb(new Error('Invalid file type'), false); + cb(new Error(`Invalid file type: ${file.mimetype}`), false); } }; diff --git a/src/shared/database/models.js b/src/shared/database/models.js index 4829c0f..71b3d92 100644 --- a/src/shared/database/models.js +++ b/src/shared/database/models.js @@ -144,6 +144,7 @@ import attributeSetGroupModelInit from '../../features/attributes/attributeSets/ // Product Family Bridge Models import familyAttributeModelInit from '../../features/catalogs/catalogs/familyAttribute.model.js'; import familyVariantAxisModelInit from '../../features/catalogs/catalogs/familyVariantAxis.model.js'; +import familyVariantAxisValueModelInit from '../../features/catalogs/catalogs/familyVariantAxisValue.model.js'; import familyAssetRequirementModelInit from '../../features/catalogs/catalogs/familyAssetRequirement.model.js'; import familyChannelModelInit from '../../features/catalogs/catalogs/familyChannel.model.js'; @@ -173,6 +174,7 @@ import channelModelInit from '../../features/channels/channels/channel.model.js' import channelTypeModelInit from '../../features/channels/channelTypes/channelType.model.js'; import workflowModelInit from '../../features/workflows/workflow.model.js'; import productAttributeValueModelInit from '../../features/products/products/productAttributeValue.model.js'; +import productVariantValueModelInit from '../../features/products/products/productVariantValue.model.js'; import productCompletenessModelInit from '../../features/products/products/productCompleteness.model.js'; export const initializeDatabaseModels = () => { @@ -206,6 +208,7 @@ export const initializeDatabaseModels = () => { // Product Family Bridges registerModel('FamilyAttribute', familyAttributeModelInit); registerModel('FamilyVariantAxis', familyVariantAxisModelInit); + registerModel('FamilyVariantAxisValue', familyVariantAxisValueModelInit); registerModel('FamilyAssetRequirement', familyAssetRequirementModelInit); registerModel('FamilyChannel', familyChannelModelInit); @@ -214,6 +217,7 @@ export const initializeDatabaseModels = () => { registerModel('ChannelType', channelTypeModelInit); registerModel('WorkflowRegistry', workflowModelInit); registerModel('ProductAttributeValue', productAttributeValueModelInit); + registerModel('ProductVariantValue', productVariantValueModelInit); registerModel('ProductCompleteness', productCompletenessModelInit); // Variants @@ -241,3 +245,4 @@ export const initializeDatabaseModels = () => { }; export { models, sequelize }; + diff --git a/uploads/file-1784889835686-987349251.png b/uploads/file-1784889835686-987349251.png new file mode 100644 index 0000000000000000000000000000000000000000..121e08e7425d8f1768e32ed57aa58913d3def190 GIT binary patch literal 32918 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 Nuhd?azc35=e*lU%s+a%( literal 0 HcmV?d00001 diff --git a/uploads/file-1784972477523-568619782.png b/uploads/file-1784972477523-568619782.png new file mode 100644 index 0000000000000000000000000000000000000000..2f006d1ab695c6e5a145dda3c0417917165623b2 GIT binary patch literal 25717 zcmeFYcT`i~w=W7R7O)E7ee&$*qbhK2iP|{P9k&#_d zQ+=XKMs}th{CjutJouzW_Pjp$MGn(dQ6wwvVO#+h=j@BWxvHAL z$jGj?kp7XkLGx|M$ZROpo;=d`w%nNXOQJqV#}c#+;Jv@)f_pA~di(h<_aDkj*IUot zxh8yblKs4Cd&`)sd!@biMjQ8es=LIo7lBFTz|o8K|$f>3;BaJXh4u*=ix>a z=p&iU=;9gh>+|>x1UdM9mX!|tfB*XbzWCpB@EjWF;RTeU32<_E(si;_RNY_6SO5KBjRth}FWtKgVj~ z=?K}eO=G7{1x1~oVW3J@*tD9e|;BQMZS`ucT z6?kQf`4(qgg2hpWocE~1zlWQx%JWmKaacWnj~<(|ERK-+8C&)<)|Mvl3g|5FP_PQ( zmay4|8Dzt|J1>Jxx42Dr&CX2LvXbT+?Nsrcs_bcJf7FPxiM+%9XttvY=Ru#c2F3{U z5i7MjqMD`U+F~k?pF*REa%Sx{wVbI7#xlFHIRVhIkBs~c(6_NqWn?Nw`V(kRR$rCt z%Z~Tu&oN0y4el0}T(jH=vI_SE(|XNvrvU%wcVraH7#FD%+vFPV7k>e3_C0R$+3VKm z4h?0G(;W%az)yR&*cEr`+81$jB9xhzmTTzLIOd}6U4T$9Af#2;Zprmyns^ zZxm#;_J?g9d3cv`Agw3|)e`ubrtDXKGi!Ki_Qyu^qnhmbZlm>Ob(5bh+bGJ^4D^RV zF*08#4I5Mn>1^98a=fdnz&u2;ZA{y&{dUpFih|qth`=AbTp>&!1Bf~NOhlx380u>3 zF^Oxs#V^Nto%R_H=&P_P*MC3UW_H*zLyuRFxg!$Zw5cX+B*auf(Cj9wqca0d)%;3V zjSHC;qUhn9)u^>*|8YW{0LH$+D?TeF2H$7_**vXwK~t}x#b0LI9Ou}WJNiu{;;JTM zH;HH(>E{KxTDwE4Glm-VmRJX@FLr4-!d?HCdo&ZtWyVt@;?xTE9&4Cc9y%;J$qz-v zN68BCaLt_Wj_dK%m+kL66emYPQPjnWije_t-9-d9PK1z-tJ#ZsjK_`>!L*JZVyjY; zm%TQt_otxFkup8cEGnylDsv!3{;Mayb>}~u<+{Df%lT6t6_vWleH&f1bj8e1;)vR% z8W>ec3!b0CaRL#-#$xIiFk+~kH+UR7IOe$WTTr7vVYm+Tu>NHe4on=g>p*MlC!0n?Ae!|)vpV4tz%PJN_W!gG7~g$Ua*c>FyvGY( z!h@V<^4U1~Wmt?ctQzP?Pvf(*b3WK}iTk`TXNz*9mVVXl#xH$IgGn|!T4J1D`e$GJ z5{JiZL�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�Zr>Z(5z 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Ⓢ2uz)j&`^hk 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 K2UFBceEthN>~a|Z literal 0 HcmV?d00001