tiryaq-shared 1.0.0 → 1.1.0

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.
@@ -0,0 +1,248 @@
1
+ /**
2
+ * Standardized Error Codes for all services
3
+ * Format: SERVICE_DOMAIN_ERROR
4
+ */
5
+ export declare const COMMON_ERROR_CODES: {
6
+ readonly INTERNAL_SERVER_ERROR: "CMN_001";
7
+ readonly VALIDATION_ERROR: "CMN_002";
8
+ readonly INVALID_REQUEST: "CMN_003";
9
+ readonly RESOURCE_NOT_FOUND: "CMN_004";
10
+ readonly UNAUTHORIZED: "CMN_005";
11
+ readonly FORBIDDEN: "CMN_006";
12
+ readonly RATE_LIMIT_EXCEEDED: "CMN_007";
13
+ readonly DATABASE_CONNECTION_ERROR: "CMN_101";
14
+ readonly DATABASE_QUERY_ERROR: "CMN_102";
15
+ readonly DUPLICATE_ENTRY: "CMN_103";
16
+ readonly KAFKA_CONNECTION_ERROR: "CMN_201";
17
+ readonly REDIS_CONNECTION_ERROR: "CMN_202";
18
+ readonly EMAIL_SERVICE_ERROR: "CMN_203";
19
+ readonly SMS_SERVICE_ERROR: "CMN_204";
20
+ };
21
+ export declare const AUTH_ERROR_CODES: {
22
+ readonly INVALID_CREDENTIALS: "AUTH_001";
23
+ readonly USER_NOT_FOUND: "AUTH_002";
24
+ readonly EMAIL_ALREADY_EXISTS: "AUTH_003";
25
+ readonly WEAK_PASSWORD: "AUTH_004";
26
+ readonly ACCOUNT_LOCKED: "AUTH_005";
27
+ readonly EMAIL_NOT_VERIFIED: "AUTH_006";
28
+ readonly INVALID_TOKEN: "AUTH_101";
29
+ readonly TOKEN_EXPIRED: "AUTH_102";
30
+ readonly TOKEN_BLACKLISTED: "AUTH_103";
31
+ readonly REFRESH_TOKEN_INVALID: "AUTH_104";
32
+ readonly PROFILE_UPDATE_FAILED: "AUTH_201";
33
+ readonly ADDRESS_NOT_FOUND: "AUTH_202";
34
+ readonly ADDRESS_LIMIT_EXCEEDED: "AUTH_203";
35
+ };
36
+ export declare const PHARMACY_ERROR_CODES: {
37
+ readonly PHARMACY_NOT_FOUND: "PHARM_001";
38
+ readonly PHARMACY_CLOSED: "PHARM_002";
39
+ readonly MEDICINE_NOT_FOUND: "PHARM_003";
40
+ readonly MEDICINE_OUT_OF_STOCK: "PHARM_004";
41
+ readonly PRESCRIPTION_REQUIRED: "PHARM_005";
42
+ readonly ORDER_NOT_FOUND: "PHARM_101";
43
+ readonly ORDER_ALREADY_CANCELLED: "PHARM_102";
44
+ readonly ORDER_CANNOT_BE_MODIFIED: "PHARM_103";
45
+ readonly INVALID_ORDER_STATUS: "PHARM_104";
46
+ readonly INSUFFICIENT_STOCK: "PHARM_105";
47
+ readonly INVALID_PRESCRIPTION: "PHARM_201";
48
+ readonly PRESCRIPTION_EXPIRED: "PHARM_202";
49
+ readonly PRESCRIPTION_UPLOAD_FAILED: "PHARM_203";
50
+ };
51
+ export declare const CONSULTATION_ERROR_CODES: {
52
+ readonly DOCTOR_NOT_FOUND: "CONS_001";
53
+ readonly DOCTOR_UNAVAILABLE: "CONS_002";
54
+ readonly INVALID_SPECIALTY: "CONS_003";
55
+ readonly APPOINTMENT_NOT_FOUND: "CONS_101";
56
+ readonly APPOINTMENT_ALREADY_BOOKED: "CONS_102";
57
+ readonly APPOINTMENT_CANCELLED: "CONS_103";
58
+ readonly INVALID_TIME_SLOT: "CONS_104";
59
+ readonly APPOINTMENT_IN_PAST: "CONS_105";
60
+ readonly BOOKING_WINDOW_CLOSED: "CONS_106";
61
+ readonly CONSULTATION_NOT_STARTED: "CONS_201";
62
+ readonly CONSULTATION_ENDED: "CONS_202";
63
+ readonly PRESCRIPTION_GENERATION_FAILED: "CONS_203";
64
+ };
65
+ export declare const PAYMENT_ERROR_CODES: {
66
+ readonly INSUFFICIENT_BALANCE: "PAY_001";
67
+ readonly WALLET_NOT_FOUND: "PAY_002";
68
+ readonly WALLET_LOCKED: "PAY_003";
69
+ readonly MINIMUM_BALANCE_ERROR: "PAY_004";
70
+ readonly PAYMENT_FAILED: "PAY_101";
71
+ readonly PAYMENT_GATEWAY_ERROR: "PAY_102";
72
+ readonly INVALID_PAYMENT_METHOD: "PAY_103";
73
+ readonly PAYMENT_ALREADY_PROCESSED: "PAY_104";
74
+ readonly REFUND_FAILED: "PAY_105";
75
+ readonly CARD_NOT_FOUND: "PAY_201";
76
+ readonly CARD_EXPIRED: "PAY_202";
77
+ readonly CARD_DECLINED: "PAY_203";
78
+ readonly INVALID_CARD_DETAILS: "PAY_204";
79
+ };
80
+ export declare const LAB_ERROR_CODES: {
81
+ readonly LAB_NOT_FOUND: "LAB_001";
82
+ readonly LAB_CLOSED: "LAB_002";
83
+ readonly TEST_NOT_AVAILABLE: "LAB_003";
84
+ readonly LAB_APPOINTMENT_NOT_FOUND: "LAB_101";
85
+ readonly TIME_SLOT_UNAVAILABLE: "LAB_102";
86
+ readonly APPOINTMENT_BOOKING_FAILED: "LAB_103";
87
+ readonly REPORT_NOT_FOUND: "LAB_201";
88
+ readonly REPORT_UPLOAD_FAILED: "LAB_202";
89
+ readonly REPORT_GENERATION_FAILED: "LAB_203";
90
+ };
91
+ export declare const NOTIFICATION_ERROR_CODES: {
92
+ readonly NOTIFICATION_NOT_FOUND: "NOTIF_001";
93
+ readonly NOTIFICATION_SEND_FAILED: "NOTIF_002";
94
+ readonly INVALID_NOTIFICATION_TYPE: "NOTIF_003";
95
+ readonly SETTINGS_UPDATE_FAILED: "NOTIF_101";
96
+ readonly INVALID_SETTINGS: "NOTIF_102";
97
+ };
98
+ export declare const SEARCH_ERROR_CODES: {
99
+ readonly SEARCH_FAILED: "SEARCH_001";
100
+ readonly INVALID_SEARCH_QUERY: "SEARCH_002";
101
+ readonly ELASTICSEARCH_ERROR: "SEARCH_003";
102
+ readonly INDEX_NOT_FOUND: "SEARCH_004";
103
+ };
104
+ export declare const TELEMEDICINE_ERROR_CODES: {
105
+ readonly SESSION_NOT_FOUND: "TELE_001";
106
+ readonly SESSION_EXPIRED: "TELE_002";
107
+ readonly SESSION_CREATION_FAILED: "TELE_003";
108
+ readonly INVALID_SESSION_TOKEN: "TELE_004";
109
+ readonly VIDEO_CONNECTION_FAILED: "TELE_101";
110
+ readonly CHAT_SEND_FAILED: "TELE_102";
111
+ readonly RECORDING_FAILED: "TELE_103";
112
+ readonly DOCUMENT_UPLOAD_FAILED: "TELE_201";
113
+ readonly DOCUMENT_NOT_FOUND: "TELE_202";
114
+ };
115
+ export declare const SETTINGS_ERROR_CODES: {
116
+ readonly USER_SETTINGS_NOT_FOUND: "SET_001";
117
+ readonly SETTINGS_UPDATE_FAILED: "SET_002";
118
+ readonly INVALID_PREFERENCE: "SET_003";
119
+ readonly PRIVACY_SETTINGS_ERROR: "SET_101";
120
+ readonly DATA_EXPORT_FAILED: "SET_102";
121
+ };
122
+ export declare const SUCCESS_CODES: {
123
+ readonly OPERATION_SUCCESSFUL: "SUC_001";
124
+ readonly CREATED_SUCCESSFULLY: "SUC_002";
125
+ readonly UPDATED_SUCCESSFULLY: "SUC_003";
126
+ readonly DELETED_SUCCESSFULLY: "SUC_004";
127
+ readonly RETRIEVED_SUCCESSFULLY: "SUC_005";
128
+ readonly USER_REGISTERED: "AUTH_SUC_001";
129
+ readonly USER_LOGGED_IN: "AUTH_SUC_002";
130
+ readonly USER_LOGGED_OUT: "AUTH_SUC_003";
131
+ readonly TOKEN_REFRESHED: "AUTH_SUC_004";
132
+ readonly PROFILE_UPDATED: "AUTH_SUC_005";
133
+ readonly ORDER_PLACED: "PHARM_SUC_001";
134
+ readonly ORDER_UPDATED: "PHARM_SUC_002";
135
+ readonly ORDER_CANCELLED: "PHARM_SUC_003";
136
+ readonly PRESCRIPTION_UPLOADED: "PHARM_SUC_004";
137
+ readonly APPOINTMENT_BOOKED: "CONS_SUC_001";
138
+ readonly APPOINTMENT_COMPLETED: "CONS_SUC_002";
139
+ readonly PRESCRIPTION_GENERATED: "CONS_SUC_003";
140
+ readonly PAYMENT_PROCESSED: "PAY_SUC_001";
141
+ readonly REFUND_PROCESSED: "PAY_SUC_002";
142
+ readonly WALLET_RECHARGED: "PAY_SUC_003";
143
+ readonly LAB_APPOINTMENT_BOOKED: "LAB_SUC_001";
144
+ readonly REPORT_UPLOADED: "LAB_SUC_002";
145
+ readonly NOTIFICATION_SENT: "NOTIF_SUC_001";
146
+ readonly SETTINGS_UPDATED: "NOTIF_SUC_002";
147
+ };
148
+ export declare const ERROR_CODES: {
149
+ readonly USER_SETTINGS_NOT_FOUND: "SET_001";
150
+ readonly SETTINGS_UPDATE_FAILED: "SET_002";
151
+ readonly INVALID_PREFERENCE: "SET_003";
152
+ readonly PRIVACY_SETTINGS_ERROR: "SET_101";
153
+ readonly DATA_EXPORT_FAILED: "SET_102";
154
+ readonly SESSION_NOT_FOUND: "TELE_001";
155
+ readonly SESSION_EXPIRED: "TELE_002";
156
+ readonly SESSION_CREATION_FAILED: "TELE_003";
157
+ readonly INVALID_SESSION_TOKEN: "TELE_004";
158
+ readonly VIDEO_CONNECTION_FAILED: "TELE_101";
159
+ readonly CHAT_SEND_FAILED: "TELE_102";
160
+ readonly RECORDING_FAILED: "TELE_103";
161
+ readonly DOCUMENT_UPLOAD_FAILED: "TELE_201";
162
+ readonly DOCUMENT_NOT_FOUND: "TELE_202";
163
+ readonly SEARCH_FAILED: "SEARCH_001";
164
+ readonly INVALID_SEARCH_QUERY: "SEARCH_002";
165
+ readonly ELASTICSEARCH_ERROR: "SEARCH_003";
166
+ readonly INDEX_NOT_FOUND: "SEARCH_004";
167
+ readonly NOTIFICATION_NOT_FOUND: "NOTIF_001";
168
+ readonly NOTIFICATION_SEND_FAILED: "NOTIF_002";
169
+ readonly INVALID_NOTIFICATION_TYPE: "NOTIF_003";
170
+ readonly INVALID_SETTINGS: "NOTIF_102";
171
+ readonly LAB_NOT_FOUND: "LAB_001";
172
+ readonly LAB_CLOSED: "LAB_002";
173
+ readonly TEST_NOT_AVAILABLE: "LAB_003";
174
+ readonly LAB_APPOINTMENT_NOT_FOUND: "LAB_101";
175
+ readonly TIME_SLOT_UNAVAILABLE: "LAB_102";
176
+ readonly APPOINTMENT_BOOKING_FAILED: "LAB_103";
177
+ readonly REPORT_NOT_FOUND: "LAB_201";
178
+ readonly REPORT_UPLOAD_FAILED: "LAB_202";
179
+ readonly REPORT_GENERATION_FAILED: "LAB_203";
180
+ readonly INSUFFICIENT_BALANCE: "PAY_001";
181
+ readonly WALLET_NOT_FOUND: "PAY_002";
182
+ readonly WALLET_LOCKED: "PAY_003";
183
+ readonly MINIMUM_BALANCE_ERROR: "PAY_004";
184
+ readonly PAYMENT_FAILED: "PAY_101";
185
+ readonly PAYMENT_GATEWAY_ERROR: "PAY_102";
186
+ readonly INVALID_PAYMENT_METHOD: "PAY_103";
187
+ readonly PAYMENT_ALREADY_PROCESSED: "PAY_104";
188
+ readonly REFUND_FAILED: "PAY_105";
189
+ readonly CARD_NOT_FOUND: "PAY_201";
190
+ readonly CARD_EXPIRED: "PAY_202";
191
+ readonly CARD_DECLINED: "PAY_203";
192
+ readonly INVALID_CARD_DETAILS: "PAY_204";
193
+ readonly DOCTOR_NOT_FOUND: "CONS_001";
194
+ readonly DOCTOR_UNAVAILABLE: "CONS_002";
195
+ readonly INVALID_SPECIALTY: "CONS_003";
196
+ readonly APPOINTMENT_NOT_FOUND: "CONS_101";
197
+ readonly APPOINTMENT_ALREADY_BOOKED: "CONS_102";
198
+ readonly APPOINTMENT_CANCELLED: "CONS_103";
199
+ readonly INVALID_TIME_SLOT: "CONS_104";
200
+ readonly APPOINTMENT_IN_PAST: "CONS_105";
201
+ readonly BOOKING_WINDOW_CLOSED: "CONS_106";
202
+ readonly CONSULTATION_NOT_STARTED: "CONS_201";
203
+ readonly CONSULTATION_ENDED: "CONS_202";
204
+ readonly PRESCRIPTION_GENERATION_FAILED: "CONS_203";
205
+ readonly PHARMACY_NOT_FOUND: "PHARM_001";
206
+ readonly PHARMACY_CLOSED: "PHARM_002";
207
+ readonly MEDICINE_NOT_FOUND: "PHARM_003";
208
+ readonly MEDICINE_OUT_OF_STOCK: "PHARM_004";
209
+ readonly PRESCRIPTION_REQUIRED: "PHARM_005";
210
+ readonly ORDER_NOT_FOUND: "PHARM_101";
211
+ readonly ORDER_ALREADY_CANCELLED: "PHARM_102";
212
+ readonly ORDER_CANNOT_BE_MODIFIED: "PHARM_103";
213
+ readonly INVALID_ORDER_STATUS: "PHARM_104";
214
+ readonly INSUFFICIENT_STOCK: "PHARM_105";
215
+ readonly INVALID_PRESCRIPTION: "PHARM_201";
216
+ readonly PRESCRIPTION_EXPIRED: "PHARM_202";
217
+ readonly PRESCRIPTION_UPLOAD_FAILED: "PHARM_203";
218
+ readonly INVALID_CREDENTIALS: "AUTH_001";
219
+ readonly USER_NOT_FOUND: "AUTH_002";
220
+ readonly EMAIL_ALREADY_EXISTS: "AUTH_003";
221
+ readonly WEAK_PASSWORD: "AUTH_004";
222
+ readonly ACCOUNT_LOCKED: "AUTH_005";
223
+ readonly EMAIL_NOT_VERIFIED: "AUTH_006";
224
+ readonly INVALID_TOKEN: "AUTH_101";
225
+ readonly TOKEN_EXPIRED: "AUTH_102";
226
+ readonly TOKEN_BLACKLISTED: "AUTH_103";
227
+ readonly REFRESH_TOKEN_INVALID: "AUTH_104";
228
+ readonly PROFILE_UPDATE_FAILED: "AUTH_201";
229
+ readonly ADDRESS_NOT_FOUND: "AUTH_202";
230
+ readonly ADDRESS_LIMIT_EXCEEDED: "AUTH_203";
231
+ readonly INTERNAL_SERVER_ERROR: "CMN_001";
232
+ readonly VALIDATION_ERROR: "CMN_002";
233
+ readonly INVALID_REQUEST: "CMN_003";
234
+ readonly RESOURCE_NOT_FOUND: "CMN_004";
235
+ readonly UNAUTHORIZED: "CMN_005";
236
+ readonly FORBIDDEN: "CMN_006";
237
+ readonly RATE_LIMIT_EXCEEDED: "CMN_007";
238
+ readonly DATABASE_CONNECTION_ERROR: "CMN_101";
239
+ readonly DATABASE_QUERY_ERROR: "CMN_102";
240
+ readonly DUPLICATE_ENTRY: "CMN_103";
241
+ readonly KAFKA_CONNECTION_ERROR: "CMN_201";
242
+ readonly REDIS_CONNECTION_ERROR: "CMN_202";
243
+ readonly EMAIL_SERVICE_ERROR: "CMN_203";
244
+ readonly SMS_SERVICE_ERROR: "CMN_204";
245
+ };
246
+ export type ErrorCode = typeof ERROR_CODES[keyof typeof ERROR_CODES];
247
+ export type SuccessCode = typeof SUCCESS_CODES[keyof typeof SUCCESS_CODES];
248
+ //# sourceMappingURL=error-codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-codes.d.ts","sourceRoot":"","sources":["../src/error-codes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;CAoBrB,CAAC;AAGX,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;CAmBnB,CAAC;AAGX,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;CAmBvB,CAAC;AAGX,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;CAkB3B,CAAC;AAGX,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;CAmBtB,CAAC;AAGX,eAAO,MAAM,eAAe;;;;;;;;;;CAelB,CAAC;AAGX,eAAO,MAAM,wBAAwB;;;;;;CAS3B,CAAC;AAGX,eAAO,MAAM,kBAAkB;;;;;CAMrB,CAAC;AAGX,eAAO,MAAM,wBAAwB;;;;;;;;;;CAe3B,CAAC;AAGX,eAAO,MAAM,oBAAoB;;;;;;CASvB,CAAC;AAGX,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;CAsChB,CAAC;AAGX,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWd,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,OAAO,WAAW,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AACrE,MAAM,MAAM,WAAW,GAAG,OAAO,aAAa,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC"}
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ /**
3
+ * Standardized Error Codes for all services
4
+ * Format: SERVICE_DOMAIN_ERROR
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ERROR_CODES = exports.SUCCESS_CODES = exports.SETTINGS_ERROR_CODES = exports.TELEMEDICINE_ERROR_CODES = exports.SEARCH_ERROR_CODES = exports.NOTIFICATION_ERROR_CODES = exports.LAB_ERROR_CODES = exports.PAYMENT_ERROR_CODES = exports.CONSULTATION_ERROR_CODES = exports.PHARMACY_ERROR_CODES = exports.AUTH_ERROR_CODES = exports.COMMON_ERROR_CODES = void 0;
8
+ // Common Error Codes (1000-1999)
9
+ exports.COMMON_ERROR_CODES = {
10
+ // General errors
11
+ INTERNAL_SERVER_ERROR: 'CMN_001',
12
+ VALIDATION_ERROR: 'CMN_002',
13
+ INVALID_REQUEST: 'CMN_003',
14
+ RESOURCE_NOT_FOUND: 'CMN_004',
15
+ UNAUTHORIZED: 'CMN_005',
16
+ FORBIDDEN: 'CMN_006',
17
+ RATE_LIMIT_EXCEEDED: 'CMN_007',
18
+ // Database errors
19
+ DATABASE_CONNECTION_ERROR: 'CMN_101',
20
+ DATABASE_QUERY_ERROR: 'CMN_102',
21
+ DUPLICATE_ENTRY: 'CMN_103',
22
+ // External service errors
23
+ KAFKA_CONNECTION_ERROR: 'CMN_201',
24
+ REDIS_CONNECTION_ERROR: 'CMN_202',
25
+ EMAIL_SERVICE_ERROR: 'CMN_203',
26
+ SMS_SERVICE_ERROR: 'CMN_204',
27
+ };
28
+ // Auth Service Error Codes (2000-2999)
29
+ exports.AUTH_ERROR_CODES = {
30
+ // Authentication errors
31
+ INVALID_CREDENTIALS: 'AUTH_001',
32
+ USER_NOT_FOUND: 'AUTH_002',
33
+ EMAIL_ALREADY_EXISTS: 'AUTH_003',
34
+ WEAK_PASSWORD: 'AUTH_004',
35
+ ACCOUNT_LOCKED: 'AUTH_005',
36
+ EMAIL_NOT_VERIFIED: 'AUTH_006',
37
+ // Token errors
38
+ INVALID_TOKEN: 'AUTH_101',
39
+ TOKEN_EXPIRED: 'AUTH_102',
40
+ TOKEN_BLACKLISTED: 'AUTH_103',
41
+ REFRESH_TOKEN_INVALID: 'AUTH_104',
42
+ // Profile errors
43
+ PROFILE_UPDATE_FAILED: 'AUTH_201',
44
+ ADDRESS_NOT_FOUND: 'AUTH_202',
45
+ ADDRESS_LIMIT_EXCEEDED: 'AUTH_203',
46
+ };
47
+ // Pharmacy Service Error Codes (3000-3999)
48
+ exports.PHARMACY_ERROR_CODES = {
49
+ // Pharmacy errors
50
+ PHARMACY_NOT_FOUND: 'PHARM_001',
51
+ PHARMACY_CLOSED: 'PHARM_002',
52
+ MEDICINE_NOT_FOUND: 'PHARM_003',
53
+ MEDICINE_OUT_OF_STOCK: 'PHARM_004',
54
+ PRESCRIPTION_REQUIRED: 'PHARM_005',
55
+ // Order errors
56
+ ORDER_NOT_FOUND: 'PHARM_101',
57
+ ORDER_ALREADY_CANCELLED: 'PHARM_102',
58
+ ORDER_CANNOT_BE_MODIFIED: 'PHARM_103',
59
+ INVALID_ORDER_STATUS: 'PHARM_104',
60
+ INSUFFICIENT_STOCK: 'PHARM_105',
61
+ // Prescription errors
62
+ INVALID_PRESCRIPTION: 'PHARM_201',
63
+ PRESCRIPTION_EXPIRED: 'PHARM_202',
64
+ PRESCRIPTION_UPLOAD_FAILED: 'PHARM_203',
65
+ };
66
+ // Consultation Service Error Codes (4000-4999)
67
+ exports.CONSULTATION_ERROR_CODES = {
68
+ // Doctor errors
69
+ DOCTOR_NOT_FOUND: 'CONS_001',
70
+ DOCTOR_UNAVAILABLE: 'CONS_002',
71
+ INVALID_SPECIALTY: 'CONS_003',
72
+ // Appointment errors
73
+ APPOINTMENT_NOT_FOUND: 'CONS_101',
74
+ APPOINTMENT_ALREADY_BOOKED: 'CONS_102',
75
+ APPOINTMENT_CANCELLED: 'CONS_103',
76
+ INVALID_TIME_SLOT: 'CONS_104',
77
+ APPOINTMENT_IN_PAST: 'CONS_105',
78
+ BOOKING_WINDOW_CLOSED: 'CONS_106',
79
+ // Consultation errors
80
+ CONSULTATION_NOT_STARTED: 'CONS_201',
81
+ CONSULTATION_ENDED: 'CONS_202',
82
+ PRESCRIPTION_GENERATION_FAILED: 'CONS_203',
83
+ };
84
+ // Payment Service Error Codes (5000-5999)
85
+ exports.PAYMENT_ERROR_CODES = {
86
+ // Wallet errors
87
+ INSUFFICIENT_BALANCE: 'PAY_001',
88
+ WALLET_NOT_FOUND: 'PAY_002',
89
+ WALLET_LOCKED: 'PAY_003',
90
+ MINIMUM_BALANCE_ERROR: 'PAY_004',
91
+ // Payment errors
92
+ PAYMENT_FAILED: 'PAY_101',
93
+ PAYMENT_GATEWAY_ERROR: 'PAY_102',
94
+ INVALID_PAYMENT_METHOD: 'PAY_103',
95
+ PAYMENT_ALREADY_PROCESSED: 'PAY_104',
96
+ REFUND_FAILED: 'PAY_105',
97
+ // Card errors
98
+ CARD_NOT_FOUND: 'PAY_201',
99
+ CARD_EXPIRED: 'PAY_202',
100
+ CARD_DECLINED: 'PAY_203',
101
+ INVALID_CARD_DETAILS: 'PAY_204',
102
+ };
103
+ // Lab Service Error Codes (6000-6999)
104
+ exports.LAB_ERROR_CODES = {
105
+ // Lab errors
106
+ LAB_NOT_FOUND: 'LAB_001',
107
+ LAB_CLOSED: 'LAB_002',
108
+ TEST_NOT_AVAILABLE: 'LAB_003',
109
+ // Appointment errors
110
+ LAB_APPOINTMENT_NOT_FOUND: 'LAB_101',
111
+ TIME_SLOT_UNAVAILABLE: 'LAB_102',
112
+ APPOINTMENT_BOOKING_FAILED: 'LAB_103',
113
+ // Report errors
114
+ REPORT_NOT_FOUND: 'LAB_201',
115
+ REPORT_UPLOAD_FAILED: 'LAB_202',
116
+ REPORT_GENERATION_FAILED: 'LAB_203',
117
+ };
118
+ // Notification Service Error Codes (7000-7999)
119
+ exports.NOTIFICATION_ERROR_CODES = {
120
+ // Notification errors
121
+ NOTIFICATION_NOT_FOUND: 'NOTIF_001',
122
+ NOTIFICATION_SEND_FAILED: 'NOTIF_002',
123
+ INVALID_NOTIFICATION_TYPE: 'NOTIF_003',
124
+ // Settings errors
125
+ SETTINGS_UPDATE_FAILED: 'NOTIF_101',
126
+ INVALID_SETTINGS: 'NOTIF_102',
127
+ };
128
+ // Search Service Error Codes (8000-8999)
129
+ exports.SEARCH_ERROR_CODES = {
130
+ // Search errors
131
+ SEARCH_FAILED: 'SEARCH_001',
132
+ INVALID_SEARCH_QUERY: 'SEARCH_002',
133
+ ELASTICSEARCH_ERROR: 'SEARCH_003',
134
+ INDEX_NOT_FOUND: 'SEARCH_004',
135
+ };
136
+ // Telemedicine Service Error Codes (9000-9999)
137
+ exports.TELEMEDICINE_ERROR_CODES = {
138
+ // Session errors
139
+ SESSION_NOT_FOUND: 'TELE_001',
140
+ SESSION_EXPIRED: 'TELE_002',
141
+ SESSION_CREATION_FAILED: 'TELE_003',
142
+ INVALID_SESSION_TOKEN: 'TELE_004',
143
+ // Video/Chat errors
144
+ VIDEO_CONNECTION_FAILED: 'TELE_101',
145
+ CHAT_SEND_FAILED: 'TELE_102',
146
+ RECORDING_FAILED: 'TELE_103',
147
+ // Document errors
148
+ DOCUMENT_UPLOAD_FAILED: 'TELE_201',
149
+ DOCUMENT_NOT_FOUND: 'TELE_202',
150
+ };
151
+ // Settings Service Error Codes (10000-10999)
152
+ exports.SETTINGS_ERROR_CODES = {
153
+ // User settings errors
154
+ USER_SETTINGS_NOT_FOUND: 'SET_001',
155
+ SETTINGS_UPDATE_FAILED: 'SET_002',
156
+ INVALID_PREFERENCE: 'SET_003',
157
+ // Privacy errors
158
+ PRIVACY_SETTINGS_ERROR: 'SET_101',
159
+ DATA_EXPORT_FAILED: 'SET_102',
160
+ };
161
+ // Success Codes for each service
162
+ exports.SUCCESS_CODES = {
163
+ // Common success codes
164
+ OPERATION_SUCCESSFUL: 'SUC_001',
165
+ CREATED_SUCCESSFULLY: 'SUC_002',
166
+ UPDATED_SUCCESSFULLY: 'SUC_003',
167
+ DELETED_SUCCESSFULLY: 'SUC_004',
168
+ RETRIEVED_SUCCESSFULLY: 'SUC_005',
169
+ // Auth specific
170
+ USER_REGISTERED: 'AUTH_SUC_001',
171
+ USER_LOGGED_IN: 'AUTH_SUC_002',
172
+ USER_LOGGED_OUT: 'AUTH_SUC_003',
173
+ TOKEN_REFRESHED: 'AUTH_SUC_004',
174
+ PROFILE_UPDATED: 'AUTH_SUC_005',
175
+ // Pharmacy specific
176
+ ORDER_PLACED: 'PHARM_SUC_001',
177
+ ORDER_UPDATED: 'PHARM_SUC_002',
178
+ ORDER_CANCELLED: 'PHARM_SUC_003',
179
+ PRESCRIPTION_UPLOADED: 'PHARM_SUC_004',
180
+ // Consultation specific
181
+ APPOINTMENT_BOOKED: 'CONS_SUC_001',
182
+ APPOINTMENT_COMPLETED: 'CONS_SUC_002',
183
+ PRESCRIPTION_GENERATED: 'CONS_SUC_003',
184
+ // Payment specific
185
+ PAYMENT_PROCESSED: 'PAY_SUC_001',
186
+ REFUND_PROCESSED: 'PAY_SUC_002',
187
+ WALLET_RECHARGED: 'PAY_SUC_003',
188
+ // Lab specific
189
+ LAB_APPOINTMENT_BOOKED: 'LAB_SUC_001',
190
+ REPORT_UPLOADED: 'LAB_SUC_002',
191
+ // Notification specific
192
+ NOTIFICATION_SENT: 'NOTIF_SUC_001',
193
+ SETTINGS_UPDATED: 'NOTIF_SUC_002',
194
+ };
195
+ // All error codes combined for easy import
196
+ exports.ERROR_CODES = {
197
+ ...exports.COMMON_ERROR_CODES,
198
+ ...exports.AUTH_ERROR_CODES,
199
+ ...exports.PHARMACY_ERROR_CODES,
200
+ ...exports.CONSULTATION_ERROR_CODES,
201
+ ...exports.PAYMENT_ERROR_CODES,
202
+ ...exports.LAB_ERROR_CODES,
203
+ ...exports.NOTIFICATION_ERROR_CODES,
204
+ ...exports.SEARCH_ERROR_CODES,
205
+ ...exports.TELEMEDICINE_ERROR_CODES,
206
+ ...exports.SETTINGS_ERROR_CODES,
207
+ };
208
+ //# sourceMappingURL=error-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-codes.js","sourceRoot":"","sources":["../src/error-codes.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,iCAAiC;AACpB,QAAA,kBAAkB,GAAG;IAChC,iBAAiB;IACjB,qBAAqB,EAAE,SAAS;IAChC,gBAAgB,EAAE,SAAS;IAC3B,eAAe,EAAE,SAAS;IAC1B,kBAAkB,EAAE,SAAS;IAC7B,YAAY,EAAE,SAAS;IACvB,SAAS,EAAE,SAAS;IACpB,mBAAmB,EAAE,SAAS;IAE9B,kBAAkB;IAClB,yBAAyB,EAAE,SAAS;IACpC,oBAAoB,EAAE,SAAS;IAC/B,eAAe,EAAE,SAAS;IAE1B,0BAA0B;IAC1B,sBAAsB,EAAE,SAAS;IACjC,sBAAsB,EAAE,SAAS;IACjC,mBAAmB,EAAE,SAAS;IAC9B,iBAAiB,EAAE,SAAS;CACpB,CAAC;AAEX,uCAAuC;AAC1B,QAAA,gBAAgB,GAAG;IAC9B,wBAAwB;IACxB,mBAAmB,EAAE,UAAU;IAC/B,cAAc,EAAE,UAAU;IAC1B,oBAAoB,EAAE,UAAU;IAChC,aAAa,EAAE,UAAU;IACzB,cAAc,EAAE,UAAU;IAC1B,kBAAkB,EAAE,UAAU;IAE9B,eAAe;IACf,aAAa,EAAE,UAAU;IACzB,aAAa,EAAE,UAAU;IACzB,iBAAiB,EAAE,UAAU;IAC7B,qBAAqB,EAAE,UAAU;IAEjC,iBAAiB;IACjB,qBAAqB,EAAE,UAAU;IACjC,iBAAiB,EAAE,UAAU;IAC7B,sBAAsB,EAAE,UAAU;CAC1B,CAAC;AAEX,2CAA2C;AAC9B,QAAA,oBAAoB,GAAG;IAClC,kBAAkB;IAClB,kBAAkB,EAAE,WAAW;IAC/B,eAAe,EAAE,WAAW;IAC5B,kBAAkB,EAAE,WAAW;IAC/B,qBAAqB,EAAE,WAAW;IAClC,qBAAqB,EAAE,WAAW;IAElC,eAAe;IACf,eAAe,EAAE,WAAW;IAC5B,uBAAuB,EAAE,WAAW;IACpC,wBAAwB,EAAE,WAAW;IACrC,oBAAoB,EAAE,WAAW;IACjC,kBAAkB,EAAE,WAAW;IAE/B,sBAAsB;IACtB,oBAAoB,EAAE,WAAW;IACjC,oBAAoB,EAAE,WAAW;IACjC,0BAA0B,EAAE,WAAW;CAC/B,CAAC;AAEX,+CAA+C;AAClC,QAAA,wBAAwB,GAAG;IACtC,gBAAgB;IAChB,gBAAgB,EAAE,UAAU;IAC5B,kBAAkB,EAAE,UAAU;IAC9B,iBAAiB,EAAE,UAAU;IAE7B,qBAAqB;IACrB,qBAAqB,EAAE,UAAU;IACjC,0BAA0B,EAAE,UAAU;IACtC,qBAAqB,EAAE,UAAU;IACjC,iBAAiB,EAAE,UAAU;IAC7B,mBAAmB,EAAE,UAAU;IAC/B,qBAAqB,EAAE,UAAU;IAEjC,sBAAsB;IACtB,wBAAwB,EAAE,UAAU;IACpC,kBAAkB,EAAE,UAAU;IAC9B,8BAA8B,EAAE,UAAU;CAClC,CAAC;AAEX,0CAA0C;AAC7B,QAAA,mBAAmB,GAAG;IACjC,gBAAgB;IAChB,oBAAoB,EAAE,SAAS;IAC/B,gBAAgB,EAAE,SAAS;IAC3B,aAAa,EAAE,SAAS;IACxB,qBAAqB,EAAE,SAAS;IAEhC,iBAAiB;IACjB,cAAc,EAAE,SAAS;IACzB,qBAAqB,EAAE,SAAS;IAChC,sBAAsB,EAAE,SAAS;IACjC,yBAAyB,EAAE,SAAS;IACpC,aAAa,EAAE,SAAS;IAExB,cAAc;IACd,cAAc,EAAE,SAAS;IACzB,YAAY,EAAE,SAAS;IACvB,aAAa,EAAE,SAAS;IACxB,oBAAoB,EAAE,SAAS;CACvB,CAAC;AAEX,sCAAsC;AACzB,QAAA,eAAe,GAAG;IAC7B,aAAa;IACb,aAAa,EAAE,SAAS;IACxB,UAAU,EAAE,SAAS;IACrB,kBAAkB,EAAE,SAAS;IAE7B,qBAAqB;IACrB,yBAAyB,EAAE,SAAS;IACpC,qBAAqB,EAAE,SAAS;IAChC,0BAA0B,EAAE,SAAS;IAErC,gBAAgB;IAChB,gBAAgB,EAAE,SAAS;IAC3B,oBAAoB,EAAE,SAAS;IAC/B,wBAAwB,EAAE,SAAS;CAC3B,CAAC;AAEX,+CAA+C;AAClC,QAAA,wBAAwB,GAAG;IACtC,sBAAsB;IACtB,sBAAsB,EAAE,WAAW;IACnC,wBAAwB,EAAE,WAAW;IACrC,yBAAyB,EAAE,WAAW;IAEtC,kBAAkB;IAClB,sBAAsB,EAAE,WAAW;IACnC,gBAAgB,EAAE,WAAW;CACrB,CAAC;AAEX,yCAAyC;AAC5B,QAAA,kBAAkB,GAAG;IAChC,gBAAgB;IAChB,aAAa,EAAE,YAAY;IAC3B,oBAAoB,EAAE,YAAY;IAClC,mBAAmB,EAAE,YAAY;IACjC,eAAe,EAAE,YAAY;CACrB,CAAC;AAEX,+CAA+C;AAClC,QAAA,wBAAwB,GAAG;IACtC,iBAAiB;IACjB,iBAAiB,EAAE,UAAU;IAC7B,eAAe,EAAE,UAAU;IAC3B,uBAAuB,EAAE,UAAU;IACnC,qBAAqB,EAAE,UAAU;IAEjC,oBAAoB;IACpB,uBAAuB,EAAE,UAAU;IACnC,gBAAgB,EAAE,UAAU;IAC5B,gBAAgB,EAAE,UAAU;IAE5B,kBAAkB;IAClB,sBAAsB,EAAE,UAAU;IAClC,kBAAkB,EAAE,UAAU;CACtB,CAAC;AAEX,6CAA6C;AAChC,QAAA,oBAAoB,GAAG;IAClC,uBAAuB;IACvB,uBAAuB,EAAE,SAAS;IAClC,sBAAsB,EAAE,SAAS;IACjC,kBAAkB,EAAE,SAAS;IAE7B,iBAAiB;IACjB,sBAAsB,EAAE,SAAS;IACjC,kBAAkB,EAAE,SAAS;CACrB,CAAC;AAEX,iCAAiC;AACpB,QAAA,aAAa,GAAG;IAC3B,uBAAuB;IACvB,oBAAoB,EAAE,SAAS;IAC/B,oBAAoB,EAAE,SAAS;IAC/B,oBAAoB,EAAE,SAAS;IAC/B,oBAAoB,EAAE,SAAS;IAC/B,sBAAsB,EAAE,SAAS;IAEjC,gBAAgB;IAChB,eAAe,EAAE,cAAc;IAC/B,cAAc,EAAE,cAAc;IAC9B,eAAe,EAAE,cAAc;IAC/B,eAAe,EAAE,cAAc;IAC/B,eAAe,EAAE,cAAc;IAE/B,oBAAoB;IACpB,YAAY,EAAE,eAAe;IAC7B,aAAa,EAAE,eAAe;IAC9B,eAAe,EAAE,eAAe;IAChC,qBAAqB,EAAE,eAAe;IAEtC,wBAAwB;IACxB,kBAAkB,EAAE,cAAc;IAClC,qBAAqB,EAAE,cAAc;IACrC,sBAAsB,EAAE,cAAc;IAEtC,mBAAmB;IACnB,iBAAiB,EAAE,aAAa;IAChC,gBAAgB,EAAE,aAAa;IAC/B,gBAAgB,EAAE,aAAa;IAE/B,eAAe;IACf,sBAAsB,EAAE,aAAa;IACrC,eAAe,EAAE,aAAa;IAE9B,wBAAwB;IACxB,iBAAiB,EAAE,eAAe;IAClC,gBAAgB,EAAE,eAAe;CACzB,CAAC;AAEX,2CAA2C;AAC9B,QAAA,WAAW,GAAG;IACzB,GAAG,0BAAkB;IACrB,GAAG,wBAAgB;IACnB,GAAG,4BAAoB;IACvB,GAAG,gCAAwB;IAC3B,GAAG,2BAAmB;IACtB,GAAG,uBAAe;IAClB,GAAG,gCAAwB;IAC3B,GAAG,0BAAkB;IACrB,GAAG,gCAAwB;IAC3B,GAAG,4BAAoB;CACf,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { ExceptionFilter, ArgumentsHost, HttpStatus } from '@nestjs/common';
2
+ import { ErrorCode } from '../error-codes';
3
+ /**
4
+ * Custom exception class for business logic errors
5
+ */
6
+ export declare class BusinessException extends Error {
7
+ errorCode: ErrorCode;
8
+ statusCode: HttpStatus;
9
+ constructor(message: string, errorCode: ErrorCode, statusCode?: HttpStatus);
10
+ }
11
+ /**
12
+ * Global exception filter that standardizes all error responses
13
+ * Implements DRY principle by centralizing error handling
14
+ */
15
+ export declare class GlobalExceptionFilter implements ExceptionFilter {
16
+ private readonly logger;
17
+ catch(exception: unknown, host: ArgumentsHost): void;
18
+ /**
19
+ * Map HTTP status codes to appropriate error codes
20
+ */
21
+ private mapHttpStatusToErrorCode;
22
+ }
23
+ //# sourceMappingURL=global-exception.filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-exception.filter.d.ts","sourceRoot":"","sources":["../../src/filters/global-exception.filter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,aAAa,EAEb,UAAU,EAEX,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAe,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAExD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAGjC,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE,UAAU;gBAF7B,OAAO,EAAE,MAAM,EACR,SAAS,EAAE,SAAS,EACpB,UAAU,GAAE,UAAmC;CAKzD;AAED;;;GAGG;AACH,qBACa,qBAAsB,YAAW,eAAe;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0C;IAEjE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa;IA4D7C;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAoBjC"}
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
3
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
4
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
5
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
6
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
7
+ var _, done = false;
8
+ for (var i = decorators.length - 1; i >= 0; i--) {
9
+ var context = {};
10
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
11
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
12
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
13
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
14
+ if (kind === "accessor") {
15
+ if (result === void 0) continue;
16
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
17
+ if (_ = accept(result.get)) descriptor.get = _;
18
+ if (_ = accept(result.set)) descriptor.set = _;
19
+ if (_ = accept(result.init)) initializers.unshift(_);
20
+ }
21
+ else if (_ = accept(result)) {
22
+ if (kind === "field") initializers.unshift(_);
23
+ else descriptor[key] = _;
24
+ }
25
+ }
26
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
27
+ done = true;
28
+ };
29
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
30
+ var useValue = arguments.length > 2;
31
+ for (var i = 0; i < initializers.length; i++) {
32
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
33
+ }
34
+ return useValue ? value : void 0;
35
+ };
36
+ var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
37
+ if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
38
+ return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
39
+ };
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.GlobalExceptionFilter = exports.BusinessException = void 0;
42
+ const common_1 = require("@nestjs/common");
43
+ const response_utils_1 = require("../response-utils");
44
+ const error_codes_1 = require("../error-codes");
45
+ /**
46
+ * Custom exception class for business logic errors
47
+ */
48
+ class BusinessException extends Error {
49
+ constructor(message, errorCode, statusCode = common_1.HttpStatus.BAD_REQUEST) {
50
+ super(message);
51
+ this.errorCode = errorCode;
52
+ this.statusCode = statusCode;
53
+ this.name = 'BusinessException';
54
+ }
55
+ }
56
+ exports.BusinessException = BusinessException;
57
+ /**
58
+ * Global exception filter that standardizes all error responses
59
+ * Implements DRY principle by centralizing error handling
60
+ */
61
+ let GlobalExceptionFilter = (() => {
62
+ let _classDecorators = [(0, common_1.Catch)()];
63
+ let _classDescriptor;
64
+ let _classExtraInitializers = [];
65
+ let _classThis;
66
+ var GlobalExceptionFilter = _classThis = class {
67
+ constructor() {
68
+ this.logger = new common_1.Logger(GlobalExceptionFilter.name);
69
+ }
70
+ catch(exception, host) {
71
+ const ctx = host.switchToHttp();
72
+ const response = ctx.getResponse();
73
+ const request = ctx.getRequest();
74
+ let status;
75
+ let message;
76
+ let errorCode;
77
+ // Log the error for debugging
78
+ this.logger.error(`Error occurred: ${exception}`, exception instanceof Error ? exception.stack : undefined, {
79
+ url: request.url,
80
+ method: request.method,
81
+ ip: request.ip,
82
+ userAgent: request.headers['user-agent'],
83
+ });
84
+ if (exception instanceof BusinessException) {
85
+ // Custom business logic exceptions
86
+ status = exception.statusCode;
87
+ message = exception.message;
88
+ errorCode = exception.errorCode;
89
+ }
90
+ else if (exception instanceof common_1.HttpException) {
91
+ // NestJS HTTP exceptions
92
+ status = exception.getStatus();
93
+ message = exception.message;
94
+ errorCode = this.mapHttpStatusToErrorCode(status);
95
+ // Handle validation errors specifically
96
+ const exceptionResponse = exception.getResponse();
97
+ if (typeof exceptionResponse === 'object' && exceptionResponse !== null) {
98
+ const responseObj = exceptionResponse;
99
+ if (responseObj.message && Array.isArray(responseObj.message)) {
100
+ message = responseObj.message.join(', ');
101
+ errorCode = error_codes_1.ERROR_CODES.VALIDATION_ERROR;
102
+ }
103
+ }
104
+ }
105
+ else if (exception instanceof Error) {
106
+ // Generic errors
107
+ status = common_1.HttpStatus.INTERNAL_SERVER_ERROR;
108
+ message = process.env.NODE_ENV === 'production'
109
+ ? 'Internal server error'
110
+ : exception.message;
111
+ errorCode = error_codes_1.ERROR_CODES.INTERNAL_SERVER_ERROR;
112
+ }
113
+ else {
114
+ // Unknown errors
115
+ status = common_1.HttpStatus.INTERNAL_SERVER_ERROR;
116
+ message = 'Unknown error occurred';
117
+ errorCode = error_codes_1.ERROR_CODES.INTERNAL_SERVER_ERROR;
118
+ }
119
+ const errorResponse = response_utils_1.ResponseUtils.error(message, status, errorCode);
120
+ response.status(status).json(errorResponse);
121
+ }
122
+ /**
123
+ * Map HTTP status codes to appropriate error codes
124
+ */
125
+ mapHttpStatusToErrorCode(status) {
126
+ switch (status) {
127
+ case common_1.HttpStatus.BAD_REQUEST:
128
+ return error_codes_1.ERROR_CODES.INVALID_REQUEST;
129
+ case common_1.HttpStatus.UNAUTHORIZED:
130
+ return error_codes_1.ERROR_CODES.UNAUTHORIZED;
131
+ case common_1.HttpStatus.FORBIDDEN:
132
+ return error_codes_1.ERROR_CODES.FORBIDDEN;
133
+ case common_1.HttpStatus.NOT_FOUND:
134
+ return error_codes_1.ERROR_CODES.RESOURCE_NOT_FOUND;
135
+ case common_1.HttpStatus.CONFLICT:
136
+ return error_codes_1.ERROR_CODES.DUPLICATE_ENTRY;
137
+ case common_1.HttpStatus.TOO_MANY_REQUESTS:
138
+ return error_codes_1.ERROR_CODES.RATE_LIMIT_EXCEEDED;
139
+ case common_1.HttpStatus.UNPROCESSABLE_ENTITY:
140
+ return error_codes_1.ERROR_CODES.VALIDATION_ERROR;
141
+ default:
142
+ return error_codes_1.ERROR_CODES.INTERNAL_SERVER_ERROR;
143
+ }
144
+ }
145
+ };
146
+ __setFunctionName(_classThis, "GlobalExceptionFilter");
147
+ (() => {
148
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
149
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
150
+ GlobalExceptionFilter = _classThis = _classDescriptor.value;
151
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
152
+ __runInitializers(_classThis, _classExtraInitializers);
153
+ })();
154
+ return GlobalExceptionFilter = _classThis;
155
+ })();
156
+ exports.GlobalExceptionFilter = GlobalExceptionFilter;
157
+ //# sourceMappingURL=global-exception.filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global-exception.filter.js","sourceRoot":"","sources":["../../src/filters/global-exception.filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { RpcExceptionFilter, ArgumentsHost } from '@nestjs/common';
2
+ import { Observable } from 'rxjs';
3
+ import { RpcException } from '@nestjs/microservices';
4
+ /**
5
+ * Exception filter for microservices (Kafka)
6
+ * Standardizes error responses for inter-service communication
7
+ */
8
+ export declare class MicroserviceExceptionFilter implements RpcExceptionFilter<RpcException> {
9
+ catch(exception: any, host: ArgumentsHost): Observable<any>;
10
+ }
11
+ //# sourceMappingURL=microservice-exception.filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"microservice-exception.filter.d.ts","sourceRoot":"","sources":["../../src/filters/microservice-exception.filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,kBAAkB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAc,MAAM,MAAM,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAKrD;;;GAGG;AACH,qBACa,2BAA4B,YAAW,kBAAkB,CAAC,YAAY,CAAC;IAClF,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC;CAmC5D"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
3
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
4
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
5
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
6
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
7
+ var _, done = false;
8
+ for (var i = decorators.length - 1; i >= 0; i--) {
9
+ var context = {};
10
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
11
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
12
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
13
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
14
+ if (kind === "accessor") {
15
+ if (result === void 0) continue;
16
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
17
+ if (_ = accept(result.get)) descriptor.get = _;
18
+ if (_ = accept(result.set)) descriptor.set = _;
19
+ if (_ = accept(result.init)) initializers.unshift(_);
20
+ }
21
+ else if (_ = accept(result)) {
22
+ if (kind === "field") initializers.unshift(_);
23
+ else descriptor[key] = _;
24
+ }
25
+ }
26
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
27
+ done = true;
28
+ };
29
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
30
+ var useValue = arguments.length > 2;
31
+ for (var i = 0; i < initializers.length; i++) {
32
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
33
+ }
34
+ return useValue ? value : void 0;
35
+ };
36
+ var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
37
+ if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
38
+ return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
39
+ };
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.MicroserviceExceptionFilter = void 0;
42
+ const common_1 = require("@nestjs/common");
43
+ const rxjs_1 = require("rxjs");
44
+ const microservices_1 = require("@nestjs/microservices");
45
+ const response_utils_1 = require("../response-utils");
46
+ const error_codes_1 = require("../error-codes");
47
+ const global_exception_filter_1 = require("./global-exception.filter");
48
+ /**
49
+ * Exception filter for microservices (Kafka)
50
+ * Standardizes error responses for inter-service communication
51
+ */
52
+ let MicroserviceExceptionFilter = (() => {
53
+ let _classDecorators = [(0, common_1.Catch)()];
54
+ let _classDescriptor;
55
+ let _classExtraInitializers = [];
56
+ let _classThis;
57
+ var MicroserviceExceptionFilter = _classThis = class {
58
+ catch(exception, host) {
59
+ let message;
60
+ let errorCode;
61
+ let statusCode;
62
+ if (exception instanceof global_exception_filter_1.BusinessException) {
63
+ message = exception.message;
64
+ errorCode = exception.errorCode;
65
+ statusCode = exception.statusCode;
66
+ }
67
+ else if (exception instanceof microservices_1.RpcException) {
68
+ const error = exception.getError();
69
+ if (typeof error === 'object' && error !== null) {
70
+ const errorObj = error;
71
+ message = errorObj.message || 'Microservice error';
72
+ errorCode = errorObj.errorCode || error_codes_1.ERROR_CODES.INTERNAL_SERVER_ERROR;
73
+ statusCode = errorObj.statusCode || 500;
74
+ }
75
+ else {
76
+ message = error || exception.message;
77
+ errorCode = error_codes_1.ERROR_CODES.INTERNAL_SERVER_ERROR;
78
+ statusCode = 500;
79
+ }
80
+ }
81
+ else if (exception instanceof Error) {
82
+ message = exception.message;
83
+ errorCode = error_codes_1.ERROR_CODES.INTERNAL_SERVER_ERROR;
84
+ statusCode = 500;
85
+ }
86
+ else {
87
+ message = 'Unknown microservice error';
88
+ errorCode = error_codes_1.ERROR_CODES.INTERNAL_SERVER_ERROR;
89
+ statusCode = 500;
90
+ }
91
+ const errorResponse = response_utils_1.ResponseUtils.error(message, statusCode, errorCode);
92
+ return (0, rxjs_1.throwError)(() => errorResponse);
93
+ }
94
+ };
95
+ __setFunctionName(_classThis, "MicroserviceExceptionFilter");
96
+ (() => {
97
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
98
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
99
+ MicroserviceExceptionFilter = _classThis = _classDescriptor.value;
100
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
101
+ __runInitializers(_classThis, _classExtraInitializers);
102
+ })();
103
+ return MicroserviceExceptionFilter = _classThis;
104
+ })();
105
+ exports.MicroserviceExceptionFilter = MicroserviceExceptionFilter;
106
+ //# sourceMappingURL=microservice-exception.filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"microservice-exception.filter.js","sourceRoot":"","sources":["../../src/filters/microservice-exception.filter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA0E;AAC1E,+BAA8C;AAC9C,yDAAqD;AACrD,sDAAkD;AAClD,gDAAwD;AACxD,uEAA8D;AAE9D;;;GAGG;IAEU,2BAA2B;4BADvC,IAAA,cAAK,GAAE;;;;;QAEN,KAAK,CAAC,SAAc,EAAE,IAAmB;YACvC,IAAI,OAAe,CAAC;YACpB,IAAI,SAAoB,CAAC;YACzB,IAAI,UAAkB,CAAC;YAEvB,IAAI,SAAS,YAAY,2CAAiB,EAAE,CAAC;gBAC3C,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;gBAC5B,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;gBAChC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;YACpC,CAAC;iBAAM,IAAI,SAAS,YAAY,4BAAY,EAAE,CAAC;gBAC7C,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;gBACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBAChD,MAAM,QAAQ,GAAG,KAAY,CAAC;oBAC9B,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,oBAAoB,CAAC;oBACnD,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,yBAAW,CAAC,qBAAqB,CAAC;oBACpE,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,GAAG,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,KAAe,IAAI,SAAS,CAAC,OAAO,CAAC;oBAC/C,SAAS,GAAG,yBAAW,CAAC,qBAAqB,CAAC;oBAC9C,UAAU,GAAG,GAAG,CAAC;gBACnB,CAAC;YACH,CAAC;iBAAM,IAAI,SAAS,YAAY,KAAK,EAAE,CAAC;gBACtC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;gBAC5B,SAAS,GAAG,yBAAW,CAAC,qBAAqB,CAAC;gBAC9C,UAAU,GAAG,GAAG,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,4BAA4B,CAAC;gBACvC,SAAS,GAAG,yBAAW,CAAC,qBAAqB,CAAC;gBAC9C,UAAU,GAAG,GAAG,CAAC;YACnB,CAAC;YAED,MAAM,aAAa,GAAG,8BAAa,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;YAE1E,OAAO,IAAA,iBAAU,EAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;;;;;QAnCH,6KAoCC;;;QApCY,uDAA2B;;;;AAA3B,kEAA2B"}
@@ -0,0 +1,9 @@
1
+ import { ExceptionFilter, ArgumentsHost, BadRequestException } from '@nestjs/common';
2
+ /**
3
+ * Specific filter for validation errors
4
+ * Provides detailed validation error messages
5
+ */
6
+ export declare class ValidationExceptionFilter implements ExceptionFilter {
7
+ catch(exception: BadRequestException, host: ArgumentsHost): void;
8
+ }
9
+ //# sourceMappingURL=validation-exception.filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-exception.filter.d.ts","sourceRoot":"","sources":["../../src/filters/validation-exception.filter.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,aAAa,EACb,mBAAmB,EAEpB,MAAM,gBAAgB,CAAC;AAKxB;;;GAGG;AACH,qBACa,yBAA0B,YAAW,eAAe;IAC/D,KAAK,CAAC,SAAS,EAAE,mBAAmB,EAAE,IAAI,EAAE,aAAa;CAoC1D"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
3
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
4
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
5
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
6
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
7
+ var _, done = false;
8
+ for (var i = decorators.length - 1; i >= 0; i--) {
9
+ var context = {};
10
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
11
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
12
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
13
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
14
+ if (kind === "accessor") {
15
+ if (result === void 0) continue;
16
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
17
+ if (_ = accept(result.get)) descriptor.get = _;
18
+ if (_ = accept(result.set)) descriptor.set = _;
19
+ if (_ = accept(result.init)) initializers.unshift(_);
20
+ }
21
+ else if (_ = accept(result)) {
22
+ if (kind === "field") initializers.unshift(_);
23
+ else descriptor[key] = _;
24
+ }
25
+ }
26
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
27
+ done = true;
28
+ };
29
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
30
+ var useValue = arguments.length > 2;
31
+ for (var i = 0; i < initializers.length; i++) {
32
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
33
+ }
34
+ return useValue ? value : void 0;
35
+ };
36
+ var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) {
37
+ if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
38
+ return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
39
+ };
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.ValidationExceptionFilter = void 0;
42
+ const common_1 = require("@nestjs/common");
43
+ const response_utils_1 = require("../response-utils");
44
+ const error_codes_1 = require("../error-codes");
45
+ /**
46
+ * Specific filter for validation errors
47
+ * Provides detailed validation error messages
48
+ */
49
+ let ValidationExceptionFilter = (() => {
50
+ let _classDecorators = [(0, common_1.Catch)(common_1.BadRequestException)];
51
+ let _classDescriptor;
52
+ let _classExtraInitializers = [];
53
+ let _classThis;
54
+ var ValidationExceptionFilter = _classThis = class {
55
+ catch(exception, host) {
56
+ const ctx = host.switchToHttp();
57
+ const response = ctx.getResponse();
58
+ const exceptionResponse = exception.getResponse();
59
+ let message;
60
+ let details = null;
61
+ if (typeof exceptionResponse === 'object' && exceptionResponse !== null) {
62
+ const responseObj = exceptionResponse;
63
+ if (responseObj.message && Array.isArray(responseObj.message)) {
64
+ // Class-validator validation errors
65
+ message = 'Validation failed';
66
+ details = responseObj.message;
67
+ }
68
+ else if (responseObj.message) {
69
+ message = responseObj.message;
70
+ }
71
+ else {
72
+ message = 'Bad request';
73
+ }
74
+ }
75
+ else {
76
+ message = exception.message;
77
+ }
78
+ const errorResponse = {
79
+ ...response_utils_1.ResponseUtils.error(message, common_1.HttpStatus.BAD_REQUEST, error_codes_1.ERROR_CODES.VALIDATION_ERROR),
80
+ // Add validation details if available
81
+ ...(details && { validation_errors: details }),
82
+ };
83
+ response.status(common_1.HttpStatus.BAD_REQUEST).json(errorResponse);
84
+ }
85
+ };
86
+ __setFunctionName(_classThis, "ValidationExceptionFilter");
87
+ (() => {
88
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
89
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
90
+ ValidationExceptionFilter = _classThis = _classDescriptor.value;
91
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
92
+ __runInitializers(_classThis, _classExtraInitializers);
93
+ })();
94
+ return ValidationExceptionFilter = _classThis;
95
+ })();
96
+ exports.ValidationExceptionFilter = ValidationExceptionFilter;
97
+ //# sourceMappingURL=validation-exception.filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-exception.filter.js","sourceRoot":"","sources":["../../src/filters/validation-exception.filter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAMwB;AAExB,sDAAkD;AAClD,gDAA6C;AAE7C;;;GAGG;IAEU,yBAAyB;4BADrC,IAAA,cAAK,EAAC,4BAAmB,CAAC;;;;;QAEzB,KAAK,CAAC,SAA8B,EAAE,IAAmB;YACvD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAY,CAAC;YAE7C,MAAM,iBAAiB,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;YAClD,IAAI,OAAe,CAAC;YACpB,IAAI,OAAO,GAAQ,IAAI,CAAC;YAExB,IAAI,OAAO,iBAAiB,KAAK,QAAQ,IAAI,iBAAiB,KAAK,IAAI,EAAE,CAAC;gBACxE,MAAM,WAAW,GAAG,iBAAwB,CAAC;gBAE7C,IAAI,WAAW,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC9D,oCAAoC;oBACpC,OAAO,GAAG,mBAAmB,CAAC;oBAC9B,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;gBAChC,CAAC;qBAAM,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;oBAC/B,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;gBAChC,CAAC;qBAAM,CAAC;oBACN,OAAO,GAAG,aAAa,CAAC;gBAC1B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;YAC9B,CAAC;YAED,MAAM,aAAa,GAAG;gBACpB,GAAG,8BAAa,CAAC,KAAK,CACpB,OAAO,EACP,mBAAU,CAAC,WAAW,EACtB,yBAAW,CAAC,gBAAgB,CAC7B;gBACD,sCAAsC;gBACtC,GAAG,CAAC,OAAO,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC;aAC/C,CAAC;YAEF,QAAQ,CAAC,MAAM,CAAC,mBAAU,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9D,CAAC;;;;;QApCH,6KAqCC;;;QArCY,uDAAyB;;;;AAAzB,8DAAyB"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,10 @@
1
1
  export * from './interfaces';
