codenuk_backend_mine/services/template-manager/src/models/feature_business_rules.js
2025-10-06 15:12:49 +05:30

50 lines
1.6 KiB
JavaScript

const database = require('../config/database');
class FeatureBusinessRules {
static async upsert(template_id, feature_id, rules) {
// Normalize to JSON array
let businessRules;
if (Array.isArray(rules)) {
businessRules = rules.map((r) => (typeof r === 'string' ? tryParse(r) ?? r : r));
} else if (typeof rules === 'string') {
const parsed = tryParse(rules);
businessRules = Array.isArray(parsed) ? parsed : [parsed ?? rules];
} else if (rules && typeof rules === 'object') {
businessRules = [rules];
} else {
businessRules = [];
}
const sql = `
INSERT INTO feature_business_rules (template_id, feature_id, business_rules, updated_at)
VALUES ($1, $2, $3::jsonb, NOW())
ON CONFLICT (template_id, feature_id)
DO UPDATE SET business_rules = EXCLUDED.business_rules, updated_at = NOW()
RETURNING *
`;
const result = await database.query(sql, [template_id, feature_id, JSON.stringify(businessRules)]);
// DISABLED: Auto CKG migration on business rules update to prevent loops
// Only trigger CKG migration when new templates are created
console.log(`📝 [FeatureBusinessRules.upsert] Business rules updated for template: ${template_id} - CKG migration will be triggered when template is created`);
return result.rows[0];
}
}
function tryParse(s) {
try {
const t = String(s).trim();
if ((t.startsWith('{') && t.endsWith('}')) || (t.startsWith('[') && t.endsWith(']'))) {
return JSON.parse(t);
}
return null;
} catch {
return null;
}
}
module.exports = FeatureBusinessRules;