npm_microservice 1.0.23 → 1.0.25
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/service.js
CHANGED
|
@@ -867,6 +867,22 @@ var require_DeviceService = __commonJS({
|
|
|
867
867
|
}
|
|
868
868
|
});
|
|
869
869
|
|
|
870
|
+
// src/services/crm/OpportunitiesService.js
|
|
871
|
+
var require_OpportunitiesService = __commonJS({
|
|
872
|
+
"src/services/crm/OpportunitiesService.js"(exports2, module2) {
|
|
873
|
+
var BaseService = require_BaseService();
|
|
874
|
+
var { CONFIG_ROUTER_SERVICE } = require_config();
|
|
875
|
+
var OpportunitiesService = class extends BaseService {
|
|
876
|
+
constructor() {
|
|
877
|
+
super(CONFIG_ROUTER_SERVICE.Crm.OpportunitiesService);
|
|
878
|
+
this.module = "opportunitiesService";
|
|
879
|
+
this.service = "crm";
|
|
880
|
+
}
|
|
881
|
+
};
|
|
882
|
+
module2.exports = OpportunitiesService;
|
|
883
|
+
}
|
|
884
|
+
});
|
|
885
|
+
|
|
870
886
|
// src/services/finance/InvoicesCancelService.js
|
|
871
887
|
var require_InvoicesCancelService = __commonJS({
|
|
872
888
|
"src/services/finance/InvoicesCancelService.js"(exports2, module2) {
|
|
@@ -2501,6 +2517,11 @@ var require_EduTestService = __commonJS({
|
|
|
2501
2517
|
this.service = "tests_logs";
|
|
2502
2518
|
return this.request("get", url, { params: filter });
|
|
2503
2519
|
}
|
|
2520
|
+
async countTestLog(filter = {}) {
|
|
2521
|
+
let url = CONFIG_ROUTER_SERVICE.BASE_URL + "/tests/test-logs/count";
|
|
2522
|
+
this.service = "tests_logs";
|
|
2523
|
+
return this.request("get", url, { params: filter });
|
|
2524
|
+
}
|
|
2504
2525
|
async createLog(data) {
|
|
2505
2526
|
let url = CONFIG_ROUTER_SERVICE.BASE_URL + "/tests/test-logs/create-log";
|
|
2506
2527
|
return this.request("post", url, { data });
|
|
@@ -2578,6 +2599,7 @@ module.exports = {
|
|
|
2578
2599
|
// crm
|
|
2579
2600
|
contactsService: new (require_ContactsService())(),
|
|
2580
2601
|
deviceService: new (require_DeviceService())(),
|
|
2602
|
+
opportunitiesService: new (require_OpportunitiesService())(),
|
|
2581
2603
|
// finance
|
|
2582
2604
|
invoicesCancelService: new (require_InvoicesCancelService())(),
|
|
2583
2605
|
invoicesDetailService: new (require_InvoicesDetailService())(),
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
2
|
+
var __commonJS = (cb, mod) => function __require() {
|
|
3
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
// src/config.js
|
|
7
|
+
var require_config = __commonJS({
|
|
8
|
+
"src/config.js"(exports2, module2) {
|
|
9
|
+
require("dotenv").config({ quiet: true, override: true });
|
|
10
|
+
var Redis = require("ioredis");
|
|
11
|
+
var redis = new Redis({
|
|
12
|
+
host: process.env.REDIS_HOST || "128.199.195.180",
|
|
13
|
+
port: process.env.REDIS_PORT || 6379,
|
|
14
|
+
password: process.env.REDIS_PASSWORD || "WZyB5Z7BRRgvrzuGzRwB"
|
|
15
|
+
});
|
|
16
|
+
var baseUrl = process.env.API_MICROSERVICE_URL;
|
|
17
|
+
var configRouteService = {
|
|
18
|
+
BASE_URL: baseUrl,
|
|
19
|
+
Finance: {
|
|
20
|
+
InvoicesService: `${baseUrl}/finance/invoices`,
|
|
21
|
+
InvoicesCancelService: `${baseUrl}/finance/invoice_detail_cancel`,
|
|
22
|
+
InvoicesDetailService: `${baseUrl}/finance/invoices-detail`,
|
|
23
|
+
InvoicesLogsAssignService: `${baseUrl}/finance/invoices-logs-assign`,
|
|
24
|
+
PaymentService: `${baseUrl}/finance/payments`,
|
|
25
|
+
PaymentRequestService: `${baseUrl}/finance/payments-request`,
|
|
26
|
+
VouchersService: `${baseUrl}/finance/vouchers`,
|
|
27
|
+
VouchersCategoryService: `${baseUrl}/finance/vouchers-category`,
|
|
28
|
+
WalletsService: `${baseUrl}/finance/wallets`,
|
|
29
|
+
WalletTransactionService: `${baseUrl}/finance/wallet-transaction`
|
|
30
|
+
},
|
|
31
|
+
CallCenter: {
|
|
32
|
+
CategoryService: `${baseUrl}/call-center/ticket-categories`,
|
|
33
|
+
TicketService: `${baseUrl}/call-center/ticket`,
|
|
34
|
+
TicketActivityService: `${baseUrl}/call-center/ticket-activities`,
|
|
35
|
+
TicketTemplateService: `${baseUrl}/call-center/ticket-template`,
|
|
36
|
+
TicketTopicService: `${baseUrl}/call-center/ticket-topics`,
|
|
37
|
+
CallService: `${baseUrl}/call-center/calls`
|
|
38
|
+
},
|
|
39
|
+
Inventory: {
|
|
40
|
+
InventoryService: `${baseUrl}/inventory/inventory-products`,
|
|
41
|
+
LogService: `${baseUrl}/inventory/logs`,
|
|
42
|
+
ProductService: `${baseUrl}/inventory/products`,
|
|
43
|
+
ProductShipmentService: `${baseUrl}/inventory/products_shipment`,
|
|
44
|
+
StoreService: `${baseUrl}/inventory/stores`,
|
|
45
|
+
SupplierService: `${baseUrl}/inventory/supplier`,
|
|
46
|
+
TransactionService: `${baseUrl}/inventory/transaction`,
|
|
47
|
+
TransactionDetailService: `${baseUrl}/inventory/transaction_detail`
|
|
48
|
+
},
|
|
49
|
+
App: {
|
|
50
|
+
CategoryService: `${baseUrl}/app/category`,
|
|
51
|
+
NewService: `${baseUrl}/app/news`,
|
|
52
|
+
BannerService: `${baseUrl}/app/banner`,
|
|
53
|
+
AppTestService: `${baseUrl}/app/test`,
|
|
54
|
+
RecommendedCourseService: `${baseUrl}/app/recommended_level`,
|
|
55
|
+
SettingAppService: `${baseUrl}/app/setting`,
|
|
56
|
+
TargetAppService: `${baseUrl}/app/target`
|
|
57
|
+
},
|
|
58
|
+
Course: {
|
|
59
|
+
CategoryService: `${baseUrl}/course/category`,
|
|
60
|
+
CourseService: `${baseUrl}/course/course`,
|
|
61
|
+
CourseLessonService: `${baseUrl}/course/course_schedule`,
|
|
62
|
+
StudentService: `${baseUrl}/course/students`
|
|
63
|
+
},
|
|
64
|
+
Asset: {
|
|
65
|
+
AllocationDetailService: `${baseUrl}/asset/asset-allocation-detail`,
|
|
66
|
+
BroadcastService: `${baseUrl}/asset/broadcast`,
|
|
67
|
+
EntityAssetService: `${baseUrl}/asset/entity-asset`,
|
|
68
|
+
SubAssetService: `${baseUrl}/asset/sub-asset`
|
|
69
|
+
},
|
|
70
|
+
Test: {
|
|
71
|
+
TestService: `${baseUrl}/tests/tests`
|
|
72
|
+
},
|
|
73
|
+
Pm: {
|
|
74
|
+
NoteService: `${baseUrl}/pm/notes`,
|
|
75
|
+
TaskService: `${baseUrl}/pm/tasks`
|
|
76
|
+
},
|
|
77
|
+
Crm: {
|
|
78
|
+
ContactService: `${baseUrl}/crm/contacts`,
|
|
79
|
+
AccountsService: `${baseUrl}/crm/accounts`,
|
|
80
|
+
CalendarContactService: `${baseUrl}/crm/calendar-contact`,
|
|
81
|
+
CalendarsService: `${baseUrl}/crm/calendars`,
|
|
82
|
+
CampaignService: `${baseUrl}/crm/campaigns`,
|
|
83
|
+
CompanyService: `${baseUrl}/crm/company`,
|
|
84
|
+
ContactDocumentService: `${baseUrl}/crm/contact-document`,
|
|
85
|
+
ContactToCampaignService: `${baseUrl}/crm/contacts-campaign`,
|
|
86
|
+
DeviceService: `${baseUrl}/crm/devices`,
|
|
87
|
+
LeadsService: `${baseUrl}/crm/leads`,
|
|
88
|
+
NotificationService: `${baseUrl}/crm/notifications`,
|
|
89
|
+
NotificationContactService: `${baseUrl}/crm/notification-to-contact`,
|
|
90
|
+
OpportunitiesService: `${baseUrl}/crm/opportunities`,
|
|
91
|
+
SegmentsService: `${baseUrl}/crm/segments`
|
|
92
|
+
},
|
|
93
|
+
Notification: {
|
|
94
|
+
AppService: `${baseUrl}/notification/type/app`,
|
|
95
|
+
MailService: `${baseUrl}/notification/type/mail`,
|
|
96
|
+
SmsService: `${baseUrl}/notification/type/sms`,
|
|
97
|
+
ZnsService: `${baseUrl}/notification/type/zns`,
|
|
98
|
+
NotificationContactService: `${baseUrl}/notification/notification_contact`,
|
|
99
|
+
NotificationEmployeeService: `${baseUrl}/notification/notification_employee`,
|
|
100
|
+
NotificationService: `${baseUrl}/notification`,
|
|
101
|
+
TemplateService: `${baseUrl}/notification/template`
|
|
102
|
+
},
|
|
103
|
+
Org: {
|
|
104
|
+
BranchService: `${baseUrl}/org/branch`,
|
|
105
|
+
BranchRequestService: `${baseUrl}/org/branch_request`,
|
|
106
|
+
BranchToMacsService: `${baseUrl}/org/branch_to_mac`,
|
|
107
|
+
BrandService: `${baseUrl}/org/brand`,
|
|
108
|
+
CitiesService: `${baseUrl}/org/city`,
|
|
109
|
+
LegalEntityService: `${baseUrl}/org/legal_entities`
|
|
110
|
+
},
|
|
111
|
+
Lms: {
|
|
112
|
+
AlbumService: `${baseUrl}/lms/album`,
|
|
113
|
+
AlbumCategoryService: `${baseUrl}/lms/cate_album`,
|
|
114
|
+
AlbumFileService: `${baseUrl}/lms/album_file`,
|
|
115
|
+
ClassesService: `${baseUrl}/lms/classes`,
|
|
116
|
+
ClassScheduleService: `${baseUrl}/lms/class-schedules`,
|
|
117
|
+
CourseLessonService: `${baseUrl}/lms/course-lessons`,
|
|
118
|
+
CoursePriceService: `${baseUrl}/lms/course-prices`,
|
|
119
|
+
CourseProductService: `${baseUrl}/lms/course-product`,
|
|
120
|
+
CourseService: `${baseUrl}/lms/courses`,
|
|
121
|
+
DocumentService: `${baseUrl}/lms/documents`,
|
|
122
|
+
DocumentCategoryService: `${baseUrl}/lms/document-categories`,
|
|
123
|
+
LicenseService: `${baseUrl}/lms/license`,
|
|
124
|
+
PracticeResultService: `${baseUrl}/lms/practices-result`,
|
|
125
|
+
PracticeService: `${baseUrl}/lms/practices`,
|
|
126
|
+
StudentAgainService: `${baseUrl}/lms/students-agains`,
|
|
127
|
+
StudentDocumentService: `${baseUrl}/lms/students-documents`,
|
|
128
|
+
StudentExamTimeService: `${baseUrl}/lms/student-exam-time`,
|
|
129
|
+
StudentReviewService: `${baseUrl}/lms/students-reviews`,
|
|
130
|
+
StudentService: `${baseUrl}/lms/students`,
|
|
131
|
+
StudentScoreService: `${baseUrl}/lms/students-scores`,
|
|
132
|
+
StudentSettingReviewService: `${baseUrl}/lms/setting-reviews`,
|
|
133
|
+
StudentTrackingService: `${baseUrl}/lms/students-tracking`,
|
|
134
|
+
StudentTrialService: `${baseUrl}/lms/students-trial`
|
|
135
|
+
},
|
|
136
|
+
Hr: {
|
|
137
|
+
AllowanceService: `${baseUrl}/hr/allowance`,
|
|
138
|
+
CategoryService: `${baseUrl}/hr/setting/category`,
|
|
139
|
+
AnnualLeaveService: `${baseUrl}/hr/annual_leave`,
|
|
140
|
+
EmployeeService: `${baseUrl}/hr/employees`,
|
|
141
|
+
JobTitleService: `${baseUrl}/hr/setting/job_title`,
|
|
142
|
+
DepartmentService: `${baseUrl}/hr/departments`,
|
|
143
|
+
DeviceService: `${baseUrl}/hr/device`,
|
|
144
|
+
DocumentService: `${baseUrl}/hr/documents`,
|
|
145
|
+
EmployeeExtendService: `${baseUrl}/hr/employees/extend`,
|
|
146
|
+
EmployeeExtendTempService: `${baseUrl}/hr/employees/extend/temp`,
|
|
147
|
+
EmployeeLeaveService: `${baseUrl}/hr/employee_leave`,
|
|
148
|
+
EmployeeNotificationService: `${baseUrl}/hr/notification-employee`,
|
|
149
|
+
EmployeeQuitService: `${baseUrl}/hr/employee_quit`,
|
|
150
|
+
EmployeeShiftService: `${baseUrl}/hr/employee_shift`,
|
|
151
|
+
HolidayService: `${baseUrl}/hr/holidays`,
|
|
152
|
+
PositionService: `${baseUrl}/hr/positions`,
|
|
153
|
+
ReasonTypeService: `${baseUrl}/hr/setting/reason_type`,
|
|
154
|
+
ResignationService: `${baseUrl}/hr/resignations`,
|
|
155
|
+
SalaryService: `${baseUrl}/hr/employee_salary`,
|
|
156
|
+
ScheduleService: `${baseUrl}/hr/schedule`,
|
|
157
|
+
ScheduleOnlineService: `${baseUrl}/hr/schedule_online`,
|
|
158
|
+
ShiftService: `${baseUrl}/hr/setting/shifts`,
|
|
159
|
+
ShiftsCustomerCareService: `${baseUrl}/hr/setting/shifts-customer-care`,
|
|
160
|
+
TicketService: `${baseUrl}/hr/ticket`,
|
|
161
|
+
TicketExtendService: `${baseUrl}/hr/ticket/extend`,
|
|
162
|
+
TicketTypeService: `${baseUrl}/hr/ticket-type`,
|
|
163
|
+
TrackingConfirmService: `${baseUrl}/hr/tracking_confirm`,
|
|
164
|
+
TrackingErrorService: `${baseUrl}/hr/tracking-error`,
|
|
165
|
+
SettingDocumentService: `${baseUrl}/hr/setting/profile`
|
|
166
|
+
},
|
|
167
|
+
Support: {
|
|
168
|
+
CommentService: `${baseUrl}/support/comment`
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
module2.exports = {
|
|
172
|
+
AUTHENTICATOR_PUBLIC_KEY: process.env.AUTHENTICATOR_PUBLIC_KEY || "",
|
|
173
|
+
API_MICROSERVICE_URL: process.env.API_MICROSERVICE_URL || "",
|
|
174
|
+
API_MICROSERVICE_TOKEN: process.env.API_MICROSERVICE_TOKEN || "",
|
|
175
|
+
CONFIG_ROUTER_SERVICE: configRouteService,
|
|
176
|
+
CONFIG_REDIS: redis
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
// src/services/CacheService.js
|
|
182
|
+
var require_CacheService = __commonJS({
|
|
183
|
+
"src/services/CacheService.js"(exports2, module2) {
|
|
184
|
+
var qs = require("qs");
|
|
185
|
+
var CacheService = class {
|
|
186
|
+
isCache = false;
|
|
187
|
+
// bật/tắt cache mặc định
|
|
188
|
+
service = null;
|
|
189
|
+
// nhớ gán ở subclass
|
|
190
|
+
module = null;
|
|
191
|
+
// module
|
|
192
|
+
configService = "microservice";
|
|
193
|
+
// module
|
|
194
|
+
timeCache = 3600;
|
|
195
|
+
// cache 60p
|
|
196
|
+
redis = null;
|
|
197
|
+
buildCacheKeyUrl(path, params = {}) {
|
|
198
|
+
const q = qs.stringify(params, { arrayFormat: "brackets", encode: true });
|
|
199
|
+
const full = `${path}${q ? "?" + q : ""}`;
|
|
200
|
+
return `${this.configService}.${this.service || "unknown"}.${this.module || "unknown"}.urls:${full}`;
|
|
201
|
+
}
|
|
202
|
+
// Lấy cache theo id
|
|
203
|
+
async getCacheByKey(key) {
|
|
204
|
+
const data = await this.redis.get(key);
|
|
205
|
+
return data ? JSON.parse(data) : null;
|
|
206
|
+
}
|
|
207
|
+
// Lấy cache theo id
|
|
208
|
+
async getCacheById(id) {
|
|
209
|
+
if (!this.isCache || !this.redis) return null;
|
|
210
|
+
const key = `${this.configService}.${this.service || "unknown"}.${this.module || "unknown"}.id:${id}`;
|
|
211
|
+
const data = await this.redis.get(key);
|
|
212
|
+
return data ? JSON.parse(data) : null;
|
|
213
|
+
}
|
|
214
|
+
// Lấy cache theo nhiều ids
|
|
215
|
+
async getCacheByIds(ids = []) {
|
|
216
|
+
if (!this.isCache || !this.redis) return [];
|
|
217
|
+
const keys = ids.map(
|
|
218
|
+
(id) => `${this.configService}.${this.service || "unknown"}.${this.module || "unknown"}.id:${id}`
|
|
219
|
+
);
|
|
220
|
+
const results = await this.redis.mget(keys);
|
|
221
|
+
return results.map((r) => r ? JSON.parse(r) : null).filter(Boolean);
|
|
222
|
+
}
|
|
223
|
+
// Set cache
|
|
224
|
+
async setCache(key, value, ttl = this.timeCache) {
|
|
225
|
+
if (!this.isCache || !this.redis) return;
|
|
226
|
+
await this.redis.set(key, JSON.stringify(value), "EX", ttl);
|
|
227
|
+
}
|
|
228
|
+
// Ví dụ set cache theo id
|
|
229
|
+
async setCacheById(id, value, ttl) {
|
|
230
|
+
const key = `${this.configService}.${this.service || "unknown"}.${this.module || "unknown"}.id:${id}`;
|
|
231
|
+
await this.setCache(key, value, ttl);
|
|
232
|
+
}
|
|
233
|
+
async deleteById(id) {
|
|
234
|
+
const key = `${this.configService}.${this.service || "unknown"}.${this.module || "unknown"}.id:${id}`;
|
|
235
|
+
await this.deleteCache(key);
|
|
236
|
+
}
|
|
237
|
+
async deleteByIds(ids = []) {
|
|
238
|
+
if (!this.isCache || !this.redis) return;
|
|
239
|
+
const keys = ids.map(
|
|
240
|
+
(id) => `${this.configService}.${this.service || "unknown"}.${this.module || "unknown"}.id:${id}`
|
|
241
|
+
);
|
|
242
|
+
if (keys.length) {
|
|
243
|
+
await this.redis.del(...keys);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// Xóa cache theo key
|
|
247
|
+
async deleteCache(key) {
|
|
248
|
+
if (!this.isCache || !this.redis) return;
|
|
249
|
+
await this.redis.del(key);
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
module2.exports = CacheService;
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
// src/services/BaseService.js
|
|
257
|
+
var require_BaseService = __commonJS({
|
|
258
|
+
"src/services/BaseService.js"(exports2, module2) {
|
|
259
|
+
var axios = require("axios");
|
|
260
|
+
var qs = require("qs");
|
|
261
|
+
var { API_MICROSERVICE_TOKEN, CONFIG_REDIS } = require_config();
|
|
262
|
+
var CacheService = require_CacheService();
|
|
263
|
+
var BaseService2 = class extends CacheService {
|
|
264
|
+
baseUrl = "";
|
|
265
|
+
headers = {};
|
|
266
|
+
constructor(baseUrl = "", defaultHeaders = {}) {
|
|
267
|
+
super(baseUrl, defaultHeaders);
|
|
268
|
+
this.baseUrl = baseUrl;
|
|
269
|
+
this.setHeader(defaultHeaders);
|
|
270
|
+
this.redis = CONFIG_REDIS;
|
|
271
|
+
this.http = axios.create({
|
|
272
|
+
baseURL: this.baseUrl,
|
|
273
|
+
headers: this.headers,
|
|
274
|
+
paramsSerializer: (params) => qs.stringify(params, { arrayFormat: "brackets", encode: true })
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Set header cho request
|
|
279
|
+
* - headers: object { Authorization: "Bearer x" }
|
|
280
|
+
* - string: "Bearer x"
|
|
281
|
+
* - không truyền: dùng token từ ENV
|
|
282
|
+
*/
|
|
283
|
+
setHeader(headers = {}) {
|
|
284
|
+
let Authorization = `Bearer ${API_MICROSERVICE_TOKEN}`;
|
|
285
|
+
if (typeof headers === "string") {
|
|
286
|
+
Authorization = headers;
|
|
287
|
+
} else if (headers && headers.Authorization) {
|
|
288
|
+
Authorization = headers.Authorization;
|
|
289
|
+
}
|
|
290
|
+
this.headers = {
|
|
291
|
+
...this.headers || {},
|
|
292
|
+
Authorization
|
|
293
|
+
};
|
|
294
|
+
return this;
|
|
295
|
+
}
|
|
296
|
+
async request(method, url, options = {}, cacheOption = {}) {
|
|
297
|
+
var _a, _b;
|
|
298
|
+
const isGet = method.toLowerCase() === "get";
|
|
299
|
+
const enableCache = cacheOption.isCache ?? false;
|
|
300
|
+
if (isGet && enableCache) {
|
|
301
|
+
let cacheKey = (cacheOption == null ? void 0 : cacheOption.cacheKey) ?? this.buildCacheKeyUrl(url, options.params);
|
|
302
|
+
const cached = await this.getCacheByKey(cacheKey);
|
|
303
|
+
if (cached) return cached;
|
|
304
|
+
}
|
|
305
|
+
try {
|
|
306
|
+
if (isGet) {
|
|
307
|
+
console.log(`[HTTP GET] ${this.buildGET(url, options.params || {})}`);
|
|
308
|
+
}
|
|
309
|
+
const startTime = Date.now();
|
|
310
|
+
const res = await this.http.request({
|
|
311
|
+
method,
|
|
312
|
+
url,
|
|
313
|
+
headers: this.headers,
|
|
314
|
+
...options
|
|
315
|
+
});
|
|
316
|
+
const data = res.data;
|
|
317
|
+
if (isGet && enableCache) {
|
|
318
|
+
let cacheKey = cacheOption.cacheKey ?? this.buildCacheKeyUrl(url, options.params);
|
|
319
|
+
const ttl = cacheOption.timeCache || this.timeCache;
|
|
320
|
+
await this.setCache(cacheKey, data, ttl);
|
|
321
|
+
console.log(`[CACHE SET] ${cacheKey} - TTL ${ttl}s`);
|
|
322
|
+
}
|
|
323
|
+
const duration = (Date.now() - startTime) / 1e3;
|
|
324
|
+
if (duration > 5) {
|
|
325
|
+
console.log(
|
|
326
|
+
`[SLOW ${method.toUpperCase()}] ${url} - ${duration.toFixed(2)}s`
|
|
327
|
+
);
|
|
328
|
+
if (options.params) console.log("Query:", options.params);
|
|
329
|
+
if (options.data) console.log("Body:", options.data);
|
|
330
|
+
}
|
|
331
|
+
return data;
|
|
332
|
+
} catch (error) {
|
|
333
|
+
const safeError = {
|
|
334
|
+
statusCode: ((_a = error.response) == null ? void 0 : _a.status) || 500,
|
|
335
|
+
...(_b = error.response) == null ? void 0 : _b.data
|
|
336
|
+
};
|
|
337
|
+
if (safeError.statusCode === 404) {
|
|
338
|
+
const q = qs.stringify(options.params || {}, {
|
|
339
|
+
arrayFormat: "brackets",
|
|
340
|
+
encode: true
|
|
341
|
+
});
|
|
342
|
+
return {
|
|
343
|
+
statusCode: 404,
|
|
344
|
+
status: "error",
|
|
345
|
+
message: `[HTTP ${method.toUpperCase()}] ${url}${q ? "?" + q : ""} not found`
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
console.error(`[${method.toUpperCase()}] ${url} failed:`, safeError);
|
|
349
|
+
return { error: true, ...safeError };
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
buildGET(url, params = {}) {
|
|
353
|
+
const queryString = qs.stringify(params, {
|
|
354
|
+
arrayFormat: "brackets",
|
|
355
|
+
encode: true
|
|
356
|
+
});
|
|
357
|
+
return `${url}${queryString ? "?" + queryString : ""}`;
|
|
358
|
+
}
|
|
359
|
+
async all(query = {}, cacheOption = {}) {
|
|
360
|
+
let { filter = {} } = query;
|
|
361
|
+
const useCache = this.isCache && filter && filter._id && Object.keys(filter).length === 1;
|
|
362
|
+
if (useCache) {
|
|
363
|
+
let ids = Array.isArray(filter._id) ? filter._id : [filter._id];
|
|
364
|
+
return this.details(ids);
|
|
365
|
+
}
|
|
366
|
+
if (query.order_by && Array.isArray(query.order_by)) {
|
|
367
|
+
query.order_by = query.order_by.slice(0, 2);
|
|
368
|
+
if (query.order_by[1] && !["asc", "desc"].includes(query.order_by[1])) {
|
|
369
|
+
query.order_by[1] = "asc";
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
return this.request("get", this.baseUrl, { params: query }, cacheOption);
|
|
373
|
+
}
|
|
374
|
+
async details(ids = [], options = {}, cacheOption = {}) {
|
|
375
|
+
const enableCache = cacheOption.isCache ?? this.isCache;
|
|
376
|
+
let dataCache = [];
|
|
377
|
+
if (enableCache) {
|
|
378
|
+
dataCache = await this.getCacheByIds(ids);
|
|
379
|
+
const cachedIds = dataCache.filter((item) => item && Object.keys(item).length > 0).map((item) => item._id);
|
|
380
|
+
ids = ids.filter((id) => !cachedIds.includes(id));
|
|
381
|
+
}
|
|
382
|
+
if (ids.length === 0) return dataCache;
|
|
383
|
+
let params = { params: { filter: { _id: ids }, limit: ids.length } };
|
|
384
|
+
const datas = await this.request("get", this.baseUrl, params, cacheOption);
|
|
385
|
+
const rows = [...dataCache];
|
|
386
|
+
if (enableCache && Array.isArray(datas) && datas.length) {
|
|
387
|
+
for (const item of datas) {
|
|
388
|
+
if (item && item._id) {
|
|
389
|
+
await this.setCacheById(item._id, item, this.timeCache);
|
|
390
|
+
rows.push(item);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
return rows;
|
|
395
|
+
}
|
|
396
|
+
async detail(id, cacheOption = {}) {
|
|
397
|
+
const enableCache = cacheOption.isCache ?? this.isCache;
|
|
398
|
+
if (enableCache) {
|
|
399
|
+
let data = await this.getCacheById(id);
|
|
400
|
+
if (data) return data;
|
|
401
|
+
}
|
|
402
|
+
let url = `${this.baseUrl}/${id}`;
|
|
403
|
+
return this.request("get", url, {}, cacheOption);
|
|
404
|
+
}
|
|
405
|
+
async create(data) {
|
|
406
|
+
return this.request("post", this.baseUrl, { data });
|
|
407
|
+
}
|
|
408
|
+
async update(id, data) {
|
|
409
|
+
let response = this.request("put", `${this.baseUrl}/${id}`, { data });
|
|
410
|
+
if (response && (response == null ? void 0 : response.status) == "success" && this.isCache) {
|
|
411
|
+
this.deleteById(id);
|
|
412
|
+
}
|
|
413
|
+
return response;
|
|
414
|
+
}
|
|
415
|
+
async delete(id) {
|
|
416
|
+
let response = this.request("delete", `${this.baseUrl}/${id}`);
|
|
417
|
+
if (response && (response == null ? void 0 : response.status) == "success" && this.isCache) {
|
|
418
|
+
this.deleteById(id);
|
|
419
|
+
}
|
|
420
|
+
return response;
|
|
421
|
+
}
|
|
422
|
+
};
|
|
423
|
+
module2.exports = BaseService2;
|
|
424
|
+
}
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
// src/services/crm/OpportunitiesService.js
|
|
428
|
+
var BaseService = require_BaseService();
|
|
429
|
+
var { CONFIG_ROUTER_SERVICE } = require_config();
|
|
430
|
+
var OpportunitiesService = class extends BaseService {
|
|
431
|
+
constructor() {
|
|
432
|
+
super(CONFIG_ROUTER_SERVICE.Crm.OpportunitiesService);
|
|
433
|
+
this.module = "opportunitiesService";
|
|
434
|
+
this.service = "crm";
|
|
435
|
+
}
|
|
436
|
+
};
|
|
437
|
+
module.exports = OpportunitiesService;
|
|
@@ -447,6 +447,11 @@ var EduTestService = class extends BaseService {
|
|
|
447
447
|
this.service = "tests_logs";
|
|
448
448
|
return this.request("get", url, { params: filter });
|
|
449
449
|
}
|
|
450
|
+
async countTestLog(filter = {}) {
|
|
451
|
+
let url = CONFIG_ROUTER_SERVICE.BASE_URL + "/tests/test-logs/count";
|
|
452
|
+
this.service = "tests_logs";
|
|
453
|
+
return this.request("get", url, { params: filter });
|
|
454
|
+
}
|
|
450
455
|
async createLog(data) {
|
|
451
456
|
let url = CONFIG_ROUTER_SERVICE.BASE_URL + "/tests/test-logs/create-log";
|
|
452
457
|
return this.request("post", url, { data });
|