@platform-modules/civil-aviation-authority 2.3.240 → 2.3.241

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.
Files changed (92) hide show
  1. package/.env +7 -22
  2. package/dist/models/CyberSecurityAuditRequestModel.d.ts +1 -1
  3. package/dist/models/CyberSecurityAuditRequestModel.js +1 -1
  4. package/dist/models/ITApprovalSettings.d.ts +7 -0
  5. package/dist/models/ITApprovalSettings.js +40 -0
  6. package/dist/models/ITServicesTypesMuscatModel.d.ts +6 -0
  7. package/dist/models/ITServicesTypesMuscatModel.js +34 -0
  8. package/dist/models/ITServicesTypesSalalahModel.d.ts +6 -0
  9. package/dist/models/ITServicesTypesSalalahModel.js +34 -0
  10. package/dist/models/Workflows.d.ts +9 -0
  11. package/dist/models/Workflows.js +31 -0
  12. package/package.json +1 -1
  13. package/src/data-source.ts +495 -495
  14. package/src/index.ts +2 -4
  15. package/src/models/AccessCardRequestModel.ts +135 -135
  16. package/src/models/AccommodationApprovalModel.ts +8 -8
  17. package/src/models/AccommodationRequestModel.ts +8 -8
  18. package/src/models/AirportEntryPermitModel.ts +276 -276
  19. package/src/models/AnnualIncrementRequestEmployeeModel.ts +65 -65
  20. package/src/models/AnnualIncrementRequestModel.ts +25 -25
  21. package/src/models/AnnualTrainingPlanRequestModel.ts +153 -153
  22. package/src/models/AppealAgainstAdministrativeDecisionRequestModel.ts +23 -23
  23. package/src/models/CAAServices.ts +33 -33
  24. package/src/models/CAASubServices.ts +33 -33
  25. package/src/models/CAIRatingMasterModel.ts +39 -39
  26. package/src/models/CSRMBusinessImpactRatingMasterModel.ts +25 -25
  27. package/src/models/CSRMLikelihoodMasterModel.ts +25 -25
  28. package/src/models/CashAllowanceLeaveRequestModel.ts +11 -11
  29. package/src/models/CyberSecurityAuditRequestModel.ts +1 -1
  30. package/src/models/DepartmentsModel.ts +25 -25
  31. package/src/models/DocumentDriveModel.ts +28 -28
  32. package/src/models/DocumentFolderModel.ts +45 -45
  33. package/src/models/HousingContractCancelApprovalModel.ts +64 -64
  34. package/src/models/HousingContractCancelChatModel.ts +56 -56
  35. package/src/models/HousingContractRenewalApprovalModel.ts +64 -64
  36. package/src/models/HousingContractRenewalChatModel.ts +59 -59
  37. package/src/models/HrServiceRequestModel.ts +193 -193
  38. package/src/models/ITRequestAttachmentModel.ts +73 -73
  39. package/src/models/ITRequestChatModel.ts +74 -74
  40. package/src/models/ItApprovalsModel.ts +84 -84
  41. package/src/models/ItWorkflowModel.ts +55 -55
  42. package/src/models/LegalConsultationApprovalModel.ts +65 -65
  43. package/src/models/MissionTravelPassportExpiryNotificationConfigModel.ts +36 -36
  44. package/src/models/NotificationModel.ts +89 -89
  45. package/src/models/PerformanceCyclePeriodModel.ts +26 -26
  46. package/src/models/PerformanceGoalMasterModel.ts +27 -27
  47. package/src/models/PerformanceManagementRequestGoalModel.ts +46 -46
  48. package/src/models/PerformanceManagementRequestModel.ts +14 -14
  49. package/src/models/PromotionRequestModel.ts +11 -11
  50. package/src/models/ResidentialUnitRentalApprovalModel.ts +143 -143
  51. package/src/models/ResidentialUnitRentalChatModel.ts +56 -56
  52. package/src/models/ResidentialUnitRentalRequestModel.ts +218 -218
  53. package/src/models/RespondToEnquiriesRequestModel.ts +31 -31
  54. package/src/models/ServiceExtensionAfter60ApprovalModel.ts +87 -87
  55. package/src/models/ServiceSlaApprovalModel.ts +52 -52
  56. package/src/models/ServicesNotificationConfigModel.ts +55 -55
  57. package/src/models/SkillsEnhancementRequestModel.ts +17 -17
  58. package/src/models/SlaRequestModel.ts +65 -65
  59. package/src/models/StudyLeaveRequestModel.ts +144 -144
  60. package/src/models/TrainingRequestModel.ts +164 -164
  61. package/src/models/TrainingRoomBookingRequestModel.ts +142 -142
  62. package/src/models/TrainingRoomNotificationConfigModel.ts +30 -30
  63. package/src/models/UserSkillModel.ts +56 -56
  64. package/src/models/role.ts +34 -34
  65. package/src/models/user.ts +233 -233
  66. package/src/sla/sla-table-sync.service.ts +87 -87
  67. package/dist/models/DocumentMetadataModel.d.ts +0 -45
  68. package/dist/models/DocumentMetadataModel.js +0 -171
  69. package/dist/models/DocumentationDepartmentsModel.d.ts +0 -13
  70. package/dist/models/DocumentationDepartmentsModel.js +0 -53
  71. package/dist/models/FolderModel.d.ts +0 -16
  72. package/dist/models/FolderModel.js +0 -85
  73. package/dist/models/ImportExportMaterialModels.d.ts +0 -92
  74. package/dist/models/ImportExportMaterialModels.js +0 -307
  75. package/dist/models/PermissionModel.d.ts +0 -18
  76. package/dist/models/PermissionModel.js +0 -68
  77. package/dist/models/SecurityAccessApprovalModel.d.ts +0 -23
  78. package/dist/models/SecurityAccessApprovalModel.js +0 -82
  79. package/dist/models/SecurityAccessAttachmentModel.d.ts +0 -12
  80. package/dist/models/SecurityAccessAttachmentModel.js +0 -56
  81. package/dist/models/SecurityAccessChatModel.d.ts +0 -12
  82. package/dist/models/SecurityAccessChatModel.js +0 -56
  83. package/dist/models/SecurityAccessRequestModel.d.ts +0 -25
  84. package/dist/models/SecurityAccessRequestModel.js +0 -80
  85. package/dist/models/SecurityAccessWorkflowModel.d.ts +0 -24
  86. package/dist/models/SecurityAccessWorkflowModel.js +0 -84
  87. package/dist/models/ServiceExtensionAfterAge60Models.d.ts +0 -93
  88. package/dist/models/ServiceExtensionAfterAge60Models.js +0 -312
  89. package/dist/models/UUIDBaseModel.d.ts +0 -14
  90. package/dist/models/UUIDBaseModel.js +0 -66
  91. package/dist/models/WorkingHoursExtensionModels.d.ts +0 -88
  92. package/dist/models/WorkingHoursExtensionModels.js +0 -295
