backend/server/models/classes/worker/properties/socialCareQualificationProperty.js
// the Social Care Qualification (property is a type being Qualification Id and Levelconst ChangePropertyPrototype = require('../../properties/changePrototype').ChangePropertyPrototype; // database modelsconst models = require('../../../index'); Similar blocks of code found in 2 locations. Consider refactoring.exports.WorkerSocialCareQualificationProperty = class WorkerSocialCareQualificationProperty extends ( ChangePropertyPrototype) { constructor() { super('SocialCareQualification', 'SocialCareQualificationFk'); this._allowNull = true; } static clone() { return new WorkerSocialCareQualificationProperty(); } // concrete implementations async restoreFromJson(document) { // TODO: it's a little more than assuming the JSON representation if (document.socialCareQualification) { const validatedQualification = await this._validateQualification(document.socialCareQualification); if (validatedQualification) { this.property = validatedQualification; } else { this.property = null; } } } restorePropertyFromSequelize(document) { if (document.socialCareQualification) { return { qualificationId: document.socialCareQualification.id, title: document.socialCareQualification.level, }; } } savePropertyToSequelize() { return { SocialCareQualificationFkValue: this.property && this.property.qualificationId, }; } isEqual(currentValue, newValue) { // qualification is an object where qualificationId is the primary key return currentValue && newValue && currentValue.qualificationId === newValue.qualificationId; } toJSON(withHistory = false, showPropertyHistoryOnly = true, wdfEffectiveDate = false) { if (wdfEffectiveDate) { return this._savedAt ? this._savedAt > wdfEffectiveDate : false; } if (!withHistory) { // simple form return { socialCareQualification: this.property, }; } return { socialCareQualification: { currentValue: this.property, ...this.changePropsToJSON(showPropertyHistoryOnly), }, }; } Function `_valid` has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring. _valid(qualificationDef) { if (!qualificationDef) return false; if (qualificationDef.qualificationId === null && qualificationDef.title === null) return true; // must exist a qualificationId or title if (!(qualificationDef.qualificationId || qualificationDef.title)) return false; // if qualificationId is given, it must be an integer if (qualificationDef.qualificationId && !Number.isInteger(qualificationDef.qualificationId)) return false; // gets here, and it's validAvoid too many `return` statements within this function. return true; } // returns false if qualification definition is not valid, otherwise returns // a well formed qualification definition using data as given in qualification reference lookupFunction `_validateQualification` has 28 lines of code (exceeds 25 allowed). Consider refactoring.
Function `_validateQualification` has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring. async _validateQualification(qualificationDef) { if (!this._valid(qualificationDef)) return false; // qualificationId overrides title, because qualificationId is indexed whereas title is not! let referencedQualification = null; if (qualificationDef.qualificationId) { referencedQualification = await models.qualification.findOne({ where: { id: qualificationDef.qualificationId, }, attributes: ['id', 'level'], }); } else { referencedQualification = await models.qualification.findOne({ where: { level: qualificationDef.title, }, attributes: ['id', 'level'], }); } if (referencedQualification && referencedQualification.id) { // found a qualification match return { qualificationId: referencedQualification.id, title: referencedQualification.level, }; } if (qualificationDef.qualificationId === null) { return qualificationDef; } else { return false; } }};