@7365admin1/module-hygiene 4.29.1-staging.13 → 4.29.1-staging.15

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/index.js CHANGED
@@ -924,21 +924,30 @@ function useHygieneDashboardController() {
924
924
  }
925
925
 
926
926
  // src/models/hygiene-area.model.ts
927
- var import_joi2 = __toESM(require("joi"));
927
+ var import_joi3 = __toESM(require("joi"));
928
928
  var import_mongodb2 = require("mongodb");
929
929
  var import_node_server_utils3 = require("@7365admin1/node-server-utils");
930
930
  var import_core2 = require("@7365admin1/core");
931
- var areaSchema = import_joi2.default.object({
932
- site: import_joi2.default.string().hex().required(),
933
- serviceType: import_joi2.default.string().valid(...Object.values(import_core2.AppServiceType)).required(),
934
- name: import_joi2.default.string().required(),
935
- type: import_joi2.default.string().valid(...allowedTypes).required(),
936
- set: import_joi2.default.number().min(0).optional(),
937
- units: import_joi2.default.array().items(
938
- import_joi2.default.object({
939
- unit: import_joi2.default.string().hex().required(),
940
- name: import_joi2.default.string().required()
941
- }).optional()
931
+
932
+ // src/utils/area-unit.util.ts
933
+ var import_joi2 = __toESM(require("joi"));
934
+ var areaUnitSchema = import_joi2.default.object({
935
+ unit: import_joi2.default.string().hex().required(),
936
+ name: import_joi2.default.string().required()
937
+ });
938
+ function toAreaUnit(unit) {
939
+ return { unit: String(unit._id), name: unit.name };
940
+ }
941
+
942
+ // src/models/hygiene-area.model.ts
943
+ var areaSchema = import_joi3.default.object({
944
+ site: import_joi3.default.string().hex().required(),
945
+ serviceType: import_joi3.default.string().valid(...Object.values(import_core2.AppServiceType)).required(),
946
+ name: import_joi3.default.string().required(),
947
+ type: import_joi3.default.string().valid(...allowedTypes).required(),
948
+ set: import_joi3.default.number().min(0).optional(),
949
+ units: import_joi3.default.array().items(
950
+ areaUnitSchema.optional()
942
951
  ).min(1).unique("unit", { ignoreUndefined: true }).messages({
943
952
  "array.unique": "Duplicate area units are not allowed"
944
953
  })
@@ -993,6 +1002,11 @@ function capitalizeText(text) {
993
1002
  return text.toLowerCase().split(" ").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
994
1003
  }
995
1004
 
1005
+ // src/utils/escape-regex.util.ts
1006
+ function escapeRegex(value) {
1007
+ return String(value ?? "").replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
1008
+ }
1009
+
996
1010
  // src/repositories/hygiene-area.repository.ts
997
1011
  function useAreaRepo() {
998
1012
  const db = import_node_server_utils4.useAtlas.getDb();
@@ -1089,7 +1103,7 @@ function useAreaRepo() {
1089
1103
  cacheOptions.type = type;
1090
1104
  }
1091
1105
  if (search) {
1092
- query.$or = [{ name: { $regex: search, $options: "i" } }];
1106
+ query.$or = [{ name: { $regex: escapeRegex(search), $options: "i" } }];
1093
1107
  cacheOptions.search = search;
1094
1108
  }
1095
1109
  const cacheKey = (0, import_node_server_utils4.makeCacheKey)(namespace_collection, cacheOptions);
@@ -1431,14 +1445,14 @@ var import_mongodb5 = require("mongodb");
1431
1445
  var import_node_server_utils7 = require("@7365admin1/node-server-utils");
1432
1446
 
1433
1447
  // src/models/hygiene-unit.model.ts
1434
- var import_joi3 = __toESM(require("joi"));
1448
+ var import_joi4 = __toESM(require("joi"));
1435
1449
  var import_mongodb4 = require("mongodb");
1436
1450
  var import_node_server_utils6 = require("@7365admin1/node-server-utils");
1437
1451
  var import_core3 = require("@7365admin1/core");
1438
- var unitSchema = import_joi3.default.object({
1439
- site: import_joi3.default.string().hex().required(),
1440
- serviceType: import_joi3.default.string().valid(...Object.values(import_core3.AppServiceType)).required(),
1441
- name: import_joi3.default.string().required()
1452
+ var unitSchema = import_joi4.default.object({
1453
+ site: import_joi4.default.string().hex().required(),
1454
+ serviceType: import_joi4.default.string().valid(...Object.values(import_core3.AppServiceType)).required(),
1455
+ name: import_joi4.default.string().required()
1442
1456
  });
1443
1457
  function MUnit(value) {
1444
1458
  const { error } = unitSchema.validate(value);
@@ -1551,7 +1565,7 @@ function useUnitRepository() {
1551
1565
  throw new import_node_server_utils7.BadRequestError("Invalid site ID format.");
1552
1566
  }
1553
1567
  if (search) {
1554
- query.$or = [{ name: { $regex: search, $options: "i" } }];
1568
+ query.$or = [{ name: { $regex: escapeRegex(search), $options: "i" } }];
1555
1569
  cacheOptions.search = search;
1556
1570
  }
1557
1571
  const cacheKey = (0, import_node_server_utils7.makeCacheKey)(namespace_collection, cacheOptions);
@@ -1773,10 +1787,7 @@ function useAreaService() {
1773
1787
  }
1774
1788
  }
1775
1789
  if (foundUnit) {
1776
- areaUnits.push({
1777
- unit: foundUnit._id,
1778
- name: foundUnit.name
1779
- });
1790
+ areaUnits.push(toAreaUnit(foundUnit));
1780
1791
  }
1781
1792
  }
1782
1793
  if (areaUnits.length > 0) {
@@ -1873,7 +1884,7 @@ function useAreaService() {
1873
1884
  }
1874
1885
 
1875
1886
  // src/controllers/hygiene-area.controller.ts
1876
- var import_joi4 = __toESM(require("joi"));
1887
+ var import_joi5 = __toESM(require("joi"));
1877
1888
  var import_node_server_utils9 = require("@7365admin1/node-server-utils");
1878
1889
  var import_core4 = require("@7365admin1/core");
1879
1890
 
@@ -1934,13 +1945,13 @@ function useAreaController() {
1934
1945
  }
1935
1946
  async function getAreas(req, res, next) {
1936
1947
  const query = { ...req.query, ...req.params };
1937
- const validation = import_joi4.default.object({
1938
- page: import_joi4.default.number().min(1).optional().allow("", null),
1939
- limit: import_joi4.default.number().min(1).optional().allow("", null),
1940
- search: import_joi4.default.string().optional().allow("", null),
1941
- type: import_joi4.default.string().valid("all", ...allowedTypes).optional().allow("", null),
1942
- site: import_joi4.default.string().hex().required(),
1943
- serviceType: import_joi4.default.string().valid(...Object.values(import_core4.AppServiceType)).required()
1948
+ const validation = import_joi5.default.object({
1949
+ page: import_joi5.default.number().min(1).optional().allow("", null),
1950
+ limit: import_joi5.default.number().min(1).optional().allow("", null),
1951
+ search: import_joi5.default.string().optional().allow("", null),
1952
+ type: import_joi5.default.string().valid("all", ...allowedTypes).optional().allow("", null),
1953
+ site: import_joi5.default.string().hex().required(),
1954
+ serviceType: import_joi5.default.string().valid(...Object.values(import_core4.AppServiceType)).required()
1944
1955
  });
1945
1956
  const { error } = validation.validate(query);
1946
1957
  if (error) {
@@ -1971,7 +1982,7 @@ function useAreaController() {
1971
1982
  }
1972
1983
  }
1973
1984
  async function getAreaById(req, res, next) {
1974
- const validation = import_joi4.default.string().hex().required();
1985
+ const validation = import_joi5.default.string().hex().required();
1975
1986
  const _id = req.params.id;
1976
1987
  const { error, value } = validation.validate(_id);
1977
1988
  if (error) {
@@ -1991,15 +2002,15 @@ function useAreaController() {
1991
2002
  }
1992
2003
  async function updateArea(req, res, next) {
1993
2004
  const payload = { id: req.params.id, ...req.body };
1994
- const schema = import_joi4.default.object({
1995
- id: import_joi4.default.string().hex().required(),
1996
- name: import_joi4.default.string().optional().allow("", null),
1997
- type: import_joi4.default.string().optional().allow("", null, ...allowedTypes),
1998
- set: import_joi4.default.number().min(0).optional(),
1999
- units: import_joi4.default.array().items(
2000
- import_joi4.default.object({
2001
- unit: import_joi4.default.string().hex().required(),
2002
- name: import_joi4.default.string().required()
2005
+ const schema = import_joi5.default.object({
2006
+ id: import_joi5.default.string().hex().required(),
2007
+ name: import_joi5.default.string().optional().allow("", null),
2008
+ type: import_joi5.default.string().optional().allow("", null, ...allowedTypes),
2009
+ set: import_joi5.default.number().min(0).optional(),
2010
+ units: import_joi5.default.array().items(
2011
+ import_joi5.default.object({
2012
+ unit: import_joi5.default.string().hex().required(),
2013
+ name: import_joi5.default.string().required()
2003
2014
  }).required()
2004
2015
  ).min(1).unique("unit", { ignoreUndefined: true }).optional().messages({
2005
2016
  "array.unique": "Duplicate area units are not allowed"
@@ -2024,7 +2035,7 @@ function useAreaController() {
2024
2035
  }
2025
2036
  async function deleteArea(req, res, next) {
2026
2037
  const id = req.params.id;
2027
- const validation = import_joi4.default.string().hex().required();
2038
+ const validation = import_joi5.default.string().hex().required();
2028
2039
  const { error, value } = validation.validate(id);
2029
2040
  if (error) {
2030
2041
  import_node_server_utils9.logger.log({ level: "error", message: error.message });
@@ -2047,9 +2058,9 @@ function useAreaController() {
2047
2058
  return;
2048
2059
  }
2049
2060
  const query = { ...req.query, ...req.params };
2050
- const validation = import_joi4.default.object({
2051
- site: import_joi4.default.string().hex().required(),
2052
- serviceType: import_joi4.default.string().valid(...Object.values(import_core4.AppServiceType)).required()
2061
+ const validation = import_joi5.default.object({
2062
+ site: import_joi5.default.string().hex().required(),
2063
+ serviceType: import_joi5.default.string().valid(...Object.values(import_core4.AppServiceType)).required()
2053
2064
  });
2054
2065
  const { error, value } = validation.validate(query);
2055
2066
  if (error) {
@@ -2070,9 +2081,9 @@ function useAreaController() {
2070
2081
  }
2071
2082
  async function exportAreas(req, res, next) {
2072
2083
  const query = { ...req.query, ...req.params };
2073
- const validation = import_joi4.default.object({
2074
- site: import_joi4.default.string().hex().required(),
2075
- serviceType: import_joi4.default.string().valid(...Object.values(import_core4.AppServiceType)).required()
2084
+ const validation = import_joi5.default.object({
2085
+ site: import_joi5.default.string().hex().required(),
2086
+ serviceType: import_joi5.default.string().valid(...Object.values(import_core4.AppServiceType)).required()
2076
2087
  });
2077
2088
  const { error, value } = validation.validate(query);
2078
2089
  if (error) {
@@ -2354,7 +2365,7 @@ function useUnitService() {
2354
2365
  }
2355
2366
 
2356
2367
  // src/controllers/hygiene-unit.controller.ts
2357
- var import_joi5 = __toESM(require("joi"));
2368
+ var import_joi6 = __toESM(require("joi"));
2358
2369
  var import_node_server_utils12 = require("@7365admin1/node-server-utils");
2359
2370
  var import_core5 = require("@7365admin1/core");
2360
2371
  function useUnitController() {
@@ -2385,12 +2396,12 @@ function useUnitController() {
2385
2396
  }
2386
2397
  async function getUnits(req, res, next) {
2387
2398
  const query = { ...req.query, ...req.params };
2388
- const validation = import_joi5.default.object({
2389
- page: import_joi5.default.number().min(1).optional().allow("", null),
2390
- limit: import_joi5.default.number().min(1).optional().allow("", null),
2391
- search: import_joi5.default.string().optional().allow("", null),
2392
- site: import_joi5.default.string().hex().required(),
2393
- serviceType: import_joi5.default.string().valid(...Object.values(import_core5.AppServiceType)).required()
2399
+ const validation = import_joi6.default.object({
2400
+ page: import_joi6.default.number().min(1).optional().allow("", null),
2401
+ limit: import_joi6.default.number().min(1).optional().allow("", null),
2402
+ search: import_joi6.default.string().optional().allow("", null),
2403
+ site: import_joi6.default.string().hex().required(),
2404
+ serviceType: import_joi6.default.string().valid(...Object.values(import_core5.AppServiceType)).required()
2394
2405
  });
2395
2406
  const { error } = validation.validate(query);
2396
2407
  if (error) {
@@ -2421,9 +2432,9 @@ function useUnitController() {
2421
2432
  }
2422
2433
  async function updateUnit(req, res, next) {
2423
2434
  const payload = { id: req.params.id, ...req.body };
2424
- const validation = import_joi5.default.object({
2425
- id: import_joi5.default.string().hex().required(),
2426
- name: import_joi5.default.string().required()
2435
+ const validation = import_joi6.default.object({
2436
+ id: import_joi6.default.string().hex().required(),
2437
+ name: import_joi6.default.string().required()
2427
2438
  });
2428
2439
  const { error } = validation.validate(payload);
2429
2440
  if (error) {
@@ -2444,8 +2455,8 @@ function useUnitController() {
2444
2455
  }
2445
2456
  async function deleteUnit(req, res, next) {
2446
2457
  const id = req.params.id;
2447
- const validation = import_joi5.default.object({
2448
- id: import_joi5.default.string().hex().required()
2458
+ const validation = import_joi6.default.object({
2459
+ id: import_joi6.default.string().hex().required()
2449
2460
  });
2450
2461
  const { error, value } = validation.validate({ id });
2451
2462
  if (error) {
@@ -2469,9 +2480,9 @@ function useUnitController() {
2469
2480
  return;
2470
2481
  }
2471
2482
  const query = { ...req.query, ...req.params };
2472
- const validation = import_joi5.default.object({
2473
- site: import_joi5.default.string().hex().required(),
2474
- serviceType: import_joi5.default.string().valid(...Object.values(import_core5.AppServiceType)).required()
2483
+ const validation = import_joi6.default.object({
2484
+ site: import_joi6.default.string().hex().required(),
2485
+ serviceType: import_joi6.default.string().valid(...Object.values(import_core5.AppServiceType)).required()
2475
2486
  });
2476
2487
  const { error, value } = validation.validate(query);
2477
2488
  if (error) {
@@ -2492,9 +2503,9 @@ function useUnitController() {
2492
2503
  }
2493
2504
  async function exportUnits(req, res, next) {
2494
2505
  const query = { ...req.query, ...req.params };
2495
- const validation = import_joi5.default.object({
2496
- site: import_joi5.default.string().hex().required(),
2497
- serviceType: import_joi5.default.string().valid(...Object.values(import_core5.AppServiceType)).required()
2506
+ const validation = import_joi6.default.object({
2507
+ site: import_joi6.default.string().hex().required(),
2508
+ serviceType: import_joi6.default.string().valid(...Object.values(import_core5.AppServiceType)).required()
2498
2509
  });
2499
2510
  const { error, value } = validation.validate(query);
2500
2511
  if (error) {
@@ -2537,15 +2548,15 @@ function useUnitController() {
2537
2548
  }
2538
2549
 
2539
2550
  // src/models/hygiene-parent-checklist.model.ts
2540
- var import_joi6 = __toESM(require("joi"));
2551
+ var import_joi7 = __toESM(require("joi"));
2541
2552
  var import_mongodb6 = require("mongodb");
2542
2553
  var import_node_server_utils13 = require("@7365admin1/node-server-utils");
2543
2554
  var import_core6 = require("@7365admin1/core");
2544
- var parentChecklistSchema = import_joi6.default.object({
2545
- createdAt: import_joi6.default.alternatives().try(import_joi6.default.date(), import_joi6.default.string()).optional().allow("", null),
2546
- site: import_joi6.default.string().hex().required(),
2547
- serviceType: import_joi6.default.string().valid(...Object.values(import_core6.AppServiceType)).required(),
2548
- dateStr: import_joi6.default.string().optional().allow("", null)
2555
+ var parentChecklistSchema = import_joi7.default.object({
2556
+ createdAt: import_joi7.default.alternatives().try(import_joi7.default.date(), import_joi7.default.string()).optional().allow("", null),
2557
+ site: import_joi7.default.string().hex().required(),
2558
+ serviceType: import_joi7.default.string().valid(...Object.values(import_core6.AppServiceType)).required(),
2559
+ dateStr: import_joi7.default.string().optional().allow("", null)
2549
2560
  });
2550
2561
  function MParentChecklist(value) {
2551
2562
  const { error } = parentChecklistSchema.validate(value);
@@ -3118,7 +3129,7 @@ function useParentChecklistRepo() {
3118
3129
  }
3119
3130
 
3120
3131
  // src/controllers/hygiene-parent-checklist.controller.ts
3121
- var import_joi7 = __toESM(require("joi"));
3132
+ var import_joi8 = __toESM(require("joi"));
3122
3133
  var import_node_server_utils15 = require("@7365admin1/node-server-utils");
3123
3134
  var import_core8 = require("@7365admin1/core");
3124
3135
  function useParentChecklistController() {
@@ -3128,10 +3139,10 @@ function useParentChecklistController() {
3128
3139
  } = useParentChecklistRepo();
3129
3140
  async function createParentChecklist(req, res, next) {
3130
3141
  const payload = req.body;
3131
- const validation = import_joi7.default.object({
3132
- createdAt: import_joi7.default.alternatives().try(import_joi7.default.date(), import_joi7.default.string()).optional().allow("", null),
3133
- site: import_joi7.default.string().hex().required(),
3134
- serviceType: import_joi7.default.string().valid(...Object.values(import_core8.AppServiceType)).optional().allow("", null)
3142
+ const validation = import_joi8.default.object({
3143
+ createdAt: import_joi8.default.alternatives().try(import_joi8.default.date(), import_joi8.default.string()).optional().allow("", null),
3144
+ site: import_joi8.default.string().hex().required(),
3145
+ serviceType: import_joi8.default.string().valid(...Object.values(import_core8.AppServiceType)).optional().allow("", null)
3135
3146
  });
3136
3147
  const { error } = validation.validate(payload);
3137
3148
  if (error) {
@@ -3151,15 +3162,15 @@ function useParentChecklistController() {
3151
3162
  }
3152
3163
  async function getAllParentChecklist(req, res, next) {
3153
3164
  const query = { ...req.query, ...req.params };
3154
- const validation = import_joi7.default.object({
3155
- page: import_joi7.default.number().min(1).optional().allow("", null),
3156
- limit: import_joi7.default.number().min(1).optional().allow("", null),
3157
- search: import_joi7.default.string().optional().allow("", null),
3158
- site: import_joi7.default.string().hex().required(),
3159
- serviceType: import_joi7.default.string().valid(...Object.values(import_core8.AppServiceType)).required(),
3160
- startDate: import_joi7.default.alternatives().try(import_joi7.default.date(), import_joi7.default.string()).optional().allow("", null),
3161
- endDate: import_joi7.default.alternatives().try(import_joi7.default.date(), import_joi7.default.string()).optional().allow("", null),
3162
- status: import_joi7.default.string().valid(...allowedStatus, "all").optional().allow("", null)
3165
+ const validation = import_joi8.default.object({
3166
+ page: import_joi8.default.number().min(1).optional().allow("", null),
3167
+ limit: import_joi8.default.number().min(1).optional().allow("", null),
3168
+ search: import_joi8.default.string().optional().allow("", null),
3169
+ site: import_joi8.default.string().hex().required(),
3170
+ serviceType: import_joi8.default.string().valid(...Object.values(import_core8.AppServiceType)).required(),
3171
+ startDate: import_joi8.default.alternatives().try(import_joi8.default.date(), import_joi8.default.string()).optional().allow("", null),
3172
+ endDate: import_joi8.default.alternatives().try(import_joi8.default.date(), import_joi8.default.string()).optional().allow("", null),
3173
+ status: import_joi8.default.string().valid(...allowedStatus, "all").optional().allow("", null)
3163
3174
  });
3164
3175
  const { error } = validation.validate(query);
3165
3176
  if (error) {
@@ -3201,28 +3212,28 @@ function useParentChecklistController() {
3201
3212
  }
3202
3213
 
3203
3214
  // src/models/hygiene-area-checklist.model.ts
3204
- var import_joi8 = __toESM(require("joi"));
3215
+ var import_joi9 = __toESM(require("joi"));
3205
3216
  var import_mongodb8 = require("mongodb");
3206
3217
  var import_node_server_utils16 = require("@7365admin1/node-server-utils");
3207
3218
  var import_core9 = require("@7365admin1/core");
3208
3219
  var allowedChecklistStatus = ["open", "completed", "closed"];
3209
- var areaChecklistSchema = import_joi8.default.object({
3210
- schedule: import_joi8.default.string().hex().required(),
3211
- serviceType: import_joi8.default.string().valid(...Object.values(import_core9.AppServiceType)).required(),
3212
- area: import_joi8.default.string().hex().required(),
3213
- name: import_joi8.default.string().required(),
3214
- type: import_joi8.default.string().valid(...allowedTypes).required(),
3215
- checklist: import_joi8.default.array().items(
3216
- import_joi8.default.object({
3217
- set: import_joi8.default.number().min(0).required(),
3218
- units: import_joi8.default.array().items(
3219
- import_joi8.default.object({
3220
- unit: import_joi8.default.string().hex().required(),
3221
- name: import_joi8.default.string().required()
3220
+ var areaChecklistSchema = import_joi9.default.object({
3221
+ schedule: import_joi9.default.string().hex().required(),
3222
+ serviceType: import_joi9.default.string().valid(...Object.values(import_core9.AppServiceType)).required(),
3223
+ area: import_joi9.default.string().hex().required(),
3224
+ name: import_joi9.default.string().required(),
3225
+ type: import_joi9.default.string().valid(...allowedTypes).required(),
3226
+ checklist: import_joi9.default.array().items(
3227
+ import_joi9.default.object({
3228
+ set: import_joi9.default.number().min(0).required(),
3229
+ units: import_joi9.default.array().items(
3230
+ import_joi9.default.object({
3231
+ unit: import_joi9.default.string().hex().required(),
3232
+ name: import_joi9.default.string().required()
3222
3233
  }).required()
3223
3234
  ).min(1).required(),
3224
- isScheduleTask: import_joi8.default.boolean().optional().default(false),
3225
- scheduleTaskId: import_joi8.default.string().hex().optional().allow(null)
3235
+ isScheduleTask: import_joi9.default.boolean().optional().default(false),
3236
+ scheduleTaskId: import_joi9.default.string().hex().optional().allow(null)
3226
3237
  }).required()
3227
3238
  ).optional().default([])
3228
3239
  });
@@ -4699,7 +4710,7 @@ function useAreaChecklistService() {
4699
4710
  }
4700
4711
 
4701
4712
  // src/controllers/hygiene-area-checklist.controller.ts
4702
- var import_joi9 = __toESM(require("joi"));
4713
+ var import_joi10 = __toESM(require("joi"));
4703
4714
  var import_node_server_utils20 = require("@7365admin1/node-server-utils");
4704
4715
  var import_core11 = require("@7365admin1/core");
4705
4716
 
@@ -4940,9 +4951,9 @@ function useAreaChecklistController() {
4940
4951
  site: req.params.site,
4941
4952
  schedule: req.params.schedule
4942
4953
  };
4943
- const validation = import_joi9.default.object({
4944
- site: import_joi9.default.string().hex().required(),
4945
- schedule: import_joi9.default.string().hex().required()
4954
+ const validation = import_joi10.default.object({
4955
+ site: import_joi10.default.string().hex().required(),
4956
+ schedule: import_joi10.default.string().hex().required()
4946
4957
  });
4947
4958
  const { error, value } = validation.validate(payload);
4948
4959
  if (error) {
@@ -4962,14 +4973,14 @@ function useAreaChecklistController() {
4962
4973
  }
4963
4974
  async function getAllAreaChecklist(req, res, next) {
4964
4975
  const query = { ...req.query, ...req.params };
4965
- const validation = import_joi9.default.object({
4966
- page: import_joi9.default.number().min(1).optional().allow("", null),
4967
- limit: import_joi9.default.number().min(1).optional().allow("", null),
4968
- search: import_joi9.default.string().optional().allow("", null),
4969
- type: import_joi9.default.string().valid(...allowedTypes, "all").optional().allow("", null),
4970
- status: import_joi9.default.string().valid(...allowedStatus, "all").optional().allow("", null),
4971
- schedule: import_joi9.default.string().hex().required(),
4972
- serviceType: import_joi9.default.string().valid(...Object.values(import_core11.AppServiceType)).required()
4976
+ const validation = import_joi10.default.object({
4977
+ page: import_joi10.default.number().min(1).optional().allow("", null),
4978
+ limit: import_joi10.default.number().min(1).optional().allow("", null),
4979
+ search: import_joi10.default.string().optional().allow("", null),
4980
+ type: import_joi10.default.string().valid(...allowedTypes, "all").optional().allow("", null),
4981
+ status: import_joi10.default.string().valid(...allowedStatus, "all").optional().allow("", null),
4982
+ schedule: import_joi10.default.string().hex().required(),
4983
+ serviceType: import_joi10.default.string().valid(...Object.values(import_core11.AppServiceType)).required()
4973
4984
  });
4974
4985
  const { error } = validation.validate(query);
4975
4986
  if (error) {
@@ -5004,14 +5015,14 @@ function useAreaChecklistController() {
5004
5015
  }
5005
5016
  async function getAreaChecklistHistory(req, res, next) {
5006
5017
  const query = { ...req.query, ...req.params };
5007
- const validation = import_joi9.default.object({
5008
- page: import_joi9.default.number().min(1).optional().allow("", null),
5009
- limit: import_joi9.default.number().min(1).optional().allow("", null),
5010
- search: import_joi9.default.string().optional().allow("", null),
5011
- type: import_joi9.default.string().optional().allow("", ...allowedTypes),
5012
- schedule: import_joi9.default.string().hex().required(),
5013
- status: import_joi9.default.string().allow("", null, ...allowedStatus),
5014
- createdAt: import_joi9.default.alternatives().try(import_joi9.default.date(), import_joi9.default.string()).optional().allow("", null)
5018
+ const validation = import_joi10.default.object({
5019
+ page: import_joi10.default.number().min(1).optional().allow("", null),
5020
+ limit: import_joi10.default.number().min(1).optional().allow("", null),
5021
+ search: import_joi10.default.string().optional().allow("", null),
5022
+ type: import_joi10.default.string().optional().allow("", ...allowedTypes),
5023
+ schedule: import_joi10.default.string().hex().required(),
5024
+ status: import_joi10.default.string().allow("", null, ...allowedStatus),
5025
+ createdAt: import_joi10.default.alternatives().try(import_joi10.default.date(), import_joi10.default.string()).optional().allow("", null)
5015
5026
  });
5016
5027
  const { error } = validation.validate(query);
5017
5028
  if (error) {
@@ -5045,7 +5056,7 @@ function useAreaChecklistController() {
5045
5056
  }
5046
5057
  }
5047
5058
  async function getAreaChecklistHistoryDetails(req, res, next) {
5048
- const validation = import_joi9.default.string().hex().required();
5059
+ const validation = import_joi10.default.string().hex().required();
5049
5060
  const _id = req.params.id;
5050
5061
  const { error, value } = validation.validate(_id);
5051
5062
  if (error) {
@@ -5065,12 +5076,12 @@ function useAreaChecklistController() {
5065
5076
  }
5066
5077
  async function getAreaChecklistUnits(req, res, next) {
5067
5078
  const query = { ...req.query, ...req.params };
5068
- const validation = import_joi9.default.object({
5069
- page: import_joi9.default.number().min(1).optional().allow("", null),
5070
- limit: import_joi9.default.number().min(1).optional().allow("", null),
5071
- search: import_joi9.default.string().optional().allow("", null),
5072
- serviceType: import_joi9.default.string().valid(...Object.values(import_core11.AppServiceType)).required(),
5073
- id: import_joi9.default.string().hex().required()
5079
+ const validation = import_joi10.default.object({
5080
+ page: import_joi10.default.number().min(1).optional().allow("", null),
5081
+ limit: import_joi10.default.number().min(1).optional().allow("", null),
5082
+ search: import_joi10.default.string().optional().allow("", null),
5083
+ serviceType: import_joi10.default.string().valid(...Object.values(import_core11.AppServiceType)).required(),
5084
+ id: import_joi10.default.string().hex().required()
5074
5085
  });
5075
5086
  const { error } = validation.validate(query);
5076
5087
  if (error) {
@@ -5120,21 +5131,21 @@ function useAreaChecklistController() {
5120
5131
  ...decisionValues,
5121
5132
  completedBy
5122
5133
  };
5123
- const validation = import_joi9.default.object({
5124
- id: import_joi9.default.string().hex().required(),
5125
- set: import_joi9.default.number().integer().min(1).required(),
5126
- unit: import_joi9.default.string().hex().required(),
5127
- decision: import_joi9.default.string().valid("approve", "reject").required(),
5128
- approve: import_joi9.default.boolean().optional(),
5129
- reject: import_joi9.default.boolean().optional(),
5130
- remarks: import_joi9.default.string().optional().allow("", null),
5134
+ const validation = import_joi10.default.object({
5135
+ id: import_joi10.default.string().hex().required(),
5136
+ set: import_joi10.default.number().integer().min(1).required(),
5137
+ unit: import_joi10.default.string().hex().required(),
5138
+ decision: import_joi10.default.string().valid("approve", "reject").required(),
5139
+ approve: import_joi10.default.boolean().optional(),
5140
+ reject: import_joi10.default.boolean().optional(),
5141
+ remarks: import_joi10.default.string().optional().allow("", null),
5131
5142
  /*
5132
5143
  * Shape only. WHETHER a photo is required depends on the set's current
5133
5144
  * state in the database, which Joi cannot see — see the check below.
5134
5145
  * Each entry must still be a real id: a blank string carries no evidence.
5135
5146
  */
5136
- attachment: import_joi9.default.array().items(import_joi9.default.string().trim().min(1)).optional(),
5137
- completedBy: import_joi9.default.string().hex().required()
5147
+ attachment: import_joi10.default.array().items(import_joi10.default.string().trim().min(1)).optional(),
5148
+ completedBy: import_joi10.default.string().hex().required()
5138
5149
  });
5139
5150
  const { error } = validation.validate(payload);
5140
5151
  if (error) {
@@ -5171,7 +5182,7 @@ function useAreaChecklistController() {
5171
5182
  }
5172
5183
  }
5173
5184
  async function downloadChecklistPdf(req, res, next) {
5174
- const validation = import_joi9.default.string().hex().required();
5185
+ const validation = import_joi10.default.string().hex().required();
5175
5186
  const schedule = req.params.schedule;
5176
5187
  const { error, value } = validation.validate(schedule);
5177
5188
  if (error) {
@@ -5217,16 +5228,16 @@ function useAreaChecklistController() {
5217
5228
  }
5218
5229
 
5219
5230
  // src/models/hygiene-supply.model.ts
5220
- var import_joi10 = __toESM(require("joi"));
5231
+ var import_joi11 = __toESM(require("joi"));
5221
5232
  var import_mongodb12 = require("mongodb");
5222
5233
  var import_node_server_utils21 = require("@7365admin1/node-server-utils");
5223
5234
  var import_core12 = require("@7365admin1/core");
5224
- var supplySchema = import_joi10.default.object({
5225
- site: import_joi10.default.string().hex().required(),
5226
- serviceType: import_joi10.default.string().valid(...Object.values(import_core12.AppServiceType)).required(),
5227
- name: import_joi10.default.string().required(),
5228
- unitOfMeasurement: import_joi10.default.string().required(),
5229
- attachment: import_joi10.default.string().allow(null, "").optional()
5235
+ var supplySchema = import_joi11.default.object({
5236
+ site: import_joi11.default.string().hex().required(),
5237
+ serviceType: import_joi11.default.string().valid(...Object.values(import_core12.AppServiceType)).required(),
5238
+ name: import_joi11.default.string().required(),
5239
+ unitOfMeasurement: import_joi11.default.string().required(),
5240
+ attachment: import_joi11.default.string().allow(null, "").optional()
5230
5241
  });
5231
5242
  function MSupply(value) {
5232
5243
  const { error } = supplySchema.validate(value);
@@ -5354,7 +5365,7 @@ function useSupplyRepository() {
5354
5365
  throw new import_node_server_utils22.BadRequestError("Invalid site ID format.");
5355
5366
  }
5356
5367
  if (search) {
5357
- query.name = { $regex: search, $options: "i" };
5368
+ query.name = { $regex: escapeRegex(search), $options: "i" };
5358
5369
  cacheOptions.search = search;
5359
5370
  }
5360
5371
  const cacheKey = (0, import_node_server_utils22.makeCacheKey)(namespace_collection, cacheOptions);
@@ -5516,7 +5527,7 @@ function useSupplyRepository() {
5516
5527
  }
5517
5528
 
5518
5529
  // src/controllers/hygiene-supply.controller.ts
5519
- var import_joi11 = __toESM(require("joi"));
5530
+ var import_joi12 = __toESM(require("joi"));
5520
5531
  var import_node_server_utils23 = require("@7365admin1/node-server-utils");
5521
5532
  var import_core13 = require("@7365admin1/core");
5522
5533
  function useSupplyController() {
@@ -5547,12 +5558,12 @@ function useSupplyController() {
5547
5558
  }
5548
5559
  async function getSupplies(req, res, next) {
5549
5560
  const query = { ...req.query, ...req.params };
5550
- const validation = import_joi11.default.object({
5551
- page: import_joi11.default.number().min(1).optional().allow("", null),
5552
- limit: import_joi11.default.number().min(1).optional().allow("", null),
5553
- search: import_joi11.default.string().optional().allow("", null),
5554
- site: import_joi11.default.string().hex().required(),
5555
- serviceType: import_joi11.default.string().valid(...Object.values(import_core13.AppServiceType)).required()
5561
+ const validation = import_joi12.default.object({
5562
+ page: import_joi12.default.number().min(1).optional().allow("", null),
5563
+ limit: import_joi12.default.number().min(1).optional().allow("", null),
5564
+ search: import_joi12.default.string().optional().allow("", null),
5565
+ site: import_joi12.default.string().hex().required(),
5566
+ serviceType: import_joi12.default.string().valid(...Object.values(import_core13.AppServiceType)).required()
5556
5567
  });
5557
5568
  const { error } = validation.validate(query);
5558
5569
  if (error) {
@@ -5582,7 +5593,7 @@ function useSupplyController() {
5582
5593
  }
5583
5594
  }
5584
5595
  async function getSupplyById(req, res, next) {
5585
- const validation = import_joi11.default.string().hex().required();
5596
+ const validation = import_joi12.default.string().hex().required();
5586
5597
  const _id = req.params.id;
5587
5598
  const { error, value } = validation.validate(_id);
5588
5599
  if (error) {
@@ -5602,12 +5613,12 @@ function useSupplyController() {
5602
5613
  }
5603
5614
  async function updateSupply(req, res, next) {
5604
5615
  const payload = { id: req.params.id, ...req.body };
5605
- const validation = import_joi11.default.object({
5606
- id: import_joi11.default.string().hex().required(),
5607
- name: import_joi11.default.string().optional().allow("", null),
5608
- unitOfMeasurement: import_joi11.default.string().optional().allow("", null),
5609
- qty: import_joi11.default.number().min(0).optional().allow("", null),
5610
- attachment: import_joi11.default.string().optional().allow("", null)
5616
+ const validation = import_joi12.default.object({
5617
+ id: import_joi12.default.string().hex().required(),
5618
+ name: import_joi12.default.string().optional().allow("", null),
5619
+ unitOfMeasurement: import_joi12.default.string().optional().allow("", null),
5620
+ qty: import_joi12.default.number().min(0).optional().allow("", null),
5621
+ attachment: import_joi12.default.string().optional().allow("", null)
5611
5622
  });
5612
5623
  const { error } = validation.validate(payload);
5613
5624
  if (error) {
@@ -5628,7 +5639,7 @@ function useSupplyController() {
5628
5639
  }
5629
5640
  async function deleteSupply(req, res, next) {
5630
5641
  const id = req.params.id;
5631
- const validation = import_joi11.default.string().hex().required();
5642
+ const validation = import_joi12.default.string().hex().required();
5632
5643
  const { error, value } = validation.validate(id);
5633
5644
  if (error) {
5634
5645
  import_node_server_utils23.logger.log({ level: "error", message: error.message });
@@ -5655,18 +5666,18 @@ function useSupplyController() {
5655
5666
  }
5656
5667
 
5657
5668
  // src/models/hygiene-stock.model.ts
5658
- var import_joi12 = __toESM(require("joi"));
5669
+ var import_joi13 = __toESM(require("joi"));
5659
5670
  var import_mongodb14 = require("mongodb");
5660
5671
  var import_node_server_utils24 = require("@7365admin1/node-server-utils");
5661
5672
  var import_core14 = require("@7365admin1/core");
5662
- var stockSchema = import_joi12.default.object({
5663
- site: import_joi12.default.string().hex().required(),
5664
- serviceType: import_joi12.default.string().valid(...Object.values(import_core14.AppServiceType)).required(),
5665
- supply: import_joi12.default.string().hex().required(),
5666
- in: import_joi12.default.number().min(0).optional(),
5667
- out: import_joi12.default.number().min(0).optional(),
5668
- balance: import_joi12.default.number().min(0).required(),
5669
- remarks: import_joi12.default.string().optional().allow("", null)
5673
+ var stockSchema = import_joi13.default.object({
5674
+ site: import_joi13.default.string().hex().required(),
5675
+ serviceType: import_joi13.default.string().valid(...Object.values(import_core14.AppServiceType)).required(),
5676
+ supply: import_joi13.default.string().hex().required(),
5677
+ in: import_joi13.default.number().min(0).optional(),
5678
+ out: import_joi13.default.number().min(0).optional(),
5679
+ balance: import_joi13.default.number().min(0).required(),
5680
+ remarks: import_joi13.default.string().optional().allow("", null)
5670
5681
  });
5671
5682
  function MStock(value) {
5672
5683
  const { error } = stockSchema.validate(value);
@@ -5881,7 +5892,7 @@ function useStockService() {
5881
5892
  }
5882
5893
 
5883
5894
  // src/controllers/hygiene-stock.controller.ts
5884
- var import_joi13 = __toESM(require("joi"));
5895
+ var import_joi14 = __toESM(require("joi"));
5885
5896
  var import_node_server_utils27 = require("@7365admin1/node-server-utils");
5886
5897
  var import_core15 = require("@7365admin1/core");
5887
5898
  function useStockController() {
@@ -5889,12 +5900,12 @@ function useStockController() {
5889
5900
  const { createStock: _createStock } = useStockService();
5890
5901
  async function createStock(req, res, next) {
5891
5902
  const payload = { ...req.body, ...req.params };
5892
- const validation = import_joi13.default.object({
5893
- site: import_joi13.default.string().hex().required(),
5894
- serviceType: import_joi13.default.string().valid(...Object.values(import_core15.AppServiceType)).required(),
5895
- supply: import_joi13.default.string().hex().required(),
5896
- qty: import_joi13.default.number().min(0).required(),
5897
- remarks: import_joi13.default.string().optional().allow("", null)
5903
+ const validation = import_joi14.default.object({
5904
+ site: import_joi14.default.string().hex().required(),
5905
+ serviceType: import_joi14.default.string().valid(...Object.values(import_core15.AppServiceType)).required(),
5906
+ supply: import_joi14.default.string().hex().required(),
5907
+ qty: import_joi14.default.number().min(0).required(),
5908
+ remarks: import_joi14.default.string().optional().allow("", null)
5898
5909
  });
5899
5910
  const { error } = validation.validate(payload);
5900
5911
  if (error) {
@@ -5914,13 +5925,13 @@ function useStockController() {
5914
5925
  }
5915
5926
  async function getStocksBySupplyId(req, res, next) {
5916
5927
  const query = { ...req.query, ...req.params };
5917
- const validation = import_joi13.default.object({
5918
- page: import_joi13.default.number().min(1).optional().allow("", null),
5919
- limit: import_joi13.default.number().min(1).optional().allow("", null),
5920
- search: import_joi13.default.string().optional().allow("", null),
5921
- site: import_joi13.default.string().hex().required(),
5922
- serviceType: import_joi13.default.string().valid(...Object.values(import_core15.AppServiceType)).required(),
5923
- supply: import_joi13.default.string().hex().required()
5928
+ const validation = import_joi14.default.object({
5929
+ page: import_joi14.default.number().min(1).optional().allow("", null),
5930
+ limit: import_joi14.default.number().min(1).optional().allow("", null),
5931
+ search: import_joi14.default.string().optional().allow("", null),
5932
+ site: import_joi14.default.string().hex().required(),
5933
+ serviceType: import_joi14.default.string().valid(...Object.values(import_core15.AppServiceType)).required(),
5934
+ supply: import_joi14.default.string().hex().required()
5924
5935
  });
5925
5936
  const { error } = validation.validate(query);
5926
5937
  if (error) {
@@ -5982,21 +5993,21 @@ async function applyCheckOutDecision(decision, decide, returnStock) {
5982
5993
  }
5983
5994
 
5984
5995
  // src/models/hygiene-checkout-item.model.ts
5985
- var import_joi14 = __toESM(require("joi"));
5996
+ var import_joi15 = __toESM(require("joi"));
5986
5997
  var import_mongodb16 = require("mongodb");
5987
5998
  var import_node_server_utils28 = require("@7365admin1/node-server-utils");
5988
5999
  var import_core16 = require("@7365admin1/core");
5989
6000
  var allowedCheckOutItemStatus = ["pending", "completed"];
5990
- var checkOutItemSchema = import_joi14.default.object({
5991
- site: import_joi14.default.string().hex().required(),
5992
- serviceType: import_joi14.default.string().valid(...Object.values(import_core16.AppServiceType)).required(),
5993
- supply: import_joi14.default.string().hex().required(),
5994
- supplyName: import_joi14.default.string().required(),
5995
- supplyQty: import_joi14.default.number().min(0).required(),
5996
- qty: import_joi14.default.number().min(0).required(),
5997
- attachment: import_joi14.default.array().items(import_joi14.default.string()).optional().allow(null),
5998
- createdBy: import_joi14.default.string().hex().required(),
5999
- createdByName: import_joi14.default.string().required()
6001
+ var checkOutItemSchema = import_joi15.default.object({
6002
+ site: import_joi15.default.string().hex().required(),
6003
+ serviceType: import_joi15.default.string().valid(...Object.values(import_core16.AppServiceType)).required(),
6004
+ supply: import_joi15.default.string().hex().required(),
6005
+ supplyName: import_joi15.default.string().required(),
6006
+ supplyQty: import_joi15.default.number().min(0).required(),
6007
+ qty: import_joi15.default.number().min(0).required(),
6008
+ attachment: import_joi15.default.array().items(import_joi15.default.string()).optional().allow(null),
6009
+ createdBy: import_joi15.default.string().hex().required(),
6010
+ createdByName: import_joi15.default.string().required()
6000
6011
  });
6001
6012
  function MCheckOutItem(value) {
6002
6013
  const { error } = checkOutItemSchema.validate(value);
@@ -6120,7 +6131,7 @@ function useCheckOutItemRepository() {
6120
6131
  throw new import_node_server_utils29.BadRequestError("Invalid site ID format.");
6121
6132
  }
6122
6133
  if (search) {
6123
- query.supplyName = { $regex: search, $options: "i" };
6134
+ query.supplyName = { $regex: escapeRegex(search), $options: "i" };
6124
6135
  cacheOptions.search = search;
6125
6136
  }
6126
6137
  const cacheKey = (0, import_node_server_utils29.makeCacheKey)(namespace_collection, cacheOptions);
@@ -6476,7 +6487,7 @@ function useCheckOutItemService() {
6476
6487
  }
6477
6488
 
6478
6489
  // src/controllers/hygiene-checkout-item.controller.ts
6479
- var import_joi15 = __toESM(require("joi"));
6490
+ var import_joi16 = __toESM(require("joi"));
6480
6491
  var import_node_server_utils31 = require("@7365admin1/node-server-utils");
6481
6492
  var import_core18 = require("@7365admin1/core");
6482
6493
  function useCheckOutItemController() {
@@ -6500,13 +6511,13 @@ function useCheckOutItemController() {
6500
6511
  ...req.params,
6501
6512
  createdBy
6502
6513
  };
6503
- const validation = import_joi15.default.object({
6504
- site: import_joi15.default.string().hex().required(),
6505
- serviceType: import_joi15.default.string().valid(...Object.values(import_core18.AppServiceType)).required(),
6506
- supply: import_joi15.default.string().hex().required(),
6507
- qty: import_joi15.default.number().min(0).required(),
6508
- attachment: import_joi15.default.array().items(import_joi15.default.string()).optional().allow(null),
6509
- createdBy: import_joi15.default.string().hex().required()
6514
+ const validation = import_joi16.default.object({
6515
+ site: import_joi16.default.string().hex().required(),
6516
+ serviceType: import_joi16.default.string().valid(...Object.values(import_core18.AppServiceType)).required(),
6517
+ supply: import_joi16.default.string().hex().required(),
6518
+ qty: import_joi16.default.number().min(0).required(),
6519
+ attachment: import_joi16.default.array().items(import_joi16.default.string()).optional().allow(null),
6520
+ createdBy: import_joi16.default.string().hex().required()
6510
6521
  });
6511
6522
  const { error } = validation.validate(payload);
6512
6523
  if (error) {
@@ -6535,15 +6546,15 @@ function useCheckOutItemController() {
6535
6546
  ...req.params,
6536
6547
  createdBy
6537
6548
  };
6538
- const validation = import_joi15.default.object({
6539
- site: import_joi15.default.string().hex().required(),
6540
- serviceType: import_joi15.default.string().valid(...Object.values(import_core18.AppServiceType)).required(),
6541
- createdBy: import_joi15.default.string().hex().required(),
6542
- items: import_joi15.default.array().items(
6543
- import_joi15.default.object({
6544
- supply: import_joi15.default.string().hex().required(),
6545
- qty: import_joi15.default.number().min(0).required(),
6546
- attachment: import_joi15.default.array().items(import_joi15.default.string()).optional().allow(null)
6549
+ const validation = import_joi16.default.object({
6550
+ site: import_joi16.default.string().hex().required(),
6551
+ serviceType: import_joi16.default.string().valid(...Object.values(import_core18.AppServiceType)).required(),
6552
+ createdBy: import_joi16.default.string().hex().required(),
6553
+ items: import_joi16.default.array().items(
6554
+ import_joi16.default.object({
6555
+ supply: import_joi16.default.string().hex().required(),
6556
+ qty: import_joi16.default.number().min(0).required(),
6557
+ attachment: import_joi16.default.array().items(import_joi16.default.string()).optional().allow(null)
6547
6558
  })
6548
6559
  ).min(1).required()
6549
6560
  });
@@ -6565,12 +6576,12 @@ function useCheckOutItemController() {
6565
6576
  }
6566
6577
  async function getCheckOutItems(req, res, next) {
6567
6578
  const query = { ...req.query, ...req.params };
6568
- const validation = import_joi15.default.object({
6569
- page: import_joi15.default.number().min(1).optional().allow("", null),
6570
- limit: import_joi15.default.number().min(1).optional().allow("", null),
6571
- search: import_joi15.default.string().optional().allow("", null),
6572
- site: import_joi15.default.string().hex().required(),
6573
- serviceType: import_joi15.default.string().valid(...Object.values(import_core18.AppServiceType)).required()
6579
+ const validation = import_joi16.default.object({
6580
+ page: import_joi16.default.number().min(1).optional().allow("", null),
6581
+ limit: import_joi16.default.number().min(1).optional().allow("", null),
6582
+ search: import_joi16.default.string().optional().allow("", null),
6583
+ site: import_joi16.default.string().hex().required(),
6584
+ serviceType: import_joi16.default.string().valid(...Object.values(import_core18.AppServiceType)).required()
6574
6585
  });
6575
6586
  const { error } = validation.validate(query);
6576
6587
  if (error) {
@@ -6600,7 +6611,7 @@ function useCheckOutItemController() {
6600
6611
  }
6601
6612
  }
6602
6613
  async function getCheckOutItemById(req, res, next) {
6603
- const validation = import_joi15.default.string().hex().required();
6614
+ const validation = import_joi16.default.string().hex().required();
6604
6615
  const _id = req.params.id;
6605
6616
  const { error, value } = validation.validate(_id);
6606
6617
  if (error) {
@@ -6639,13 +6650,13 @@ function useCheckOutItemController() {
6639
6650
  ...decisionValues,
6640
6651
  completedBy
6641
6652
  };
6642
- const validation = import_joi15.default.object({
6643
- id: import_joi15.default.string().hex().required(),
6644
- decision: import_joi15.default.string().valid("approve", "disapprove").required(),
6645
- approve: import_joi15.default.boolean().required(),
6646
- reject: import_joi15.default.boolean().required(),
6647
- remarks: import_joi15.default.string().optional().allow("", null),
6648
- completedBy: import_joi15.default.string().hex().required()
6653
+ const validation = import_joi16.default.object({
6654
+ id: import_joi16.default.string().hex().required(),
6655
+ decision: import_joi16.default.string().valid("approve", "disapprove").required(),
6656
+ approve: import_joi16.default.boolean().required(),
6657
+ reject: import_joi16.default.boolean().required(),
6658
+ remarks: import_joi16.default.string().optional().allow("", null),
6659
+ completedBy: import_joi16.default.string().hex().required()
6649
6660
  });
6650
6661
  const { error } = validation.validate(payload);
6651
6662
  if (error) {
@@ -6678,21 +6689,21 @@ function useCheckOutItemController() {
6678
6689
  // src/models/hygiene-schedule-task.model.ts
6679
6690
  var import_node_server_utils32 = require("@7365admin1/node-server-utils");
6680
6691
  var import_core19 = require("@7365admin1/core");
6681
- var import_joi16 = __toESM(require("joi"));
6692
+ var import_joi17 = __toESM(require("joi"));
6682
6693
  var import_mongodb18 = require("mongodb");
6683
- var scheduleTaskSchema = import_joi16.default.object({
6684
- site: import_joi16.default.string().hex().required(),
6685
- serviceType: import_joi16.default.string().valid(...Object.values(import_core19.AppServiceType)).required(),
6686
- title: import_joi16.default.string().required(),
6687
- time: import_joi16.default.string().pattern(/^([0-1]\d|2[0-3]):([0-5]\d)$/).required(),
6688
- dates: import_joi16.default.array().min(1).items(
6689
- import_joi16.default.string().pattern(/^\d{4}-\d{2}-\d{2}$/).required()
6694
+ var scheduleTaskSchema = import_joi17.default.object({
6695
+ site: import_joi17.default.string().hex().required(),
6696
+ serviceType: import_joi17.default.string().valid(...Object.values(import_core19.AppServiceType)).required(),
6697
+ title: import_joi17.default.string().required(),
6698
+ time: import_joi17.default.string().pattern(/^([0-1]\d|2[0-3]):([0-5]\d)$/).required(),
6699
+ dates: import_joi17.default.array().min(1).items(
6700
+ import_joi17.default.string().pattern(/^\d{4}-\d{2}-\d{2}$/).required()
6690
6701
  ).required(),
6691
- description: import_joi16.default.string().optional().allow("", null),
6692
- areas: import_joi16.default.array().min(1).items(
6693
- import_joi16.default.object({
6694
- name: import_joi16.default.string().required(),
6695
- value: import_joi16.default.any().required()
6702
+ description: import_joi17.default.string().optional().allow("", null),
6703
+ areas: import_joi17.default.array().min(1).items(
6704
+ import_joi17.default.object({
6705
+ name: import_joi17.default.string().required(),
6706
+ value: import_joi17.default.any().required()
6696
6707
  })
6697
6708
  ).required()
6698
6709
  });
@@ -6811,7 +6822,7 @@ function useScheduleTaskRepository() {
6811
6822
  throw new import_node_server_utils33.BadRequestError("Invalid site ID format.");
6812
6823
  }
6813
6824
  if (search) {
6814
- query.$or = [{ title: { $regex: search, $options: "i" } }];
6825
+ query.$or = [{ title: { $regex: escapeRegex(search), $options: "i" } }];
6815
6826
  cacheOptions.search = search;
6816
6827
  }
6817
6828
  const cacheKey = (0, import_node_server_utils33.makeCacheKey)(namespace_collection, cacheOptions);
@@ -7287,7 +7298,7 @@ function useScheduleTaskService() {
7287
7298
  }
7288
7299
 
7289
7300
  // src/controllers/hygiene-schedule-task.controller.ts
7290
- var import_joi17 = __toESM(require("joi"));
7301
+ var import_joi18 = __toESM(require("joi"));
7291
7302
  var import_node_server_utils35 = require("@7365admin1/node-server-utils");
7292
7303
  var import_core20 = require("@7365admin1/core");
7293
7304
  function useScheduleTaskController() {
@@ -7318,12 +7329,12 @@ function useScheduleTaskController() {
7318
7329
  }
7319
7330
  async function getScheduleTasks(req, res, next) {
7320
7331
  const query = { ...req.query, ...req.params };
7321
- const validation = import_joi17.default.object({
7322
- page: import_joi17.default.number().min(1).optional().allow("", null),
7323
- limit: import_joi17.default.number().min(1).optional().allow("", null),
7324
- search: import_joi17.default.string().optional().allow("", null),
7325
- site: import_joi17.default.string().hex().required(),
7326
- serviceType: import_joi17.default.string().valid(...Object.values(import_core20.AppServiceType)).required()
7332
+ const validation = import_joi18.default.object({
7333
+ page: import_joi18.default.number().min(1).optional().allow("", null),
7334
+ limit: import_joi18.default.number().min(1).optional().allow("", null),
7335
+ search: import_joi18.default.string().optional().allow("", null),
7336
+ site: import_joi18.default.string().hex().required(),
7337
+ serviceType: import_joi18.default.string().valid(...Object.values(import_core20.AppServiceType)).required()
7327
7338
  });
7328
7339
  const { error } = validation.validate(query);
7329
7340
  if (error) {
@@ -7353,7 +7364,7 @@ function useScheduleTaskController() {
7353
7364
  }
7354
7365
  }
7355
7366
  async function getScheduleTaskById(req, res, next) {
7356
- const validation = import_joi17.default.string().hex().required();
7367
+ const validation = import_joi18.default.string().hex().required();
7357
7368
  const _id = req.params.id;
7358
7369
  const { error, value } = validation.validate(_id);
7359
7370
  if (error) {
@@ -7373,18 +7384,18 @@ function useScheduleTaskController() {
7373
7384
  }
7374
7385
  async function updateScheduleTask(req, res, next) {
7375
7386
  const payload = { id: req.params.id, ...req.body };
7376
- const validation = import_joi17.default.object({
7377
- id: import_joi17.default.string().hex().required(),
7378
- title: import_joi17.default.string().optional().allow("", null),
7379
- time: import_joi17.default.string().pattern(/^([0-1]\d|2[0-3]):([0-5]\d)$/).optional().allow("", null),
7380
- dates: import_joi17.default.array().min(1).items(
7381
- import_joi17.default.string().pattern(/^\d{4}-\d{2}-\d{2}$/).required()
7387
+ const validation = import_joi18.default.object({
7388
+ id: import_joi18.default.string().hex().required(),
7389
+ title: import_joi18.default.string().optional().allow("", null),
7390
+ time: import_joi18.default.string().pattern(/^([0-1]\d|2[0-3]):([0-5]\d)$/).optional().allow("", null),
7391
+ dates: import_joi18.default.array().min(1).items(
7392
+ import_joi18.default.string().pattern(/^\d{4}-\d{2}-\d{2}$/).required()
7382
7393
  ).optional(),
7383
- description: import_joi17.default.string().optional().allow("", null),
7384
- areas: import_joi17.default.array().min(1).items(
7385
- import_joi17.default.object({
7386
- name: import_joi17.default.string().required(),
7387
- value: import_joi17.default.any().required()
7394
+ description: import_joi18.default.string().optional().allow("", null),
7395
+ areas: import_joi18.default.array().min(1).items(
7396
+ import_joi18.default.object({
7397
+ name: import_joi18.default.string().required(),
7398
+ value: import_joi18.default.any().required()
7388
7399
  })
7389
7400
  ).optional()
7390
7401
  });
@@ -7406,7 +7417,7 @@ function useScheduleTaskController() {
7406
7417
  }
7407
7418
  }
7408
7419
  async function deleteScheduleTask(req, res, next) {
7409
- const validation = import_joi17.default.string().hex().required();
7420
+ const validation = import_joi18.default.string().hex().required();
7410
7421
  const _id = req.params.id;
7411
7422
  const { error, value } = validation.validate(_id);
7412
7423
  if (error) {
@@ -7650,17 +7661,17 @@ function useQRService() {
7650
7661
  }
7651
7662
 
7652
7663
  // src/controllers/hygiene-qr.controller.ts
7653
- var import_joi18 = __toESM(require("joi"));
7664
+ var import_joi19 = __toESM(require("joi"));
7654
7665
  var import_node_server_utils37 = require("@7365admin1/node-server-utils");
7655
7666
  function useQRController() {
7656
7667
  const { generateQRImage: _generateQRImage, generateQRPDF: _generateQRPDF } = useQRService();
7657
7668
  async function generateQR(req, res, next) {
7658
- const validation = import_joi18.default.object({
7659
- url: import_joi18.default.string().uri().required(),
7660
- filename: import_joi18.default.string().optional().allow("", null),
7661
- title: import_joi18.default.string().optional().allow("", null),
7662
- subtitle: import_joi18.default.string().optional().allow("", null),
7663
- download: import_joi18.default.boolean().optional().default(false)
7669
+ const validation = import_joi19.default.object({
7670
+ url: import_joi19.default.string().uri().required(),
7671
+ filename: import_joi19.default.string().optional().allow("", null),
7672
+ title: import_joi19.default.string().optional().allow("", null),
7673
+ subtitle: import_joi19.default.string().optional().allow("", null),
7674
+ download: import_joi19.default.boolean().optional().default(false)
7664
7675
  });
7665
7676
  const query = { ...req.query };
7666
7677
  const { error, value } = validation.validate(query);