2
2
  export * from './message-patterns';
3
+ export * from './error-codes';
4
+ export * from './response-utils';
5
+ export * from './filters/global-exception.filter';
6
+ export * from './filters/validation-exception.filter';
7
+ export * from './filters/microservice-exception.filter';
3
8
  export { User, UserAddress, RegisterUserDto, LoginDto, UserSettings, SearchQuery, SearchFilters, SortOptions, Pharmacy, Medicine, PharmacyOrder, OrderItem, OpeningHours, Location, Doctor, TimeSlot, Appointment, Prescription, TeleMedicineSession, ChatMessage, LabTest, Lab, LabAppointment, LabReport, Wallet, PaymentCard, Transaction, Notification, NotificationSettings, ApiResponse, PaginatedResponse } from './interfaces';
4
9
  export { AUTH_PATTERNS, SETTINGS_PATTERNS, SEARCH_PATTERNS, PHARMACY_PATTERNS, CONSULTATION_PATTERNS, TELEMEDICINE_PATTERNS, LAB_PATTERNS, PAYMENT_PATTERNS, NOTIFICATION_PATTERNS, EVENT_PATTERNS, UserRegisteredEvent, OrderCreatedEvent, AppointmentBookedEvent, PaymentProcessedEvent, NotificationEvent, KAFKA_CONFIG, SERVICE_PORTS } from './message-patterns';
