github-actions[bot] commited on
Commit
387da57
·
1 Parent(s): 9a99e04

Deploy Backend from GitHub Actions Commit: d32937e9d6f18f295e6153d1959d2fa8045fc6e7

Browse files
src/courses/courses.service.ts CHANGED
@@ -795,6 +795,8 @@ export class CoursesService {
795
  currentComponentIndex?: number,
796
  completedComponentIds?: string[],
797
  componentResult?: any,
 
 
798
  ) {
799
  const existing = await this.prisma.progress.findUnique({
800
  where: { userId_nodeId: { userId, nodeId } },
@@ -804,32 +806,41 @@ export class CoursesService {
804
  },
805
  });
806
 
807
- const previousResults = Array.isArray(existing?.componentResults)
808
- ? (existing?.componentResults as any[])
809
- : [];
810
- const nextResults = componentResult
811
- ? [
812
- ...previousResults.filter(
813
- (result) => result.componentId !== componentResult.componentId,
814
- ),
815
- {
816
- ...componentResult,
817
- completedAt:
818
- componentResult.completedAt || new Date().toISOString(),
819
- },
820
- ]
821
- : previousResults;
 
 
 
 
 
822
 
823
  const updateData: any = {
824
- status: existing?.status === "completed" ? "completed" : "in_progress",
 
 
 
825
  };
 
826
  if (activeComponentId !== undefined)
827
  updateData.activeComponentId = activeComponentId;
828
  if (currentComponentIndex !== undefined)
829
  updateData.currentComponentIndex = currentComponentIndex;
830
  if (completedComponentIds !== undefined)
831
  updateData.completedComponentIds = completedComponentIds as any;
832
- if (componentResult !== undefined)
833
  updateData.componentResults = nextResults as any;
834
 
835
  return this.prisma.progress.upsert({
 
795
  currentComponentIndex?: number,
796
  completedComponentIds?: string[],
797
  componentResult?: any,
798
+ componentResults?: any[],
799
+ resetLessonProgress = false,
800
  ) {
801
  const existing = await this.prisma.progress.findUnique({
802
  where: { userId_nodeId: { userId, nodeId } },
 
806
  },
807
  });
808
 
809
+ const hasComponentResultsOverride = Array.isArray(componentResults);
810
+ const previousResults = hasComponentResultsOverride
811
+ ? componentResults
812
+ : Array.isArray(existing?.componentResults)
813
+ ? (existing?.componentResults as any[])
814
+ : [];
815
+ const nextResults = hasComponentResultsOverride
816
+ ? componentResults
817
+ : componentResult
818
+ ? [
819
+ ...previousResults.filter(
820
+ (result) => result.componentId !== componentResult.componentId,
821
+ ),
822
+ {
823
+ ...componentResult,
824
+ completedAt:
825
+ componentResult.completedAt || new Date().toISOString(),
826
+ },
827
+ ]
828
+ : previousResults;
829
 
830
  const updateData: any = {
831
+ status:
832
+ resetLessonProgress || existing?.status !== "completed"
833
+ ? "in_progress"
834
+ : "completed",
835
  };
836
+ if (resetLessonProgress) updateData.lessonCompleted = false;
837
  if (activeComponentId !== undefined)
838
  updateData.activeComponentId = activeComponentId;
839
  if (currentComponentIndex !== undefined)
840
  updateData.currentComponentIndex = currentComponentIndex;
841
  if (completedComponentIds !== undefined)
842
  updateData.completedComponentIds = completedComponentIds as any;
843
+ if (hasComponentResultsOverride || componentResult !== undefined)
844
  updateData.componentResults = nextResults as any;
845
 
846
  return this.prisma.progress.upsert({
src/courses/dto/update-component-progress.dto.ts CHANGED
@@ -1,4 +1,10 @@
1
- import { IsArray, IsNumber, IsOptional, IsString } from "class-validator";
 
 
 
 
 
 
2
 
3
  export class UpdateComponentProgressDto {
4
  @IsString()
@@ -15,4 +21,12 @@ export class UpdateComponentProgressDto {
15
 
16
  @IsOptional()
17
  componentResult?: any;
 
 
 
 
 
 
 
 
18
  }
 
1
+ import {
2
+ IsArray,
3
+ IsBoolean,
4
+ IsNumber,
5
+ IsOptional,
6
+ IsString,
7
+ } from "class-validator";
8
 
9
  export class UpdateComponentProgressDto {
10
  @IsString()
 
21
 
22
  @IsOptional()
23
  componentResult?: any;
24
+
25
+ @IsArray()
26
+ @IsOptional()
27
+ componentResults?: any[];
28
+
29
+ @IsBoolean()
30
+ @IsOptional()
31
+ resetLessonProgress?: boolean;
32
  }
src/courses/nodes.controller.ts CHANGED
@@ -93,6 +93,8 @@ export class NodesController {
93
  dto.currentComponentIndex,
94
  dto.completedComponentIds,
95
  dto.componentResult,
 
 
96
  );
97
  }
98
 
 
93
  dto.currentComponentIndex,
94
  dto.completedComponentIds,
95
  dto.componentResult,
96
+ dto.componentResults,
97
+ dto.resetLessonProgress,
98
  );
99
  }
100