@@ -1,234 +1,234 @@
1
- import { Column, Entity } from "typeorm";
2
- import { BaseModel } from './BaseModel';
3
-
4
- @Entity({ name: 'users' })
5
- export class User extends BaseModel {
6
-
7
- @Column({ type: 'bigint', nullable: true })
8
- employee_id?: number;
9
-
10
- @Column({ type: 'bigint', nullable: true })
11
- civil_employee_id?: number;
12
-
13
- @Column({ nullable: true })
14
- employee_name?: string;
15
-
16
- @Column({ nullable: true })
17
- employee_arabic_name?: string;
18
-
19
- @Column({ nullable: true })
20
- person_type?: string;
21
-
22
- @Column({ nullable: true })
23
- date_of_birth?: string;
24
-
25
- @Column({ nullable: true })
26
- region_of_birth?: string;
27
-
28
- @Column({ nullable: true })
29
- country_of_birth?: string;
30
-
31
- @Column({ nullable: true })
32
- date_of_joining?: string;
33
-
34
- @Column({ nullable: true })
35
- last_promotion_date?: string;
36
-
37
- @Column({ nullable: true })
38
- gender?: string;
39
-
40
- @Column({ nullable: true })
41
- qualification?: string;
42
-
43
- @Column({ nullable: true })
44
- marital_status?: string;
45
-
46
- @Column({ nullable: true })
47
- nationality?: string;
48
-
49
- @Column({ nullable: true })
50
- email?: string;
51
-
52
- @Column({ nullable: true })
53
- blood_type?: string;
54
-
55
- @Column({ type: 'varchar', length: 100, nullable: true })
56
- national_id?: string;
57
-
58
- @Column({ type: 'varchar', length: 100, nullable: true })
59
- manpower_id?: string;
60
-
61
- @Column({ nullable: true })
62
- mobile?: string;
63
-
64
- @Column({ nullable: true })
65
- office_number?: string;
66
-
67
- @Column({ nullable: true })
68
- department?: number;
69
-
70
- @Column({ type: "enum", enum: ["CAA", "Embassy"], nullable: false, default: "CAA" })
71
- category: "CAA" | "Embassy"; // Mandatory
72
-
73
- @Column({ nullable: true })
74
- directorate?: string;
75
-
76
- @Column({ nullable: true })
77
- section?: number;
78
-
79
- @Column({ nullable: true })
80
- position?: number;
81
-
82
- @Column({ nullable: true })
83
- arabic_position?: string;
84
-
85
- @Column({ nullable: true })
86
- grade?: number;
87
-
88
- @Column({ nullable: true })
89
- location?: string;
90
-
91
- @Column({ type: 'bigint', nullable: true })
92
- supervisor_emp_id?: number;
93
-
94
- @Column({ nullable: true })
95
- supervisor_emp_name?: string;
96
-
97
- @Column({ nullable: true , default: false})
98
- is_admin?: boolean;
99
-
100
- @Column({ nullable: true })
101
- passport_number?: string;
102
-
103
- @Column({ nullable: true })
104
- personal_email?: string;
105
-
106
- @Column({ nullable: true })
107
- extension_number?: number;
108
-
109
- @Column({ type: "varchar", length: 20, nullable: true })
110
- fax_number?: string; // Optional
111
-
112
- @Column({ nullable: true })
113
- diplomatic_name?: string;
114
-
115
- @Column({ nullable: true })
116
- avatar?: string;
117
-
118
- @Column({ nullable: true })
119
- father_name?: string;
120
-
121
- @Column({ nullable: true })
122
- spouse_name?: string;
123
-
124
- @Column({ nullable: true })
125
- children1_name?: string;
126
-
127
- @Column({ nullable: true })
128
- children2_name?: string;
129
-
130
- @Column({ nullable: true })
131
- address?: string;
132
-
133
- @Column({ nullable: true })
134
- religion?: string;
135
-
136
- @Column({ type: "decimal", precision: 10, scale: 3, nullable: true })
137
- current_basic_salary: number;
138
-
139
- @Column({ type: "decimal", precision: 10, scale: 3, nullable: true })
140
- previous_basic_salary: number;
141
-
142
- constructor(
143
- employee_id?: number,
144
- civil_employee_id?: number,
145
- employee_name?: string,
146
- employee_arabic_name?: string,
147
- person_type?: string,
148
- date_of_birth?: string,
149
- region_of_birth?: string,
150
- country_of_birth?: string,
151
- date_of_joining?: string,
152
- last_promotion_date?: string,
153
- gender?: string,
154
- qualification?: string,
155
- marital_status?: string,
156
- nationality?: string,
157
- email?: string,
158
- blood_type?: string,
159
- national_id?: string,
160
- manpower_id?: string,
161
- mobile?: string,
162
- office_number?: string,
163
- department?: number,
164
- category?: "CAA" | "Embassy",
165
- directorate?: string,
166
- section?: number,
167
- position?: number,
168
- arabic_position?: string,
169
- grade?: number,
170
- location?: string,
171
- supervisor_emp_id?: number,
172
- supervisor_emp_name?: string,
173
- passport_number?: string,
174
- personal_email?: string,
175
- extension_number?: number,
176
- fax_number?: string,
177
- diplomatic_name?: string,
178
- avatar?: string,
179
- father_name?: string,
180
- spouse_name?: string,
181
- children1_name?: string,
182
- children2_name?: string,
183
- address?: string,
184
- religion?: string,
185
- current_basic_salary?: number,
186
- previous_basic_salary?: number
187
- ) {
188
- super();
189
- this.employee_id = employee_id;
190
- this.civil_employee_id = civil_employee_id;
191
- this.employee_name = employee_name;
192
- this.employee_arabic_name = employee_arabic_name;
193
- this.person_type = person_type;
194
- this.date_of_birth = date_of_birth;
195
- this.region_of_birth = region_of_birth;
196
- this.country_of_birth = country_of_birth;
197
- this.date_of_joining = date_of_joining;
198
- this.last_promotion_date = last_promotion_date;
199
- this.gender = gender;
200
- this.qualification = qualification;
201
- this.marital_status = marital_status;
202
- this.nationality = nationality;
203
- this.email = email;
204
- this.blood_type = blood_type;
205
- this.national_id = national_id;
206
- this.manpower_id = manpower_id;
207
- this.mobile = mobile;
208
- this.office_number = office_number;
209
- this.department = department;
210
- this.category = category || "CAA";
211
- this.directorate = directorate;
212
- this.section = section;
213
- this.position = position;
214
- this.arabic_position = arabic_position;
215
- this.grade = grade;
216
- this.location = location;
217
- this.supervisor_emp_id = supervisor_emp_id;
218
- this.supervisor_emp_name = supervisor_emp_name;
219
- this.passport_number = passport_number;
220
- this.personal_email = personal_email;
221
- this.extension_number = extension_number;
222
- this.fax_number = fax_number;
223
- this.diplomatic_name = diplomatic_name;
224
- this.avatar = avatar;
225
- this.father_name = father_name;
226
- this.spouse_name = spouse_name;
227
- this.children1_name = children1_name;
228
- this.children2_name = children2_name;
229
- this.address = address;
230
- this.religion = religion;
231
- this.current_basic_salary = current_basic_salary || 0;
232
- this.previous_basic_salary = previous_basic_salary || 0;
233
- }
1
+ import { Column, Entity } from "typeorm";
2
+ import { BaseModel } from './BaseModel';
3
+
4
+ @Entity({ name: 'users' })
5
+ export class User extends BaseModel {
6
+
7
+ @Column({ type: 'bigint', nullable: true })
8
+ employee_id?: number;
9
+
10
+ @Column({ type: 'bigint', nullable: true })
11
+ civil_employee_id?: number;
12
+
13
+ @Column({ nullable: true })
14
+ employee_name?: string;
15
+
16
+ @Column({ nullable: true })
17
+ employee_arabic_name?: string;
18
+
19
+ @Column({ nullable: true })
20
+ person_type?: string;
21
+
22
+ @Column({ nullable: true })
23
+ date_of_birth?: string;
24
+
25
+ @Column({ nullable: true })
26
+ region_of_birth?: string;
27
+
28
+ @Column({ nullable: true })
29
+ country_of_birth?: string;
30
+
31
+ @Column({ nullable: true })
32
+ date_of_joining?: string;
33
+
34
+ @Column({ nullable: true })
35
+ last_promotion_date?: string;
36
+
37
+ @Column({ nullable: true })
38
+ gender?: string;
39
+
40
+ @Column({ nullable: true })
41
+ qualification?: string;
42
+
43
+ @Column({ nullable: true })
44
+ marital_status?: string;
45
+
46
+ @Column({ nullable: true })
47
+ nationality?: string;
48
+
49
+ @Column({ nullable: true })
50
+ email?: string;
51
+
52
+ @Column({ nullable: true })
53
+ blood_type?: string;
54
+
55
+ @Column({ type: 'varchar', length: 100, nullable: true })
56
+ national_id?: string;
57
+
58
+ @Column({ type: 'varchar', length: 100, nullable: true })
59
+ manpower_id?: string;
60
+
61
+ @Column({ nullable: true })
62
+ mobile?: string;
63
+
64
+ @Column({ nullable: true })
65
+ office_number?: string;
66
+
67
+ @Column({ nullable: true })
68
+ department?: number;
69
+
70
+ @Column({ type: "enum", enum: ["CAA", "Embassy"], nullable: false, default: "CAA" })
71
+ category: "CAA" | "Embassy"; // Mandatory
72
+
73
+ @Column({ nullable: true })
74
+ directorate?: string;
75
+
76
+ @Column({ nullable: true })
77
+ section?: number;
78
+
79
+ @Column({ nullable: true })
80
+ position?: number;
81
+
82
+ @Column({ nullable: true })
83
+ arabic_position?: string;
84
+
85
+ @Column({ nullable: true })
86
+ grade?: number;
87
+
88
+ @Column({ nullable: true })
89
+ location?: string;
90
+
91
+ @Column({ type: 'bigint', nullable: true })
92
+ supervisor_emp_id?: number;
93
+
94
+ @Column({ nullable: true })
95
+ supervisor_emp_name?: string;
96
+
97
+ @Column({ nullable: true , default: false})
98
+ is_admin?: boolean;
99
+
100
+ @Column({ nullable: true })
101
+ passport_number?: string;
102
+
103
+ @Column({ nullable: true })
104
+ personal_email?: string;
105
+
106
+ @Column({ nullable: true })
107
+ extension_number?: number;
108
+
109
+ @Column({ type: "varchar", length: 20, nullable: true })
110
+ fax_number?: string; // Optional
111
+
112
+ @Column({ nullable: true })
113
+ diplomatic_name?: string;
114
+
115
+ @Column({ nullable: true })
116
+ avatar?: string;
117
+
118
+ @Column({ nullable: true })
119
+ father_name?: string;
120
+
121
+ @Column({ nullable: true })
122
+ spouse_name?: string;
123
+
124
+ @Column({ nullable: true })
125
+ children1_name?: string;
126
+
127
+ @Column({ nullable: true })
128
+ children2_name?: string;
129
+
130
+ @Column({ nullable: true })
131
+ address?: string;
132
+
133
+ @Column({ nullable: true })
134
+ religion?: string;
135
+
136
+ @Column({ type: "decimal", precision: 10, scale: 3, nullable: true })
137
+ current_basic_salary: number;
138
+
139
+ @Column({ type: "decimal", precision: 10, scale: 3, nullable: true })
140
+ previous_basic_salary: number;
141
+
142
+ constructor(
143
+ employee_id?: number,
144
+ civil_employee_id?: number,
145
+ employee_name?: string,
146
+ employee_arabic_name?: string,
147
+ person_type?: string,
148
+ date_of_birth?: string,
149
+ region_of_birth?: string,
150
+ country_of_birth?: string,
151
+ date_of_joining?: string,
152
+ last_promotion_date?: string,
153
+ gender?: string,
154
+ qualification?: string,
155
+ marital_status?: string,
156
+ nationality?: string,
157
+ email?: string,
158
+ blood_type?: string,
159
+ national_id?: string,
160
+ manpower_id?: string,
161
+ mobile?: string,
162
+ office_number?: string,
163
+ department?: number,
164
+ category?: "CAA" | "Embassy",
165
+ directorate?: string,
166
+ section?: number,
167
+ position?: number,
168
+ arabic_position?: string,
169
+ grade?: number,
170
+ location?: string,
171
+ supervisor_emp_id?: number,
172
+ supervisor_emp_name?: string,
173
+ passport_number?: string,
174
+ personal_email?: string,
175
+ extension_number?: number,
176
+ fax_number?: string,
177
+ diplomatic_name?: string,
178
+ avatar?: string,
179
+ father_name?: string,
180
+ spouse_name?: string,
181
+ children1_name?: string,
182
+ children2_name?: string,
183
+ address?: string,
184
+ religion?: string,
185
+ current_basic_salary?: number,
186
+ previous_basic_salary?: number
187
+ ) {
188
+ super();
189
+ this.employee_id = employee_id;
190
+ this.civil_employee_id = civil_employee_id;
191
+ this.employee_name = employee_name;
192
+ this.employee_arabic_name = employee_arabic_name;
193
+ this.person_type = person_type;
194
+ this.date_of_birth = date_of_birth;
195
+ this.region_of_birth = region_of_birth;
196
+ this.country_of_birth = country_of_birth;
197
+ this.date_of_joining = date_of_joining;
198
+ this.last_promotion_date = last_promotion_date;
199
+ this.gender = gender;
200
+ this.qualification = qualification;
201
+ this.marital_status = marital_status;
202
+ this.nationality = nationality;
203
+ this.email = email;
204
+ this.blood_type = blood_type;
205
+ this.national_id = national_id;
206
+ this.manpower_id = manpower_id;
207
+ this.mobile = mobile;
208
+ this.office_number = office_number;
209
+ this.department = department;
210
+ this.category = category || "CAA";
211
+ this.directorate = directorate;
212
+ this.section = section;
213
+ this.position = position;
214
+ this.arabic_position = arabic_position;
215
+ this.grade = grade;
216
+ this.location = location;
217
+ this.supervisor_emp_id = supervisor_emp_id;
218
+ this.supervisor_emp_name = supervisor_emp_name;
219
+ this.passport_number = passport_number;
220
+ this.personal_email = personal_email;
221
+ this.extension_number = extension_number;
222
+ this.fax_number = fax_number;
223
+ this.diplomatic_name = diplomatic_name;
224
+ this.avatar = avatar;
225
+ this.father_name = father_name;
226
+ this.spouse_name = spouse_name;
227
+ this.children1_name = children1_name;
228
+ this.children2_name = children2_name;
229
+ this.address = address;
230
+ this.religion = religion;
231
+ this.current_basic_salary = current_basic_salary || 0;
232
+ this.previous_basic_salary = previous_basic_salary || 0;
233
+ }
234
234
  }
@@ -1,87 +1,87 @@
1
- import { EntityManager } from "typeorm";
2
- import { ServiceSlaApproval } from "../models/ServiceSlaApprovalModel";
3
- import { SlaRequest, SlaRequestStatus } from "../models/SlaRequestModel";
4
-
5
- export type PatchSlaApprovalTableInput = Partial<{
6
- approval_status: string;
7
- approver_user_id: number | null;
8
- approver_role_id: number | null;
9
- department_id: number | null;
10
- section_id: number | null;
11
- level: number;
12
- }>;
13
-
14
- export type PatchSlaRequestTableInput = Partial<{
15
- status: SlaRequestStatus | string;
16
- workflow_execution_id: string | null;
17
- }>;
18
-
19
- function stripUndefined<T extends Record<string, unknown>>(obj: T): Partial<T> {
20
- const out: Partial<T> = {};
21
- for (const key of Object.keys(obj)) {
22
- const v = obj[key];
23
- if (v !== undefined) {
24
- (out as Record<string, unknown>)[key] = v;
25
- }
26
- }
27
- return out;
28
- }
29
-
30
- /**
31
- * TypeORM patches for `sla_approval` and `sla_requests` by the keys used at insert time
32
- * (`source_approval_id` and native `request_id`). Safe to call from any service that shares the DB;
33
- * failures are swallowed so missing SLA rows never block business transactions.
34
- */
35
- export class SlaTableSyncService {
36
- static async patchSlaApprovalBySourceApprovalId(
37
- manager: EntityManager,
38
- sourceApprovalId: number,
39
- patch: PatchSlaApprovalTableInput,
40
- updatedBy?: number | null
41
- ): Promise<void> {
42
- if (!Number.isFinite(sourceApprovalId)) {
43
- return;
44
- }
45
- try {
46
- const setPayload: Record<string, unknown> = {
47
- ...stripUndefined(patch as Record<string, unknown>),
48
- updated_at: new Date()
49
- };
50
- if (updatedBy != null) {
51
- setPayload.updated_by = updatedBy;
52
- }
53
- await manager.getRepository(ServiceSlaApproval).update(
54
- { source_approval_id: sourceApprovalId, is_deleted: false },
55
- setPayload as any
56
- );
57
- } catch {
58
- // non-fatal
59
- }
60
- }
61
-
62
- static async patchSlaRequestByNativeRequestId(
63
- manager: EntityManager,
64
- nativeRequestId: number,
65
- patch: PatchSlaRequestTableInput,
66
- updatedBy?: number | null
67
- ): Promise<void> {
68
- if (!Number.isFinite(nativeRequestId) || nativeRequestId < 1) {
69
- return;
70
- }
71
- try {
72
- const setPayload: Record<string, unknown> = {
73
- ...stripUndefined(patch as Record<string, unknown>),
74
- updated_at: new Date()
75
- };
76
- if (updatedBy != null) {
77
- setPayload.updated_by = updatedBy;
78
- }
79
- await manager.getRepository(SlaRequest).update(
80
- { request_id: nativeRequestId, is_deleted: false },
81
- setPayload as any
82
- );
83
- } catch {
84
- // non-fatal
85
- }
86
- }
87
- }
1
+ import { EntityManager } from "typeorm";
2
+ import { ServiceSlaApproval } from "../models/ServiceSlaApprovalModel";
3
+ import { SlaRequest, SlaRequestStatus } from "../models/SlaRequestModel";
4
+
5
+ export type PatchSlaApprovalTableInput = Partial<{
6
+ approval_status: string;
7
+ approver_user_id: number | null;
8
+ approver_role_id: number | null;
9
+ department_id: number | null;
10
+ section_id: number | null;
11
+ level: number;
12
+ }>;
13
+
14
+ export type PatchSlaRequestTableInput = Partial<{
15
+ status: SlaRequestStatus | string;
16
+ workflow_execution_id: string | null;
17
+ }>;
18
+
19
+ function stripUndefined<T extends Record<string, unknown>>(obj: T): Partial<T> {
20
+ const out: Partial<T> = {};
21
+ for (const key of Object.keys(obj)) {
22
+ const v = obj[key];
23
+ if (v !== undefined) {
24
+ (out as Record<string, unknown>)[key] = v;
25
+ }
26
+ }
27
+ return out;
28
+ }
29
+
30
+ /**
31
+ * TypeORM patches for `sla_approval` and `sla_requests` by the keys used at insert time
32
+ * (`source_approval_id` and native `request_id`). Safe to call from any service that shares the DB;
33
+ * failures are swallowed so missing SLA rows never block business transactions.
34
+ */
35
+ export class SlaTableSyncService {
36
+ static async patchSlaApprovalBySourceApprovalId(
37
+ manager: EntityManager,
38
+ sourceApprovalId: number,
39
+ patch: PatchSlaApprovalTableInput,
40
+ updatedBy?: number | null
41
+ ): Promise<void> {
42
+ if (!Number.isFinite(sourceApprovalId)) {
43
+ return;
44
+ }
45
+ try {
46
+ const setPayload: Record<string, unknown> = {
47
+ ...stripUndefined(patch as Record<string, unknown>),
48
+ updated_at: new Date()
49
+ };
50
+ if (updatedBy != null) {
51
+ setPayload.updated_by = updatedBy;
52
+ }
53
+ await manager.getRepository(ServiceSlaApproval).update(
54
+ { source_approval_id: sourceApprovalId, is_deleted: false },
55
+ setPayload as any
56
+ );
57
+ } catch {
58
+ // non-fatal
59
+ }
60
+ }
61
+
62
+ static async patchSlaRequestByNativeRequestId(
63
+ manager: EntityManager,
64
+ nativeRequestId: number,
65
+ patch: PatchSlaRequestTableInput,
66
+ updatedBy?: number | null
67
+ ): Promise<void> {
68
+ if (!Number.isFinite(nativeRequestId) || nativeRequestId < 1) {
69
+ return;
70
+ }
71
+ try {
72
+ const setPayload: Record<string, unknown> = {
73
+ ...stripUndefined(patch as Record<string, unknown>),
74
+ updated_at: new Date()
75
+ };
76
+ if (updatedBy != null) {
77
+ setPayload.updated_by = updatedBy;
78
+ }
79
+ await manager.getRepository(SlaRequest).update(
80
+ { request_id: nativeRequestId, is_deleted: false },
81
+ setPayload as any
82
+ );
83
+ } catch {
84
+ // non-fatal
85
+ }
86
+ }
87
+ }