From 19776967fab6d3d41e184d9eb6b5884e7ff05edf Mon Sep 17 00:00:00 2001 From: Rotimi Best Date: Thu, 7 Dec 2023 09:37:12 +0300 Subject: [PATCH] feat: add total students to course card --- .../Courses/components/Card/index.svelte | 9 +++++++- .../src/lib/components/Courses/index.svelte | 1 + apps/dashboard/src/lib/utils/types/index.ts | 1 + .../20231207061507_update_get_courses.sql | 22 +++++++++++++++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 supabase/migrations/20231207061507_update_get_courses.sql diff --git a/apps/dashboard/src/lib/components/Courses/components/Card/index.svelte b/apps/dashboard/src/lib/components/Courses/components/Card/index.svelte index f923f991..44886a59 100644 --- a/apps/dashboard/src/lib/components/Courses/components/Card/index.svelte +++ b/apps/dashboard/src/lib/components/Courses/components/Card/index.svelte @@ -12,6 +12,7 @@ export let isPublished = false; export let cost = 0; export let totalLessons = 0; + export let totalStudents = 0; export let currency = 'NGN'; export let isOnLandingPage = false; export let isLMS = false; @@ -46,7 +47,8 @@

{totalLessons} lessons

@@ -81,6 +83,11 @@ variant={VARIANTS.OUTLINED} className="rounded-none text-primary-600" /> + {:else if !isOnLandingPage} +
+

{totalStudents} students

+
+
{/if}
diff --git a/apps/dashboard/src/lib/components/Courses/index.svelte b/apps/dashboard/src/lib/components/Courses/index.svelte index f0a87c0d..bc920ef7 100644 --- a/apps/dashboard/src/lib/components/Courses/index.svelte +++ b/apps/dashboard/src/lib/components/Courses/index.svelte @@ -40,6 +40,7 @@ cost={courseData.cost} currency={courseData.currency} totalLessons={courseData.total_lessons} + totalStudents={courseData.total_students} isLMS={$appStore.isOrgSite} progressRate={calcProgressRate(courseData.progress_rate, courseData.total_lessons)} /> diff --git a/apps/dashboard/src/lib/utils/types/index.ts b/apps/dashboard/src/lib/utils/types/index.ts index 0bc85b89..1272b33b 100644 --- a/apps/dashboard/src/lib/utils/types/index.ts +++ b/apps/dashboard/src/lib/utils/types/index.ts @@ -182,6 +182,7 @@ export interface Course { is_published?: boolean; progress_rate?: number; total_lessons?: number; + total_students?: number; attendance: { student_id: string; lesson_id: string; diff --git a/supabase/migrations/20231207061507_update_get_courses.sql b/supabase/migrations/20231207061507_update_get_courses.sql new file mode 100644 index 00000000..da4d0a43 --- /dev/null +++ b/supabase/migrations/20231207061507_update_get_courses.sql @@ -0,0 +1,22 @@ + +drop function if exists "public"."get_courses"(org_id_arg uuid, profile_id_arg uuid); + +set check_function_bodies = off; + +CREATE OR REPLACE FUNCTION public.get_courses(org_id_arg uuid, profile_id_arg uuid) + RETURNS TABLE(id uuid, org_id uuid, title character varying, slug character varying, description character varying, logo text, banner_image text, cost bigint, currency character varying, is_published boolean, profile_id uuid, role_id bigint, total_lessons bigint, total_students bigint, progress_rate bigint) + LANGUAGE plpgsql +AS $function$ +BEGIN + Return query + select course.id, organization.id AS org_id, course.title, course.slug, course.description, course.logo, course.banner_image, course.cost, course.currency, course.is_published, groupmember.profile_id, groupmember.role_id, (select COUNT(*) from lesson as l where l.course_id = course.id) AS total_lessons, (select COUNT(*) from groupmember as gm where gm.group_id = course.group_id AND gm.role_id = 3) as total_students, (select COUNT(*) from lesson_completion as lc join lesson as l on l.id = lc.lesson_id where l.course_id = course.id and lc.is_complete = true and lc.profile_id = profile_id_arg) AS progress_rate + from course + join "group" on "group".id = course.group_id + join groupmember on groupmember.group_id = course.group_id + join organization on organization.id = "group".organization_id + where course.status = 'ACTIVE' AND organization.id = org_id_arg + -- GROUP BY course.id, groupmember.profile_id + ORDER BY course.created_at DESC; +END; +$function$ +;