From 38050c87f7ccbc78daf8514dbde225d34d2d7b75 Mon Sep 17 00:00:00 2001 From: Claus Haas Date: Thu, 22 Aug 2024 15:53:36 -0300 Subject: [PATCH] fix courses that show on courses list --- app/routes/courses_.tsx | 6 +++--- app/services/course.service.server.ts | 22 ++++++++++++++++------ 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/app/routes/courses_.tsx b/app/routes/courses_.tsx index 8685254..6244163 100644 --- a/app/routes/courses_.tsx +++ b/app/routes/courses_.tsx @@ -25,8 +25,8 @@ export const loader = defineLoader(async ({request}: LoaderFunctionArgs) => { try { const lessonActivityService = new LessonActivityService(); - const userRoles = userSession.get('roles') as TUserRoles; - const {data: courses} = new CourseService().getAllFromCache(userRoles); + const userData = userSession.data as TypeUserSession; + const {data: courses} = new CourseService().getAllFromCache(userData); const coursesActivity = typeof userSession.get('id') === 'string' ? courses.map(course => ({ [course.slug]: lessonActivityService.getCourseProgressForUser(course.slug, userSession.get('id') as string), })) : undefined; @@ -35,7 +35,7 @@ export const loader = defineLoader(async ({request}: LoaderFunctionArgs) => { courses, coursesActivity, meta, - userData: userSession.data as TypeUserSession, + userData, }; } catch (error) { logger.logError(`Error loading courses: ${(error as Error).message}`); diff --git a/app/services/course.service.server.ts b/app/services/course.service.server.ts index c703624..121eb4b 100644 --- a/app/services/course.service.server.ts +++ b/app/services/course.service.server.ts @@ -101,23 +101,33 @@ export class CourseService { }; } - public getAllFromCache(userRoles: TUserRoles = []): TServiceReturn { - const isAdmin = userRoles.includes('admin'); - + public getAllFromCache(user: TUser): TServiceReturn { const allCoursesKeys = CourseService.cache.keys().filter(key => key.startsWith('course:')); logger.logDebug(`All courses keys: ${JSON.stringify(allCoursesKeys)}`); const allCourses = allCoursesKeys.map(key => { const course = JSON.parse(CourseService.cache.get(key) ?? '{}') as TCourseDataForCache; + const hasActiveSubscription = user.roles?.includes('admin') ?? course.delegateAuthTo.some(courseSlug => { + const subscription = CourseService.cache.get(`${courseSlug}:${user.id}`); + + if (!subscription) { + return false; + } + + const {expiresAt} = JSON.parse(subscription) as TSubscription; + return expiresAt >= new Date(); + }); + return { ...course, - content: isAdmin ? course.content : course.marketingContent, - videoSourceUrl: isAdmin ? course.videoSourceUrl : course.marketingVideoUrl, + content: hasActiveSubscription ? course.content : course.marketingContent, + videoSourceUrl: hasActiveSubscription ? course.videoSourceUrl : course.marketingVideoUrl, + hasActiveSubscription, }; }); - const filteredCourses = allCourses.filter(course => isAdmin || course.isPublished); + const filteredCourses = allCourses.filter(course => user.roles?.includes('admin') ?? (course.isPublished && course.hasActiveSubscription) ?? course.isSelling); filteredCourses.sort((a, b) => { if (!a.order && !b.order) {