@eeplatform/basic-edu 1.8.6 → 1.8.7

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.mjs CHANGED
@@ -2875,7 +2875,7 @@ var learnerInfoSchema = Joi5.object({
2875
2875
  });
2876
2876
  var schemaUpdateStatus = Joi5.object({
2877
2877
  _id: Joi5.string().hex().length(24).required(),
2878
- status: Joi5.string().valid("pending", "accepted", "rejected").required()
2878
+ status: Joi5.string().valid("pending", "accepted", "rejected", "cancelled").required()
2879
2879
  });
2880
2880
  var gradeLevels = [
2881
2881
  "K1",
@@ -4337,6 +4337,51 @@ function useProgramScreeningRepo() {
4337
4337
  }
4338
4338
  }
4339
4339
  }
4340
+ async function getByApplicantId(_id) {
4341
+ try {
4342
+ _id = new ObjectId10(_id);
4343
+ } catch (error) {
4344
+ throw new BadRequestError14("Invalid ID.");
4345
+ }
4346
+ const cacheKey = makeCacheKey6(namespace_collection, {
4347
+ applicant: String(_id)
4348
+ });
4349
+ try {
4350
+ const cached = await getCache(cacheKey);
4351
+ if (cached) {
4352
+ logger11.log({
4353
+ level: "info",
4354
+ message: `Cache hit for getById program screening: ${cacheKey}`
4355
+ });
4356
+ return cached;
4357
+ }
4358
+ const result = await collection.findOne({
4359
+ applicant: _id,
4360
+ status: { $ne: "deleted" }
4361
+ });
4362
+ if (!result) {
4363
+ throw new BadRequestError14("Program screening not found.");
4364
+ }
4365
+ setCache(cacheKey, result, 300).then(() => {
4366
+ logger11.log({
4367
+ level: "info",
4368
+ message: `Cache set for program screening by id: ${cacheKey}`
4369
+ });
4370
+ }).catch((err) => {
4371
+ logger11.log({
4372
+ level: "error",
4373
+ message: `Failed to set cache for program screening by id: ${err.message}`
4374
+ });
4375
+ });
4376
+ return result;
4377
+ } catch (error) {
4378
+ if (error instanceof AppError7) {
4379
+ throw error;
4380
+ } else {
4381
+ throw new InternalServerError5("Failed to get program screening.");
4382
+ }
4383
+ }
4384
+ }
4340
4385
  async function getByCode(code, school) {
4341
4386
  try {
4342
4387
  school = new ObjectId10(school);
@@ -4460,6 +4505,26 @@ function useProgramScreeningRepo() {
4460
4505
  );
4461
4506
  }
4462
4507
  }
4508
+ async function updateStatusByApplicantId(_id, status, session) {
4509
+ try {
4510
+ _id = new ObjectId10(_id);
4511
+ } catch (error) {
4512
+ throw new BadRequestError14("Invalid ID.");
4513
+ }
4514
+ try {
4515
+ await collection.updateOne(
4516
+ { applicant: _id },
4517
+ { $set: { status, updatedAt: /* @__PURE__ */ new Date() } },
4518
+ { session }
4519
+ );
4520
+ delCachedData();
4521
+ return "Successfully updated program screening status.";
4522
+ } catch (error) {
4523
+ throw new InternalServerError5(
4524
+ "Failed to update program screening status."
4525
+ );
4526
+ }
4527
+ }
4463
4528
  return {
4464
4529
  createIndexes,
4465
4530
  add,
@@ -4468,7 +4533,9 @@ function useProgramScreeningRepo() {
4468
4533
  getByCode,
4469
4534
  updateFieldById,
4470
4535
  deleteById,
4471
- updateById
4536
+ updateById,
4537
+ updateStatusByApplicantId,
4538
+ getByApplicantId
4472
4539
  };
4473
4540
  }
4474
4541
 
@@ -5364,7 +5431,11 @@ function useEnrollmentService() {
5364
5431
  getById: _getById,
5365
5432
  updateStatusById: _updateStatusById
5366
5433
  } = useEnrollmentRepo();
5367
- const { add: addProgramScreening } = useProgramScreeningRepo();
5434
+ const {
5435
+ add: addProgramScreening,
5436
+ updateStatusByApplicantId,
5437
+ getByApplicantId
5438
+ } = useProgramScreeningRepo();
5368
5439
  const { getById: getProgramById } = useProgramRepo();
5369
5440
  async function add(value) {
5370
5441
  const session = useAtlas10.getClient()?.startSession();
@@ -5495,6 +5566,11 @@ function useEnrollmentService() {
5495
5566
  if (status === "rejected" && enrollment.status == "accepted") {
5496
5567
  throw new BadRequestError19("Accepted enrollments cannot be rejected.");
5497
5568
  }
5569
+ if (status === "withdrawn" && enrollment.status !== "screening") {
5570
+ throw new BadRequestError19(
5571
+ "Only enrollments in screening status can be withdrawn."
5572
+ );
5573
+ }
5498
5574
  const result = await _updateStatusById(_id, status, session);
5499
5575
  if (result.modifiedCount === 0) {
5500
5576
  throw new InternalServerError7("Failed to accept enrollment");
@@ -5534,6 +5610,14 @@ function useEnrollmentService() {
5534
5610
  enrollment.createdBy = enrollment.createdBy?.toString();
5535
5611
  await addLearner(enrollment, session);
5536
5612
  }
5613
+ const programScreening = await getByApplicantId(_id);
5614
+ if (programScreening) {
5615
+ if (["cancelled", "withdrawn"].includes(status)) {
5616
+ await updateStatusByApplicantId(_id, "cancelled", session);
5617
+ } else {
5618
+ await updateStatusByApplicantId(_id, status, session);
5619
+ }
5620
+ }
5537
5621
  await session.commitTransaction();
5538
5622
  return "Enrollment accepted successfully";
5539
5623
  } catch (error2) {