5
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AAGnC,OAAO,EAEL,IAAI,EACJ,WAAW,EACX,eAAe,EACf,QAAQ,EAGR,YAAY,EAGZ,WAAW,EACX,aAAa,EACb,WAAW,EAGX,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,SAAS,EACT,YAAY,EACZ,QAAQ,EAGR,MAAM,EACN,QAAQ,EACR,WAAW,EACX,YAAY,EAGZ,mBAAmB,EACnB,WAAW,EAGX,OAAO,EACP,GAAG,EACH,cAAc,EACd,SAAS,EAGT,MAAM,EACN,WAAW,EACX,WAAW,EAGX,YAAY,EACZ,oBAAoB,EAGpB,WAAW,EACX,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAEL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EAGd,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EAGjB,YAAY,EACZ,aAAa,EACd,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mCAAmC,CAAC;AAClD,cAAc,uCAAuC,CAAC;AACtD,cAAc,yCAAyC,CAAC;AAGxD,OAAO,EAEL,IAAI,EACJ,WAAW,EACX,eAAe,EACf,QAAQ,EAGR,YAAY,EAGZ,WAAW,EACX,aAAa,EACb,WAAW,EAGX,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,SAAS,EACT,YAAY,EACZ,QAAQ,EAGR,MAAM,EACN,QAAQ,EACR,WAAW,EACX,YAAY,EAGZ,mBAAmB,EACnB,WAAW,EAGX,OAAO,EACP,GAAG,EACH,cAAc,EACd,SAAS,EAGT,MAAM,EACN,WAAW,EACX,WAAW,EAGX,YAAY,EACZ,oBAAoB,EAGpB,WAAW,EACX,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAEL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EAGd,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EAGjB,YAAY,EACZ,aAAa,EACd,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -18,6 +18,11 @@ exports.SERVICE_PORTS = exports.KAFKA_CONFIG = exports.EVENT_PATTERNS = exports.
18
18
  // Export all interfaces and types
