@7365admin1/core 3.35.0 → 3.36.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @iservice365/core
2
2
 
3
+ ## 3.36.0
4
+
5
+ ### Minor Changes
6
+
7
+ - f245a39: release changes in people api, etc.
8
+
3
9
  ## 3.35.0
4
10
 
5
11
  ### Minor Changes
package/dist/index.d.ts CHANGED
@@ -2498,6 +2498,7 @@ declare function useSiteCameraRepo(): {
2498
2498
  category?: string;
2499
2499
  direction?: string;
2500
2500
  }) => Promise<{}>;
2501
+ getCamerasBySiteId: (site: string | ObjectId) => Promise<Array<TSiteCamera>>;
2501
2502
  delCachedData: () => void;
2502
2503
  getBySiteGuardPost: (site: string | ObjectId, guardPost: number) => Promise<{} | null>;
2503
2504
  updateById: (_id: string | ObjectId, value: Partial<Pick<TSiteCamera, "host" | "username" | "password" | "category" | "guardPost" | "updatedAt">>, session?: ClientSession) => Promise<string>;
@@ -3099,6 +3100,7 @@ declare function usePersonRepo(): {
3099
3100
  getById: (_id: string | ObjectId) => Promise<TPerson | null>;
3100
3101
  createTextIndex: () => Promise<void>;
3101
3102
  getPersonByPlateNumber: (plateNumber: string) => Promise<TPerson | null>;
3103
+ getApprovedPersonByPlateNumber: (plateNumber: string, excludePersonId?: string | ObjectId) => Promise<TPerson | null>;
3102
3104
  getByNRIC: (value: string) => Promise<TPerson | null>;
3103
3105
  createIndexes: () => Promise<void>;
3104
3106
  getPersonByPhoneNumber: (value: string) => Promise<TPerson | null>;
package/dist/index.js CHANGED
@@ -24812,6 +24812,18 @@ function useSiteCameraRepo() {
24812
24812
  throw new import_node_server_utils73.BadRequestError("Failed to retrieve site cameras.");
24813
24813
  }
24814
24814
  }
