From e2d5e3d6a29fcda013bcec0894c6630630c710c3 Mon Sep 17 00:00:00 2001 From: Anna Hughes Date: Wed, 5 Feb 2025 18:22:27 +0000 Subject: [PATCH] fix: improve course complete (#770) --- src/session-user/session-user.service.ts | 36 ++++++++++++------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/session-user/session-user.service.ts b/src/session-user/session-user.service.ts index 869a57de..334a7a26 100644 --- a/src/session-user/session-user.service.ts +++ b/src/session-user/session-user.service.ts @@ -1,6 +1,5 @@ import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; -import _ from 'lodash'; import { UserEntity } from 'src/entities/user.entity'; import { ServiceUserProfilesService } from 'src/service-user-profiles/service-user-profiles.service'; import { Repository } from 'typeorm'; @@ -34,26 +33,26 @@ export class SessionUserService { courseUser: CourseUserEntity, course: CourseEntity, ): Promise { - const userSessionIds = courseUser.sessionUser?.map((sessionUser) => { - if (sessionUser.completed) return sessionUser.sessionId; - }); + const completedSessionTotal = courseUser.sessionUser?.filter((su) => su.completed).length; - const courseSessionIds = course.session?.map((session) => { - if (session.status === STORYBLOK_STORY_STATUS_ENUM.PUBLISHED) return session.id; - }); + const courseSessionsTotal = course.session?.filter( + (s) => s.status === STORYBLOK_STORY_STATUS_ENUM.PUBLISHED, + ).length; - const courseIsComplete = _.xor(courseSessionIds, userSessionIds).length == 0; - - if (courseUser.completed !== courseIsComplete) { - await this.courseUserService.setCourseUserCompleted( - { - userId: courseUser.userId, - courseId: courseUser.courseId, - }, - courseIsComplete, - ); + const courseIsComplete = completedSessionTotal === courseSessionsTotal; + const updateRequired = courseUser.completed !== courseIsComplete; + if (updateRequired) { courseUser.completed = courseIsComplete; + + try { + await this.courseUserService.setCourseUserCompleted( + { userId: courseUser.userId, courseId: courseUser.courseId }, + courseIsComplete, + ); + } catch (error) { + this.logger.error(`Error updating: ${error}`); + } } return courseUser; @@ -174,7 +173,7 @@ export class SessionUserService { sessionUser.completedAt = completed ? new Date() : null; await this.sessionUserRepository.save(sessionUser); - courseUser.sessionUser?.map((su) => { + courseUser.sessionUser?.forEach((su) => { if (su.sessionId === id) { su.completed = completed; } @@ -195,6 +194,7 @@ export class SessionUserService { where: { id: courseId }, relations: { session: true }, }); + this.logger.log(`course: ${course.name}`); courseUser = await this.checkCourseIsComplete(courseUser, course); courseUser.course = course; const formattedResponse = formatCourseUserObjects([courseUser])[0];