19
19
  __exportStar(require("./interfaces"), exports);
20
20
  __exportStar(require("./message-patterns"), exports);
21
+ __exportStar(require("./error-codes"), exports);
22
+ __exportStar(require("./response-utils"), exports);
23
+ __exportStar(require("./filters/global-exception.filter"), exports);
24
+ __exportStar(require("./filters/validation-exception.filter"), exports);
25
+ __exportStar(require("./filters/microservice-exception.filter"), exports);
21
26
  var message_patterns_1 = require("./message-patterns");
22
27
  // Message patterns
23
28
  Object.defineProperty(exports, "AUTH_PATTERNS", { enumerable: true, get: function () { return message_patterns_1.AUTH_PATTERNS; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kCAAkC;AAClC,+CAA6B;AAC7B,qDAAmC;AAwDnC,uDAuB4B;AAtB1B,mBAAmB;AACnB,iHAAA,aAAa,OAAA;AACb,qHAAA,iBAAiB,OAAA;AACjB,mHAAA,eAAe,OAAA;AACf,qHAAA,iBAAiB,OAAA;AACjB,yHAAA,qBAAqB,OAAA;AACrB,yHAAA,qBAAqB,OAAA;AACrB,gHAAA,YAAY,OAAA;AACZ,oHAAA,gBAAgB,OAAA;AAChB,yHAAA,qBAAqB,OAAA;AACrB,kHAAA,cAAc,OAAA;AASd,gBAAgB;AAChB,gHAAA,YAAY,OAAA;AACZ,iHAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kCAAkC;AAClC,+CAA6B;AAC7B,qDAAmC;AACnC,gDAA8B;AAC9B,mDAAiC;AACjC,oEAAkD;AAClD,wEAAsD;AACtD,0EAAwD;AAwDxD,uDAuB4B;AAtB1B,mBAAmB;AACnB,iHAAA,aAAa,OAAA;AACb,qHAAA,iBAAiB,OAAA;AACjB,mHAAA,eAAe,OAAA;AACf,qHAAA,iBAAiB,OAAA;AACjB,yHAAA,qBAAqB,OAAA;AACrB,yHAAA,qBAAqB,OAAA;AACrB,gHAAA,YAAY,OAAA;AACZ,oHAAA,gBAAgB,OAAA;AAChB,yHAAA,qBAAqB,OAAA;AACrB,kHAAA,cAAc,OAAA;AASd,gBAAgB;AAChB,gHAAA,YAAY,OAAA;AACZ,iHAAA,aAAa,OAAA"}
@@ -259,12 +259,21 @@ export interface NotificationSettings {
259
259
  orderUpdates: boolean;
260
260
  prescriptionAlerts: boolean;
261
261
  }
262
- export interface ApiResponse<T> {
263
- success: boolean;
264
- data?: T;
262
+ export interface ApiSuccessResponse<T = any> {
263
+ status: true;
264
+ status_code: number;
265
265
  message: string;
266
- statusCode: number;
266
+ success_code: string;
267
+ data: T;
267
268
  }
269
+ export interface ApiErrorResponse {
270
+ status: false;
271
+ status_code: number;
272
+ message: string;
273
+ error_code: string;
274
+ data: null;
275
+ }
276
+ export type ApiResponse<T = any> = ApiSuccessResponse<T> | ApiErrorResponse;
268
277
  export interface PaginatedResponse<T> {
269
278
  data: T[];
270
279
  total: number;
@@ -1 +1 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { HttpStatus } from '@nestjs/common';
2
+ import { ApiSuccessResponse, ApiErrorResponse } from './interfaces';
3
+ import { ErrorCode, SuccessCode } from './error-codes';
4
+ /**
5
+ * Utility class for creating standardized API responses
6
+ * Follows DRY and SOLID principles
7
+ */
8
+ export declare class ResponseUtils {
9
+ /**
10
+ * Create a success response
11
+ */
12
+ static success<T = any>(data: T, message?: string, statusCode?: HttpStatus, successCode?: SuccessCode): ApiSuccessResponse<T>;
13
+ /**
14
+ * Create an error response
15
+ */
16
+ static error(message: string, statusCode?: HttpStatus, errorCode?: ErrorCode): ApiErrorResponse;
17
+ /**
18
+ * Create a paginated success response
19
+ */
20
+ static paginated<T>(data: T[], total: number, page: number, limit: number, message?: string, successCode?: SuccessCode): ApiSuccessResponse<{
21
+ items: T[];
22
+ pagination: {
23
+ total: number;
24
+ page: number;
25
+ limit: number;
26
+ totalPages: number;
27
+ hasNext: boolean;
28
+ hasPrev: boolean;
29
+ };
30
+ }>;
31
+ /**
32
+ * Common success responses
33
+ */
34
+ static created<T>(data: T, message?: string, successCode?: SuccessCode): ApiSuccessResponse<T>;
35
+ static updated<T>(data: T, message?: string, successCode?: SuccessCode): ApiSuccessResponse<T>;
36
+ static deleted(message?: string, successCode?: SuccessCode): ApiSuccessResponse<null>;
37
+ /**
38
+ * Common error responses
39
+ */
40
+ static notFound(message?: string, errorCode?: ErrorCode): ApiErrorResponse;
41
+ static unauthorized(message?: string, errorCode?: ErrorCode): ApiErrorResponse;
42
+ static forbidden(message?: string, errorCode?: ErrorCode): ApiErrorResponse;
43
+ static validationError(message?: string, errorCode?: ErrorCode): ApiErrorResponse;
44
+ static internalServerError(message?: string, errorCode?: ErrorCode): ApiErrorResponse;
45
+ static conflict(message?: string, errorCode?: ErrorCode): ApiErrorResponse;
46
+ static tooManyRequests(message?: string, errorCode?: ErrorCode): ApiErrorResponse;
47
+ }
48
+ /**
49
+ * Decorator for wrapping controller methods with standardized responses
50
+ */
51
+ export declare function StandardResponse(successMessage?: string, successCode?: SuccessCode): (target: any, propertyName: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
52
+ //# sourceMappingURL=response-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-utils.d.ts","sourceRoot":"","sources":["../src/response-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEvD;;;GAGG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,EACpB,IAAI,EAAE,CAAC,EACP,OAAO,GAAE,MAA+B,EACxC,UAAU,GAAE,UAA0B,EACtC,WAAW,GAAE,WAAuB,GACnC,kBAAkB,CAAC,CAAC,CAAC;IAUxB;;OAEG;IACH,MAAM,CAAC,KAAK,CACV,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,UAAmC,EAC/C,SAAS,GAAE,SAAqB,GAC/B,gBAAgB;IAUnB;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,CAAC,EAChB,IAAI,EAAE,CAAC,EAAE,EACT,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,MAAsC,EAC/C,WAAW,GAAE,WAAuB,GACnC,kBAAkB,CAAC;QACpB,KAAK,EAAE,CAAC,EAAE,CAAC;QACX,UAAU,EAAE;YACV,KAAK,EAAE,MAAM,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,UAAU,EAAE,MAAM,CAAC;YACnB,OAAO,EAAE,OAAO,CAAC;YACjB,OAAO,EAAE,OAAO,CAAC;SAClB,CAAC;KACH,CAAC;IAqBF;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EACd,IAAI,EAAE,CAAC,EACP,OAAO,GAAE,MAAwC,EACjD,WAAW,GAAE,WAAuB,GACnC,kBAAkB,CAAC,CAAC,CAAC;IAIxB,MAAM,CAAC,OAAO,CAAC,CAAC,EACd,IAAI,EAAE,CAAC,EACP,OAAO,GAAE,MAAwC,EACjD,WAAW,GAAE,WAAuB,GACnC,kBAAkB,CAAC,CAAC,CAAC;IAIxB,MAAM,CAAC,OAAO,CACZ,OAAO,GAAE,MAAwC,EACjD,WAAW,GAAE,WAAuB,GACnC,kBAAkB,CAAC,IAAI,CAAC;IAI3B;;OAEG;IACH,MAAM,CAAC,QAAQ,CACb,OAAO,GAAE,MAA6B,EACtC,SAAS,GAAE,SAAqB,GAC/B,gBAAgB;IAInB,MAAM,CAAC,YAAY,CACjB,OAAO,GAAE,MAA8B,EACvC,SAAS,GAAE,SAAqB,GAC/B,gBAAgB;IAInB,MAAM,CAAC,SAAS,CACd,OAAO,GAAE,MAA2B,EACpC,SAAS,GAAE,SAAqB,GAC/B,gBAAgB;IAInB,MAAM,CAAC,eAAe,CACpB,OAAO,GAAE,MAA4B,EACrC,SAAS,GAAE,SAAqB,GAC/B,gBAAgB;IAInB,MAAM,CAAC,mBAAmB,CACxB,OAAO,GAAE,MAAgC,EACzC,SAAS,GAAE,SAAqB,GAC/B,gBAAgB;IAInB,MAAM,CAAC,QAAQ,CACb,OAAO,GAAE,MAA4B,EACrC,SAAS,GAAE,SAAqB,GAC/B,gBAAgB;IAInB,MAAM,CAAC,eAAe,CACpB,OAAO,GAAE,MAA8B,EACvC,SAAS,GAAE,SAAqB,GAC/B,gBAAgB;CAGpB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,WAAW,IAGvB,QAAQ,GAAG,EACX,cAAc,MAAM,EACpB,YAAY,kBAAkB,wBA4BjC"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ResponseUtils = void 0;
4
+ exports.StandardResponse = StandardResponse;
5
+ const common_1 = require("@nestjs/common");
6
+ /**
7
+ * Utility class for creating standardized API responses
8
+ * Follows DRY and SOLID principles
9
+ */
10
+ class ResponseUtils {
11
+ /**
12
+ * Create a success response
13
+ */
14
+ static success(data, message = 'Operation successful', statusCode = common_1.HttpStatus.OK, successCode = 'SUC_001') {
15
+ return {
16
+ status: true,
17
+ status_code: statusCode,
18
+ message,
19
+ success_code: successCode,
20
+ data,
21
+ };
22
+ }
23
+ /**
24
+ * Create an error response
25
+ */
26
+ static error(message, statusCode = common_1.HttpStatus.BAD_REQUEST, errorCode = 'CMN_003') {
27
+ return {
28
+ status: false,
29
+ status_code: statusCode,
30
+ message,
31
+ error_code: errorCode,
32
+ data: null,
33
+ };
34
+ }
35
+ /**
36
+ * Create a paginated success response
37
+ */
38
+ static paginated(data, total, page, limit, message = 'Data retrieved successfully', successCode = 'SUC_005') {
39
+ const totalPages = Math.ceil(total / limit);
40
+ return ResponseUtils.success({
41
+ items: data,
42
+ pagination: {
43
+ total,
44
+ page,
45
+ limit,
46
+ totalPages,
47
+ hasNext: page < totalPages,
48
+ hasPrev: page > 1,
49
+ },
50
+ }, message, common_1.HttpStatus.OK, successCode);
51
+ }
52
+ /**
53
+ * Common success responses
54
+ */
55
+ static created(data, message = 'Resource created successfully', successCode = 'SUC_002') {
56
+ return ResponseUtils.success(data, message, common_1.HttpStatus.CREATED, successCode);
57
+ }
58
+ static updated(data, message = 'Resource updated successfully', successCode = 'SUC_003') {
59
+ return ResponseUtils.success(data, message, common_1.HttpStatus.OK, successCode);
60
+ }
61
+ static deleted(message = 'Resource deleted successfully', successCode = 'SUC_004') {
62
+ return ResponseUtils.success(null, message, common_1.HttpStatus.OK, successCode);
63
+ }
64
+ /**
65
+ * Common error responses
66
+ */
67
+ static notFound(message = 'Resource not found', errorCode = 'CMN_004') {
68
+ return ResponseUtils.error(message, common_1.HttpStatus.NOT_FOUND, errorCode);
69
+ }
70
+ static unauthorized(message = 'Unauthorized access', errorCode = 'CMN_005') {
71
+ return ResponseUtils.error(message, common_1.HttpStatus.UNAUTHORIZED, errorCode);
72
+ }
73
+ static forbidden(message = 'Access forbidden', errorCode = 'CMN_006') {
74
+ return ResponseUtils.error(message, common_1.HttpStatus.FORBIDDEN, errorCode);
75
+ }
76
+ static validationError(message = 'Validation failed', errorCode = 'CMN_002') {
77
+ return ResponseUtils.error(message, common_1.HttpStatus.BAD_REQUEST, errorCode);
78
+ }
79
+ static internalServerError(message = 'Internal server error', errorCode = 'CMN_001') {
80
+ return ResponseUtils.error(message, common_1.HttpStatus.INTERNAL_SERVER_ERROR, errorCode);
81
+ }
82
+ static conflict(message = 'Resource conflict', errorCode = 'CMN_103') {
83
+ return ResponseUtils.error(message, common_1.HttpStatus.CONFLICT, errorCode);
84
+ }
85
+ static tooManyRequests(message = 'Rate limit exceeded', errorCode = 'CMN_007') {
86
+ return ResponseUtils.error(message, common_1.HttpStatus.TOO_MANY_REQUESTS, errorCode);
87
+ }
88
+ }
89
+ exports.ResponseUtils = ResponseUtils;
90
+ /**
91
+ * Decorator for wrapping controller methods with standardized responses
92
+ */
93
+ function StandardResponse(successMessage, successCode) {
94
+ return function (target, propertyName, descriptor) {
95
+ const method = descriptor.value;
96
+ descriptor.value = async function (...args) {
97
+ try {
98
+ const result = await method.apply(this, args);
99
+ // If result is already a standardized response, return as is
100
+ if (result && typeof result === 'object' && 'status' in result) {
101
+ return result;
102
+ }
103
+ // Wrap result in standardized response
104
+ return ResponseUtils.success(result, successMessage || 'Operation successful', common_1.HttpStatus.OK, successCode || 'SUC_001');
105
+ }
106
+ catch (error) {
107
+ // Let global exception filter handle errors
108
+ throw error;
109
+ }
110
+ };
111
+ return descriptor;
112
+ };
113
+ }
114
+ //# sourceMappingURL=response-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-utils.js","sourceRoot":"","sources":["../src/response-utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tiryaq-shared",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Shared types, interfaces, and message patterns for Tiryaq healthcare microservices",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -31,10 +31,19 @@
31
31
  "url": "https://github.com/tiryaq/shared.git"
32
32
  },
33
33
  "devDependencies": {
34
+ "@types/express": "^5.0.3",
34
35
  "@types/node": "^24.3.0",
35
36
  "typescript": "^5.9.2"
36
37
  },
37
38
  "publishConfig": {
38
39
  "access": "public"
40
+ },
41
+ "dependencies": {
42
+ "@nestjs/common": "^11.1.6",
43
+ "@nestjs/core": "^11.1.6",
44
+ "@nestjs/microservices": "^11.1.6",
45
+ "express": "^5.1.0",
46
+ "reflect-metadata": "^0.2.2",
47
+ "rxjs": "^7.8.2"
39
48
  }
40
49
  }