@platform-modules/civil-aviation-authority 2.3.336 → 2.3.338
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/data-source.js +2 -0
- package/dist/helpers/csrm-risk-persistence.helper.d.ts +11 -0
- package/dist/helpers/csrm-risk-persistence.helper.js +110 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +7 -1
- package/dist/models/HelpContentCategoryModel.d.ts +6 -0
- package/dist/models/HelpContentCategoryModel.js +34 -0
- package/package.json +1 -1
- package/sql/add_help_content_categories_name_arabic.sql +2 -0
- package/src/data-source.ts +2 -0
- package/src/helpers/csrm-risk-persistence.helper.ts +125 -0
- package/src/index.ts +7 -0
- package/src/models/HelpContentCategoryModel.ts +20 -0
package/dist/data-source.js
CHANGED
|
@@ -259,6 +259,7 @@ const SlaConfigModel_1 = require("./models/SlaConfigModel");
|
|
|
259
259
|
const ChatbotQnsAnsMappingModel_1 = require("./models/ChatbotQnsAnsMappingModel");
|
|
260
260
|
const ChatbotDocumentsModel_1 = require("./models/ChatbotDocumentsModel");
|
|
261
261
|
const IconsModel_1 = require("./models/IconsModel");
|
|
262
|
+
const HelpContentCategoryModel_1 = require("./models/HelpContentCategoryModel");
|
|
262
263
|
const CSRMBusinessImpactRatingMasterModel_1 = require("./models/CSRMBusinessImpactRatingMasterModel");
|
|
263
264
|
const CSRMLikelihoodMasterModel_1 = require("./models/CSRMLikelihoodMasterModel");
|
|
264
265
|
const LocationModel_1 = require("./models/LocationModel");
|
|
@@ -586,6 +587,7 @@ exports.AppDataSource = new typeorm_1.DataSource({
|
|
|
586
587
|
ChatbotQnsAnsMappingModel_1.ChatbotQnsAnsMapping,
|
|
587
588
|
ChatbotDocumentsModel_1.ChatbotDocuments,
|
|
588
589
|
IconsModel_1.Icons,
|
|
590
|
+
HelpContentCategoryModel_1.HelpContentCategories,
|
|
589
591
|
CSRMBusinessImpactRatingMasterModel_1.CSRMBusinessImpactRatingMaster,
|
|
590
592
|
CSRMLikelihoodMasterModel_1.CSRMLikelihoodMaster,
|
|
591
593
|
LocationModel_1.Location,
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { EntityManager } from 'typeorm';
|
|
2
|
+
/** DB columns written on create/update (order matches parameterized INSERT). */
|
|
3
|
+
export declare const CSRM_RISK_INSERT_COLUMNS: readonly ["request_id", "risk_no", "impacted_category", "impact_area", "threat", "vulnerability", "risk_description", "risk_owner", "asset_cia_impact", "asset_value", "likelihood", "business_impact", "risk_value", "new_likelihood", "new_business_impact", "new_risk_value", "existing_controls", "start_date", "end_date", "iso_control_reference", "risk_treatment_plan", "treatment", "action", "confidentiality", "integrity", "availability", "new_control", "actual_end_date", "notes", "justification_for_delay", "created_by", "is_deleted"];
|
|
4
|
+
export declare const CSRM_RISKS_TABLE = "cyber_security_risk_management_risks";
|
|
5
|
+
/**
|
|
6
|
+
* Maps one API/workflow risk object to DB values (same pattern as Duty Mission child rows:
|
|
7
|
+
* each property comes from the payload item, plus request_id / created_by / is_deleted from server).
|
|
8
|
+
*/
|
|
9
|
+
export declare function buildCyberSecurityRiskInsertRow(requestId: number, riskPayload: Record<string, unknown>, createdBy: number): Record<(typeof CSRM_RISK_INSERT_COLUMNS)[number], unknown>;
|
|
10
|
+
/** Persists one risk row from workflow/API payload (explicit INSERT, like annual_training_plan_items). */
|
|
11
|
+
export declare function persistCsrmRiskFromPayload(manager: EntityManager, requestId: number, riskPayload: Record<string, unknown>, createdBy: number): Promise<void>;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CSRM_RISKS_TABLE = exports.CSRM_RISK_INSERT_COLUMNS = void 0;
|
|
4
|
+
exports.buildCyberSecurityRiskInsertRow = buildCyberSecurityRiskInsertRow;
|
|
5
|
+
exports.persistCsrmRiskFromPayload = persistCsrmRiskFromPayload;
|
|
6
|
+
/** DB columns written on create/update (order matches parameterized INSERT). */
|
|
7
|
+
exports.CSRM_RISK_INSERT_COLUMNS = [
|
|
8
|
+
'request_id',
|
|
9
|
+
'risk_no',
|
|
10
|
+
'impacted_category',
|
|
11
|
+
'impact_area',
|
|
12
|
+
'threat',
|
|
13
|
+
'vulnerability',
|
|
14
|
+
'risk_description',
|
|
15
|
+
'risk_owner',
|
|
16
|
+
'asset_cia_impact',
|
|
17
|
+
'asset_value',
|
|
18
|
+
'likelihood',
|
|
19
|
+
'business_impact',
|
|
20
|
+
'risk_value',
|
|
21
|
+
'new_likelihood',
|
|
22
|
+
'new_business_impact',
|
|
23
|
+
'new_risk_value',
|
|
24
|
+
'existing_controls',
|
|
25
|
+
'start_date',
|
|
26
|
+
'end_date',
|
|
27
|
+
'iso_control_reference',
|
|
28
|
+
'risk_treatment_plan',
|
|
29
|
+
'treatment',
|
|
30
|
+
'action',
|
|
31
|
+
'confidentiality',
|
|
32
|
+
'integrity',
|
|
33
|
+
'availability',
|
|
34
|
+
'new_control',
|
|
35
|
+
'actual_end_date',
|
|
36
|
+
'notes',
|
|
37
|
+
'justification_for_delay',
|
|
38
|
+
'created_by',
|
|
39
|
+
'is_deleted',
|
|
40
|
+
];
|
|
41
|
+
exports.CSRM_RISKS_TABLE = 'cyber_security_risk_management_risks';
|
|
42
|
+
/**
|
|
43
|
+
* Maps one API/workflow risk object to DB values (same pattern as Duty Mission child rows:
|
|
44
|
+
* each property comes from the payload item, plus request_id / created_by / is_deleted from server).
|
|
45
|
+
*/
|
|
46
|
+
function buildCyberSecurityRiskInsertRow(requestId, riskPayload, createdBy) {
|
|
47
|
+
const item = riskPayload;
|
|
48
|
+
const optionalText = (v) => {
|
|
49
|
+
if (v === null || v === undefined)
|
|
50
|
+
return null;
|
|
51
|
+
const s = String(v);
|
|
52
|
+
return s.length ? s : null;
|
|
53
|
+
};
|
|
54
|
+
const optionalNumber = (v) => {
|
|
55
|
+
if (v === null || v === undefined || v === '')
|
|
56
|
+
return null;
|
|
57
|
+
const n = Number(v);
|
|
58
|
+
return Number.isFinite(n) ? n : null;
|
|
59
|
+
};
|
|
60
|
+
const optionalDate = (v) => {
|
|
61
|
+
if (v === null || v === undefined || v === '')
|
|
62
|
+
return null;
|
|
63
|
+
const d = new Date(String(v));
|
|
64
|
+
return Number.isNaN(d.getTime()) ? null : d;
|
|
65
|
+
};
|
|
66
|
+
const requiredDate = (v) => optionalDate(v) ?? new Date(String(v));
|
|
67
|
+
const riskValueFromPayload = optionalNumber(item.risk_value);
|
|
68
|
+
return {
|
|
69
|
+
request_id: requestId,
|
|
70
|
+
risk_no: item.risk_no,
|
|
71
|
+
impacted_category: item.impacted_category,
|
|
72
|
+
impact_area: item.impact_area,
|
|
73
|
+
threat: item.threat,
|
|
74
|
+
vulnerability: item.vulnerability,
|
|
75
|
+
risk_description: item.risk_description,
|
|
76
|
+
risk_owner: item.risk_owner,
|
|
77
|
+
asset_cia_impact: Number(item.asset_cia_impact),
|
|
78
|
+
asset_value: optionalNumber(item.asset_value),
|
|
79
|
+
likelihood: Number(item.likelihood),
|
|
80
|
+
business_impact: Number(item.business_impact),
|
|
81
|
+
risk_value: riskValueFromPayload ?? 0,
|
|
82
|
+
new_likelihood: optionalNumber(item.new_likelihood),
|
|
83
|
+
new_business_impact: optionalNumber(item.new_business_impact),
|
|
84
|
+
new_risk_value: optionalNumber(item.new_risk_value),
|
|
85
|
+
existing_controls: item.existing_controls,
|
|
86
|
+
start_date: requiredDate(item.start_date),
|
|
87
|
+
end_date: requiredDate(item.end_date),
|
|
88
|
+
iso_control_reference: optionalText(item.iso_control_reference),
|
|
89
|
+
risk_treatment_plan: item.risk_treatment_plan,
|
|
90
|
+
treatment: optionalText(item.treatment),
|
|
91
|
+
action: optionalText(item.action),
|
|
92
|
+
confidentiality: optionalNumber(item.confidentiality),
|
|
93
|
+
integrity: optionalNumber(item.integrity),
|
|
94
|
+
availability: optionalNumber(item.availability),
|
|
95
|
+
new_control: optionalText(item.new_control),
|
|
96
|
+
actual_end_date: optionalDate(item.actual_end_date),
|
|
97
|
+
notes: optionalText(item.notes),
|
|
98
|
+
justification_for_delay: optionalText(item.justification_for_delay),
|
|
99
|
+
created_by: createdBy,
|
|
100
|
+
is_deleted: false,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/** Persists one risk row from workflow/API payload (explicit INSERT, like annual_training_plan_items). */
|
|
104
|
+
async function persistCsrmRiskFromPayload(manager, requestId, riskPayload, createdBy) {
|
|
105
|
+
const row = buildCyberSecurityRiskInsertRow(requestId, riskPayload, createdBy);
|
|
106
|
+
const values = exports.CSRM_RISK_INSERT_COLUMNS.map((col) => row[col]);
|
|
107
|
+
const colList = exports.CSRM_RISK_INSERT_COLUMNS.map((c) => `"${c}"`).join(', ');
|
|
108
|
+
const placeholders = exports.CSRM_RISK_INSERT_COLUMNS.map((_, i) => `$${i + 1}`).join(', ');
|
|
109
|
+
await manager.query(`INSERT INTO ${exports.CSRM_RISKS_TABLE} (${colList}) VALUES (${placeholders})`, values);
|
|
110
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -266,6 +266,7 @@ export * from './models/CyberSecurityRiskManagementRequestModel';
|
|
|
266
266
|
export { CyberSecurityRiskManagementRequest, CyberSecurityRiskManagementRequestStatus } from './models/CyberSecurityRiskManagementRequestModel';
|
|
267
267
|
export * from './models/CyberSecurityRiskManagementRiskModel';
|
|
268
268
|
export { CyberSecurityRiskManagementRisk, CyberSecurityRiskImpactedCategory } from './models/CyberSecurityRiskManagementRiskModel';
|
|
269
|
+
export { buildCyberSecurityRiskInsertRow, persistCsrmRiskFromPayload, CSRM_RISK_INSERT_COLUMNS, CSRM_RISKS_TABLE, } from './helpers/csrm-risk-persistence.helper';
|
|
269
270
|
export * from './models/LegalContractReviewRequestModel';
|
|
270
271
|
export { LegalContractReviewRequest, LegalContractReviewRequestStatus, LegalContractReviewRequestType } from './models/LegalContractReviewRequestModel';
|
|
271
272
|
export * from './models/LegalContractReviewApprovalModel';
|
|
@@ -421,6 +422,7 @@ export * from './models/SlaConfigModel';
|
|
|
421
422
|
export * from './models/ChatbotQnsAnsMappingModel';
|
|
422
423
|
export * from './models/ChatbotDocumentsModel';
|
|
423
424
|
export * from './models/IconsModel';
|
|
425
|
+
export * from './models/HelpContentCategoryModel';
|
|
424
426
|
export * from './models/SlaRequestModel';
|
|
425
427
|
export * from './models/SlaMyRequestsViewModel';
|
|
426
428
|
export * from './models/SlaApprovalsViewModel';
|
package/dist/index.js
CHANGED
|
@@ -16,7 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.TrainingRoomBookingWorkFlowStatus = exports.TrainingRoomBookingApprovalStatus = exports.TrainingRoomBookingRoomType = exports.TrainingRoomBookingRequestStatus = exports.AnnualTrainingPlanChatStatus = exports.AnnualTrainingPlanMessageType = exports.AnnualTrainingPlanRequestChat = exports.AnnualTrainingPlanRequestAttachment = exports.AnnualTrainingPlanWorkFlowStatus = exports.AnnualTrainingPlanApprovalStatus = exports.AnnualTrainingPlanPlace = exports.AnnualTrainingPlanRequestStatus = exports.StudyLeaveChatStatus = exports.StudyLeaveMessageType = exports.StudyLeaveRequestChat = exports.StudyLeaveRequestAttachment = exports.StudyLeaveWorkFlowStatus = exports.StudyLeaveApprovalStatus = exports.StudyLeaveRequestStatus = exports.TrainingMessageType = exports.TrainingRequestChat = exports.TrainingRequestAttachment = exports.TrainingWorkFlowStatus = exports.TrainingApprovalStatus = exports.TrainingRequestStatus = exports.HrServiceChatStatus = exports.HrServiceMessageType = exports.HrServiceRequestChat = exports.HrServiceRequestAttachment = exports.HrServiceWorkFlowStatus = exports.HrServiceApprovalStatus = exports.HrServiceRequestStatus = exports.CancellationMessageType = exports.CancellationRequestChat = exports.CancellationRequestAttachment = exports.CancellationWorkFlowStatus = exports.CancellationApprovalStatus = exports.EventSupportMessageType = exports.EventSupportRequestChat = exports.EventSupportRequestAttachment = exports.EventSupportWorkFlowStatus = exports.EventSupportApprovalStatus = exports.EventSupportReminderType = exports.EventSupportRequestStatus = exports.CancellationRequestStatus = exports.LogisticsVehicleMaintenanceWorkFlowStatus = exports.LogisticsVehicleMaintenanceMessageType = exports.LogisticsVehicleMaintenanceApprovalStatus = exports.VehicleMaintenanceStatus = exports.VehicleMaintenanceType = void 0;
|
|
18
18
|
exports.CyberSecurityAuditRequest = exports.RequestForVaptClassification = exports.RequestForVaptType = exports.RequestForVaptStatus = exports.RequestForVaptRequest = exports.InformationSecurityRequestAttachment = exports.InformationSecurityWorkFlow = exports.InformationSecurityWorkFlowStatus = exports.InformationSecurityRequestChat = exports.InformationSecurityChatStatus = exports.InformationSecurityMessageType = exports.InformationSecurityApprovalDetails = exports.InformationSecurityApprovalStatus = exports.RequestForProjectApproval = exports.RequestForProjectApprovalStatus = exports.ShiftAllowanceValue = exports.ShiftAllowanceRequestStatus = exports.AssignTasksEmpMessageType = exports.AssignTasksEmpRequestChat = exports.AssignTasksEmpRequestAttachment = exports.AssignTasksEmpWorkFlowStatus = exports.AssignTasksEmpApprovalStatus = exports.AssignTasksEmpPriority = exports.AssignTasksEmpStatus = exports.RequestForPresidentsCoverageRequestAttachment = exports.RequestForPresidentsCoverageChatStatus = exports.RequestForPresidentsCoverageMessageType = exports.RequestForPresidentsCoverageRequestChat = exports.RequestForPresidentsCoverageApprovalStatus = exports.RequestForPresidentsCoverageWorkFlowStatus = exports.RequestForPresidentsCoverageNewsSize = exports.RequestForPresidentsCoverageRequestStatus = exports.RequestForCoverageRequestAttachment = exports.RequestForCoverageChatStatus = exports.RequestForCoverageMessageType = exports.RequestForCoverageRequestChat = exports.RequestForCoverageApprovalStatus = exports.RequestForCoverageWorkFlowStatus = exports.RequestForCoverageNewsSize = exports.RequestForCoverageRequestStatus = exports.ServiceTransferRequestType = exports.SalaryDetailsType = exports.ServiceTransferRequestStatus = exports.TemporaryAssignmentRequestType = exports.TemporaryAssignmentRequestStatus = exports.SecondmentRequestStatus = exports.TrainingRoomBookingChatStatus = exports.TrainingRoomBookingMessageType = exports.TrainingRoomBookingRequestChat = exports.TrainingRoomBookingRequestAttachment = void 0;
|
|
19
|
-
exports.RespondToEnquiriesRequestAttachment = exports.RespondToEnquiriesWorkFlow = exports.RespondToEnquiriesWorkFlowStatus = exports.RespondToEnquiriesRequestChat = exports.RespondToEnquiriesChatStatus = exports.RespondToEnquiriesMessageType = exports.RespondToEnquiriesApprovalDetails = exports.RespondToEnquiriesApprovalStatus = exports.RespondToEnquiriesRequest = exports.RespondToEnquiriesRequestStatus = exports.DurationUnit = exports.RepeatFrequency = exports.Quarter = exports.HumanResourceAnnualPlanningRequestStatus = exports.PerformanceManagementCyclePeriod = exports.PerformanceManagementRequestStatus = exports.SkillsEnhancementRequestStatus = exports.AnnualIncrementRequestStatus = exports.PromotionRequestStatus = exports.CashAllowanceLeaveRequestStatus = exports.NotificationFrequency = exports.ServicesNotificationTriggerType = exports.NewResourceRequestStatus = exports.JobTransferRequestStatus = exports.AppealAgainstAdministrativeDecisionRequestStatus = exports.AppealAgainstAdministrativeDecisionRequest = exports.LegalContractReviewRequestType = exports.LegalContractReviewRequestStatus = exports.LegalContractReviewRequest = exports.CyberSecurityRiskImpactedCategory = exports.CyberSecurityRiskManagementRisk = exports.CyberSecurityRiskManagementRequestStatus = exports.CyberSecurityRiskManagementRequest = exports.CyberSecurityAuditApplicationType = exports.CyberSecurityAuditClassification = exports.CyberSecurityAuditRequestStatus = void 0;
|
|
19
|
+
exports.RespondToEnquiriesRequestAttachment = exports.RespondToEnquiriesWorkFlow = exports.RespondToEnquiriesWorkFlowStatus = exports.RespondToEnquiriesRequestChat = exports.RespondToEnquiriesChatStatus = exports.RespondToEnquiriesMessageType = exports.RespondToEnquiriesApprovalDetails = exports.RespondToEnquiriesApprovalStatus = exports.RespondToEnquiriesRequest = exports.RespondToEnquiriesRequestStatus = exports.DurationUnit = exports.RepeatFrequency = exports.Quarter = exports.HumanResourceAnnualPlanningRequestStatus = exports.PerformanceManagementCyclePeriod = exports.PerformanceManagementRequestStatus = exports.SkillsEnhancementRequestStatus = exports.AnnualIncrementRequestStatus = exports.PromotionRequestStatus = exports.CashAllowanceLeaveRequestStatus = exports.NotificationFrequency = exports.ServicesNotificationTriggerType = exports.NewResourceRequestStatus = exports.JobTransferRequestStatus = exports.AppealAgainstAdministrativeDecisionRequestStatus = exports.AppealAgainstAdministrativeDecisionRequest = exports.LegalContractReviewRequestType = exports.LegalContractReviewRequestStatus = exports.LegalContractReviewRequest = exports.CSRM_RISKS_TABLE = exports.CSRM_RISK_INSERT_COLUMNS = exports.persistCsrmRiskFromPayload = exports.buildCyberSecurityRiskInsertRow = exports.CyberSecurityRiskImpactedCategory = exports.CyberSecurityRiskManagementRisk = exports.CyberSecurityRiskManagementRequestStatus = exports.CyberSecurityRiskManagementRequest = exports.CyberSecurityAuditApplicationType = exports.CyberSecurityAuditClassification = exports.CyberSecurityAuditRequestStatus = void 0;
|
|
20
20
|
__exportStar(require("./models/user"), exports);
|
|
21
21
|
__exportStar(require("./models/role"), exports);
|
|
22
22
|
__exportStar(require("./models/user-sessions"), exports);
|
|
@@ -397,6 +397,11 @@ __exportStar(require("./models/CyberSecurityRiskManagementRiskModel"), exports);
|
|
|
397
397
|
var CyberSecurityRiskManagementRiskModel_1 = require("./models/CyberSecurityRiskManagementRiskModel");
|
|
398
398
|
Object.defineProperty(exports, "CyberSecurityRiskManagementRisk", { enumerable: true, get: function () { return CyberSecurityRiskManagementRiskModel_1.CyberSecurityRiskManagementRisk; } });
|
|
399
399
|
Object.defineProperty(exports, "CyberSecurityRiskImpactedCategory", { enumerable: true, get: function () { return CyberSecurityRiskManagementRiskModel_1.CyberSecurityRiskImpactedCategory; } });
|
|
400
|
+
var csrm_risk_persistence_helper_1 = require("./helpers/csrm-risk-persistence.helper");
|
|
401
|
+
Object.defineProperty(exports, "buildCyberSecurityRiskInsertRow", { enumerable: true, get: function () { return csrm_risk_persistence_helper_1.buildCyberSecurityRiskInsertRow; } });
|
|
402
|
+
Object.defineProperty(exports, "persistCsrmRiskFromPayload", { enumerable: true, get: function () { return csrm_risk_persistence_helper_1.persistCsrmRiskFromPayload; } });
|
|
403
|
+
Object.defineProperty(exports, "CSRM_RISK_INSERT_COLUMNS", { enumerable: true, get: function () { return csrm_risk_persistence_helper_1.CSRM_RISK_INSERT_COLUMNS; } });
|
|
404
|
+
Object.defineProperty(exports, "CSRM_RISKS_TABLE", { enumerable: true, get: function () { return csrm_risk_persistence_helper_1.CSRM_RISKS_TABLE; } });
|
|
400
405
|
__exportStar(require("./models/LegalContractReviewRequestModel"), exports);
|
|
401
406
|
var LegalContractReviewRequestModel_1 = require("./models/LegalContractReviewRequestModel");
|
|
402
407
|
Object.defineProperty(exports, "LegalContractReviewRequest", { enumerable: true, get: function () { return LegalContractReviewRequestModel_1.LegalContractReviewRequest; } });
|
|
@@ -612,6 +617,7 @@ __exportStar(require("./models/SlaConfigModel"), exports);
|
|
|
612
617
|
__exportStar(require("./models/ChatbotQnsAnsMappingModel"), exports);
|
|
613
618
|
__exportStar(require("./models/ChatbotDocumentsModel"), exports);
|
|
614
619
|
__exportStar(require("./models/IconsModel"), exports);
|
|
620
|
+
__exportStar(require("./models/HelpContentCategoryModel"), exports);
|
|
615
621
|
__exportStar(require("./models/SlaRequestModel"), exports);
|
|
616
622
|
__exportStar(require("./models/SlaMyRequestsViewModel"), exports);
|
|
617
623
|
__exportStar(require("./models/SlaApprovalsViewModel"), exports);
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.HelpContentCategories = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
const BaseModel_1 = require("./BaseModel");
|
|
15
|
+
let HelpContentCategories = class HelpContentCategories extends BaseModel_1.BaseModel {
|
|
16
|
+
constructor(name) {
|
|
17
|
+
super();
|
|
18
|
+
this.name = name;
|
|
19
|
+
this.name_arabic = null;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.HelpContentCategories = HelpContentCategories;
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, typeorm_1.Column)({ nullable: true }),
|
|
25
|
+
__metadata("design:type", String)
|
|
26
|
+
], HelpContentCategories.prototype, "name", void 0);
|
|
27
|
+
__decorate([
|
|
28
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 500, nullable: true }),
|
|
29
|
+
__metadata("design:type", Object)
|
|
30
|
+
], HelpContentCategories.prototype, "name_arabic", void 0);
|
|
31
|
+
exports.HelpContentCategories = HelpContentCategories = __decorate([
|
|
32
|
+
(0, typeorm_1.Entity)({ name: 'help_content_categories' }),
|
|
33
|
+
__metadata("design:paramtypes", [String])
|
|
34
|
+
], HelpContentCategories);
|
package/package.json
CHANGED
package/src/data-source.ts
CHANGED
|
@@ -257,6 +257,7 @@ import { SlaConfig } from './models/SlaConfigModel';
|
|
|
257
257
|
import { ChatbotQnsAnsMapping } from './models/ChatbotQnsAnsMappingModel';
|
|
258
258
|
import { ChatbotDocuments } from './models/ChatbotDocumentsModel';
|
|
259
259
|
import { Icons } from './models/IconsModel';
|
|
260
|
+
import { HelpContentCategories } from './models/HelpContentCategoryModel';
|
|
260
261
|
import { CSRMBusinessImpactRatingMaster } from './models/CSRMBusinessImpactRatingMasterModel';
|
|
261
262
|
import { CSRMLikelihoodMaster } from './models/CSRMLikelihoodMasterModel';
|
|
262
263
|
import { Location } from './models/LocationModel';
|
|
@@ -586,6 +587,7 @@ export const AppDataSource = new DataSource({
|
|
|
586
587
|
ChatbotQnsAnsMapping,
|
|
587
588
|
ChatbotDocuments,
|
|
588
589
|
Icons,
|
|
590
|
+
HelpContentCategories,
|
|
589
591
|
CSRMBusinessImpactRatingMaster,
|
|
590
592
|
CSRMLikelihoodMaster,
|
|
591
593
|
Location,
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import type { EntityManager } from 'typeorm';
|
|
2
|
+
|
|
3
|
+
/** DB columns written on create/update (order matches parameterized INSERT). */
|
|
4
|
+
export const CSRM_RISK_INSERT_COLUMNS = [
|
|
5
|
+
'request_id',
|
|
6
|
+
'risk_no',
|
|
7
|
+
'impacted_category',
|
|
8
|
+
'impact_area',
|
|
9
|
+
'threat',
|
|
10
|
+
'vulnerability',
|
|
11
|
+
'risk_description',
|
|
12
|
+
'risk_owner',
|
|
13
|
+
'asset_cia_impact',
|
|
14
|
+
'asset_value',
|
|
15
|
+
'likelihood',
|
|
16
|
+
'business_impact',
|
|
17
|
+
'risk_value',
|
|
18
|
+
'new_likelihood',
|
|
19
|
+
'new_business_impact',
|
|
20
|
+
'new_risk_value',
|
|
21
|
+
'existing_controls',
|
|
22
|
+
'start_date',
|
|
23
|
+
'end_date',
|
|
24
|
+
'iso_control_reference',
|
|
25
|
+
'risk_treatment_plan',
|
|
26
|
+
'treatment',
|
|
27
|
+
'action',
|
|
28
|
+
'confidentiality',
|
|
29
|
+
'integrity',
|
|
30
|
+
'availability',
|
|
31
|
+
'new_control',
|
|
32
|
+
'actual_end_date',
|
|
33
|
+
'notes',
|
|
34
|
+
'justification_for_delay',
|
|
35
|
+
'created_by',
|
|
36
|
+
'is_deleted',
|
|
37
|
+
] as const;
|
|
38
|
+
|
|
39
|
+
export const CSRM_RISKS_TABLE = 'cyber_security_risk_management_risks';
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Maps one API/workflow risk object to DB values (same pattern as Duty Mission child rows:
|
|
43
|
+
* each property comes from the payload item, plus request_id / created_by / is_deleted from server).
|
|
44
|
+
*/
|
|
45
|
+
export function buildCyberSecurityRiskInsertRow(
|
|
46
|
+
requestId: number,
|
|
47
|
+
riskPayload: Record<string, unknown>,
|
|
48
|
+
createdBy: number,
|
|
49
|
+
): Record<(typeof CSRM_RISK_INSERT_COLUMNS)[number], unknown> {
|
|
50
|
+
const item = riskPayload;
|
|
51
|
+
|
|
52
|
+
const optionalText = (v: unknown): string | null => {
|
|
53
|
+
if (v === null || v === undefined) return null;
|
|
54
|
+
const s = String(v);
|
|
55
|
+
return s.length ? s : null;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const optionalNumber = (v: unknown): number | null => {
|
|
59
|
+
if (v === null || v === undefined || v === '') return null;
|
|
60
|
+
const n = Number(v);
|
|
61
|
+
return Number.isFinite(n) ? n : null;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const optionalDate = (v: unknown): Date | null => {
|
|
65
|
+
if (v === null || v === undefined || v === '') return null;
|
|
66
|
+
const d = new Date(String(v));
|
|
67
|
+
return Number.isNaN(d.getTime()) ? null : d;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const requiredDate = (v: unknown): Date => optionalDate(v) ?? new Date(String(v));
|
|
71
|
+
|
|
72
|
+
const riskValueFromPayload = optionalNumber(item.risk_value);
|
|
73
|
+
|
|
74
|
+
return {
|
|
75
|
+
request_id: requestId,
|
|
76
|
+
risk_no: item.risk_no,
|
|
77
|
+
impacted_category: item.impacted_category,
|
|
78
|
+
impact_area: item.impact_area,
|
|
79
|
+
threat: item.threat,
|
|
80
|
+
vulnerability: item.vulnerability,
|
|
81
|
+
risk_description: item.risk_description,
|
|
82
|
+
risk_owner: item.risk_owner,
|
|
83
|
+
asset_cia_impact: Number(item.asset_cia_impact),
|
|
84
|
+
asset_value: optionalNumber(item.asset_value),
|
|
85
|
+
likelihood: Number(item.likelihood),
|
|
86
|
+
business_impact: Number(item.business_impact),
|
|
87
|
+
risk_value: riskValueFromPayload ?? 0,
|
|
88
|
+
new_likelihood: optionalNumber(item.new_likelihood),
|
|
89
|
+
new_business_impact: optionalNumber(item.new_business_impact),
|
|
90
|
+
new_risk_value: optionalNumber(item.new_risk_value),
|
|
91
|
+
existing_controls: item.existing_controls,
|
|
92
|
+
start_date: requiredDate(item.start_date),
|
|
93
|
+
end_date: requiredDate(item.end_date),
|
|
94
|
+
iso_control_reference: optionalText(item.iso_control_reference),
|
|
95
|
+
risk_treatment_plan: item.risk_treatment_plan,
|
|
96
|
+
treatment: optionalText(item.treatment),
|
|
97
|
+
action: optionalText(item.action),
|
|
98
|
+
confidentiality: optionalNumber(item.confidentiality),
|
|
99
|
+
integrity: optionalNumber(item.integrity),
|
|
100
|
+
availability: optionalNumber(item.availability),
|
|
101
|
+
new_control: optionalText(item.new_control),
|
|
102
|
+
actual_end_date: optionalDate(item.actual_end_date),
|
|
103
|
+
notes: optionalText(item.notes),
|
|
104
|
+
justification_for_delay: optionalText(item.justification_for_delay),
|
|
105
|
+
created_by: createdBy,
|
|
106
|
+
is_deleted: false,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/** Persists one risk row from workflow/API payload (explicit INSERT, like annual_training_plan_items). */
|
|
111
|
+
export async function persistCsrmRiskFromPayload(
|
|
112
|
+
manager: EntityManager,
|
|
113
|
+
requestId: number,
|
|
114
|
+
riskPayload: Record<string, unknown>,
|
|
115
|
+
createdBy: number,
|
|
116
|
+
): Promise<void> {
|
|
117
|
+
const row = buildCyberSecurityRiskInsertRow(requestId, riskPayload, createdBy);
|
|
118
|
+
const values = CSRM_RISK_INSERT_COLUMNS.map((col) => row[col]);
|
|
119
|
+
const colList = CSRM_RISK_INSERT_COLUMNS.map((c) => `"${c}"`).join(', ');
|
|
120
|
+
const placeholders = CSRM_RISK_INSERT_COLUMNS.map((_, i) => `$${i + 1}`).join(', ');
|
|
121
|
+
await manager.query(
|
|
122
|
+
`INSERT INTO ${CSRM_RISKS_TABLE} (${colList}) VALUES (${placeholders})`,
|
|
123
|
+
values,
|
|
124
|
+
);
|
|
125
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -282,6 +282,12 @@ export {
|
|
|
282
282
|
CyberSecurityRiskManagementRisk,
|
|
283
283
|
CyberSecurityRiskImpactedCategory
|
|
284
284
|
} from './models/CyberSecurityRiskManagementRiskModel';
|
|
285
|
+
export {
|
|
286
|
+
buildCyberSecurityRiskInsertRow,
|
|
287
|
+
persistCsrmRiskFromPayload,
|
|
288
|
+
CSRM_RISK_INSERT_COLUMNS,
|
|
289
|
+
CSRM_RISKS_TABLE,
|
|
290
|
+
} from './helpers/csrm-risk-persistence.helper';
|
|
285
291
|
export * from './models/LegalContractReviewRequestModel';
|
|
286
292
|
export {
|
|
287
293
|
LegalContractReviewRequest,
|
|
@@ -513,6 +519,7 @@ export * from './models/SlaConfigModel';
|
|
|
513
519
|
export * from './models/ChatbotQnsAnsMappingModel';
|
|
514
520
|
export * from './models/ChatbotDocumentsModel';
|
|
515
521
|
export * from './models/IconsModel';
|
|
522
|
+
export * from './models/HelpContentCategoryModel';
|
|
516
523
|
export * from './models/SlaRequestModel';
|
|
517
524
|
export * from './models/SlaMyRequestsViewModel';
|
|
518
525
|
export * from './models/SlaApprovalsViewModel';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Column, Entity } from "typeorm";
|
|
2
|
+
import { BaseModel } from './BaseModel';
|
|
3
|
+
|
|
4
|
+
@Entity({ name: 'help_content_categories' })
|
|
5
|
+
export class HelpContentCategories extends BaseModel {
|
|
6
|
+
|
|
7
|
+
@Column({ nullable: true })
|
|
8
|
+
name: string;
|
|
9
|
+
|
|
10
|
+
@Column({ type: 'varchar', length: 500, nullable: true })
|
|
11
|
+
name_arabic: string | null;
|
|
12
|
+
|
|
13
|
+
constructor(
|
|
14
|
+
name: string,
|
|
15
|
+
) {
|
|
16
|
+
super();
|
|
17
|
+
this.name = name;
|
|
18
|
+
this.name_arabic = null;
|
|
19
|
+
}
|
|
20
|
+
}
|