24815
+ async function getCamerasBySiteId(site) {
24816
+ const _site = (0, import_node_server_utils73.toObjectId)(site);
24817
+ try {
24818
+ const items = await collection.find({ site: _site, status: "active", type: "anpr" }).toArray();
24819
+ return items;
24820
+ } catch (error) {
24821
+ if (error instanceof import_node_server_utils73.BadRequestError) {
24822
+ throw error;
24823
+ }
24824
+ throw new import_node_server_utils73.BadRequestError("Failed to retrieve site cameras.");
24825
+ }
24826
+ }
24815
24827
  async function getBySiteGuardPost(site, guardPost) {
24816
24828
  try {
24817
24829
  site = new import_mongodb44.ObjectId(site);
@@ -25168,6 +25180,7 @@ function useSiteCameraRepo() {
25168
25180
  getBySite,
25169
25181
  getVisitorsInBySite,
25170
25182
  getBySites,
25183
+ getCamerasBySiteId,
25171
25184
  delCachedData,
25172
25185
  getBySiteGuardPost,
25173
25186
  updateById,
@@ -25479,6 +25492,22 @@ function usePersonRepo() {
25479
25492
  );
25480
25493
  }
25481
25494
  }
25495
+ async function getApprovedPersonByPlateNumber(plateNumber, excludePersonId) {
25496
+ try {
25497
+ const query = {
25498
+ plateNumber,
25499
+ status: "approved"
25500
+ };
25501
+ if (excludePersonId) {
25502
+ query._id = { $ne: (0, import_node_server_utils74.toObjectId)(excludePersonId) };
25503
+ }
25504
+ return await collection.findOne(query);
25505
+ } catch (error) {
25506
+ throw new import_node_server_utils74.InternalServerError(
25507
+ "Failed to fetch approved person by plate number."
25508
+ );
25509
+ }
25510
+ }
25482
25511
  async function getByNRIC(value) {
25483
25512
  try {
25484
25513
  if (!value || value.trim() === "") {
@@ -25859,6 +25888,7 @@ function usePersonRepo() {
25859
25888
  getById,
25860
25889
  createTextIndex,
25861
25890
  getPersonByPlateNumber,
25891
+ getApprovedPersonByPlateNumber,
25862
25892
  getByNRIC,
25863
25893
  createIndexes,
25864
25894
  getPersonByPhoneNumber,
@@ -27033,7 +27063,8 @@ function useVehicleService() {
27033
27063
  throw new Error("Unable to start session for vehicle service.");
27034
27064
  }
27035
27065
  }
27036
- const [_vehiclePlateNumber] = value.plateNumber;
27066
+ const plateNumbers = Array.isArray(value.plateNumber) ? value.plateNumber : value.plateNumber ? [value.plateNumber] : [];
27067
+ const [_vehiclePlateNumber] = plateNumbers;
27037
27068
  const [existingPlateNumber, org] = await Promise.all([
27038
27069
  _getVehicleByPlateNumber(_vehiclePlateNumber),
27039
27070
  _getById(value.org)
@@ -27098,7 +27129,6 @@ function useVehicleService() {
27098
27129
  }
27099
27130
  }
27100
27131
  const owner = value.name;
27101
- const plateNumbers = value.plateNumber;
27102
27132
  try {
27103
27133
  if (!isExternalSession) {
27104
27134
  session.startTransaction();
@@ -27315,7 +27345,10 @@ function useVehicleService() {
27315
27345
  const dahuaResponse = await _addPlateNumber(dahuaPayload);
27316
27346
  if (dahuaResponse?.statusCode != 200) {
27317
27347
  console.log("dahuaResponse", dahuaResponse);
27318
- console.log("approveVehicleById dahuaResponse dahuaResponse?.statusCode != 200", dahuaResponse?.statusCode);
27348
+ console.log(
27349
+ "approveVehicleById dahuaResponse dahuaResponse?.statusCode != 200",
27350
+ dahuaResponse?.statusCode
27351
+ );
27319
27352
  throw new import_node_server_utils78.BadRequestError("Failed to add plate number to ANPR");
27320
27353
  }
27321
27354
  const responseData = dahuaResponse?.data.toString("utf-8");
@@ -27522,7 +27555,19 @@ function useVehicleService() {
27522
27555
  if (value.peopleId) {
27523
27556
  value.peopleId = new import_mongodb49.ObjectId(value.peopleId);
27524
27557
  }
27525
- const { name, plateNumber, start, end, recNo, type, unit, site, block, level, ...rest } = value;
27558
+ const {
27559
+ name,
27560
+ plateNumber,
27561
+ start,
27562
+ end,
27563
+ recNo,
27564
+ type,
27565
+ unit,
27566
+ site,
27567
+ block,
27568
+ level,
27569
+ ...rest
27570
+ } = value;
27526
27571
  if (_name != name || _plateNumber != plateNumber) {
27527
27572
  const startDahua = value.start ? formatDahuaDate(new Date(value.start)) : formatDahuaDate(new Date(_start));
27528
27573
  const endDahua = value.end ? formatDahuaDate(new Date(value.end)) : formatDahuaDate(new Date(_end));
@@ -27549,7 +27594,11 @@ function useVehicleService() {
27549
27594
  for (const camera of siteCameras) {
27550
27595
  const { host, username, password } = camera;
27551
27596
  if (_plateNumber != plateNumber) {
27552
- console.log("updateVehicleById _plateNumber != plateNumber", _plateNumber, plateNumber);
27597
+ console.log(
27598
+ "updateVehicleById _plateNumber != plateNumber",
27599
+ _plateNumber,
27600
+ plateNumber
27601
+ );
27553
27602
  const removePlateNumber = {
27554
27603
  host,
27555
27604
  username,
@@ -27596,7 +27645,11 @@ function useVehicleService() {
27596
27645
  );
27597
27646
  }
27598
27647
  } else {
27599
- console.log("updateVehicleById _plateNumber == plateNumber", _plateNumber, plateNumber);
27648
+ console.log(
27649
+ "updateVehicleById _plateNumber == plateNumber",
27650
+ _plateNumber,
27651
+ plateNumber
27652
+ );
27600
27653
  const dahuaPayload = {
27601
27654
  host,
27602
27655
  username,
@@ -36390,7 +36443,8 @@ function usePersonService() {
36390
36443
  getById: _getById,
36391
36444
  updateById: _updateById,
36392
36445
  getByUserId: _getByUserId,
36393
- reviewResidentPerson: _reviewResidentPerson
36446
+ reviewResidentPerson: _reviewResidentPerson,
36447
+ getApprovedPersonByPlateNumber
36394
36448
  } = usePersonRepo();
36395
36449
  const { addPlateNumber: _addPlateNumber } = useDahuaService();
36396
36450
  const {
@@ -36403,7 +36457,7 @@ function usePersonService() {
36403
36457
  } = useUserRepo();
36404
36458
  const { add: addMember } = useMemberRepo();
36405
36459
  const { getById: _getUnitById, updateById: updateUnitById } = useBuildingUnitRepo();
36406
- const { getAllCameraWithPassword: _getAllSiteCameras } = useSiteCameraRepo();
36460
+ const { getAllCameraWithPassword: _getAllSiteCameras, getCamerasBySiteId } = useSiteCameraRepo();
36407
36461
  const { updateStatusById } = useFileRepo();
36408
36462
  const { getById: getOrgById } = useOrgRepo();
36409
36463
  const { getSiteById } = useSiteRepo();
@@ -36498,7 +36552,7 @@ function usePersonService() {
36498
36552
  "./public/handlebars/registration-pending"
36499
36553
  )
36500
36554
  });
36501
- mailer.sendMail({
36555
+ await mailer.sendMail({
36502
36556
  to: value.email,
36503
36557
  subject: "Registration Received \u2013 Pending Review",
36504
36558
  html: emailContent,
@@ -36658,7 +36712,7 @@ function usePersonService() {
36658
36712
  value.approvedBy.id = approvedBy._id;
36659
36713
  }
36660
36714
  const vehicle = {
36661
- plateNumber: person.plateNumber || "",
36715
+ plateNumber: person.plateNumber ?? "",
36662
36716
  type: "whitelist",
36663
36717
  category: person.type || "",
36664
36718
  name: person.name,
@@ -36690,7 +36744,16 @@ function usePersonService() {
36690
36744
  case "approved":
36691
36745
  userStatus = "active";
36692
36746
  if (person.plateNumber && person.plateNumber.trim() !== "") {
36693
- await addVehicle(vehicle, session);
36747
+ const anprCameraList = await getCamerasBySiteId(
36748
+ person.site.toString()
36749
+ );
36750
+ const existingPerson = await getApprovedPersonByPlateNumber(
36751
+ person.plateNumber,
36752
+ id
36753
+ );
36754
+ if (anprCameraList.length > 0 && !existingPerson) {
36755
+ await addVehicle(vehicle, session);
36756
+ }
36694
36757
  }
36695
36758
  title = "Your account has been approved";
36696
36759
  hideLogin = false;