Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ import { Observable } from 'rxjs';

@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {
constructor(private reflector: Reflector) {
constructor(private readonly reflector: Reflector) {
super();
}

canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
const isPublic = this.reflector.getAllAndOverride('isPublic', [
const isPublic = this.reflector.getAllAndOverride<boolean>('isPublic', [
context.getHandler(),
context.getClass(),
]);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,51 +25,7 @@ import { LessonProgressCheckDto } from './dto/lesson-progress-check.dto';
export class LessonProgressController {
constructor(private readonly lessonProgressService: LessonProgressService) {}

@Post('complete/:lessonId/:userId?')
async markLessonAsCompleted(
@Body() dto: { courseId: number; isCompleted: boolean },
@CurrentUser() user: UserEntity,
@Param() param: LessonProgressCompleteDto,
) {
const currentUser = param.userId ? param.userId : user.id;
const response = await this.lessonProgressService.markLessonAsCompleted(
currentUser,
+param.lessonId,
dto.courseId,
);
if (dto.isCompleted) {
return new SuccessResponse(en.successfullyCompletedLesson, {
isRead: !!response,
completed_date: response.completed_date,
});
} else {
return new SuccessResponse(en.lessonMarkedUnRead);
}
}

@Post('complete-public/:lessonId/:userId')
@Public()
async markLessonAsCompletedPublic(
@Body() dto: { courseId: number; isCompleted: boolean },
@Param() param: LessonProgressCompleteDto,
) {
const currentUser = param.userId;
const response = await this.lessonProgressService.markLessonAsCompleted(
currentUser,
+param.lessonId,
dto.courseId,
);
if (dto.isCompleted) {
return new SuccessResponse(en.successfullyCompletedLesson, {
isRead: !!response,
completed_date: response.completed_date,
});
} else {
return new SuccessResponse(en.lessonMarkedUnRead);
}
}

@Get(':courseId/progress')
@Get('progress/:courseId')
async getLessonProgress(@Param('courseId') courseId: number, @Request() req) {
const data = await this.lessonProgressService.getLessonProgressArray(
req.user.id,
Expand All @@ -78,18 +34,28 @@ export class LessonProgressController {
return new SuccessResponse(en.courseCompletedLessons, data);
}

@Get('leaderboard/list')
async getLeaderboardDataTable(
@Query() paginationDto: BasePaginationDto,
): Promise<SuccessResponse> {
const leaderboardData = await this.lessonProgressService.getLeaderboardData(
Number(paginationDto.page),
Number(paginationDto.limit),
);
return new SuccessResponse(en.successLeaderboardData, leaderboardData);
}

@ApiParam({
name: 'userID',
required: false,
type: 'string',
description: 'user ID',
})
@Get('/user-progress/:userID?')
@Get('/user-progress{/:userID}')
async getAllUserProgress(
@CurrentUser() curentUser,
@Param('userID') userID?: string,
) {
console.log(userID);
const data =
await this.lessonProgressService.getUserLessonProgressViaCourse(
!isNaN(+userID) ? +userID : curentUser.id,
Expand All @@ -111,9 +77,9 @@ export class LessonProgressController {
return new SuccessResponse(en.allDailyLessons, data);
}

@Get('check/:lessonId/:userId?')
@Get('check/:lessonId{/:userId}')
async checkIsRead(
@Param() param: LessonProgressCheckDto,
@Param() param: Partial<LessonProgressCheckDto>,
@CurrentUser() user: UserEntity,
) {
const currentUserViewed = param.userId ? param.userId : user.id;
Expand All @@ -126,7 +92,7 @@ export class LessonProgressController {

@Get('check-public/:lessonId/:userId')
@Public()
async checkIsReadPublic(@Param() param: LessonProgressCheckDto) {
async checkIsReadPublic(@Param() param: Partial<LessonProgressCheckDto>) {
const currentUserViewed = param.userId;
const data = await this.lessonProgressService.checkLessonRead(
currentUserViewed,
Expand All @@ -135,14 +101,47 @@ export class LessonProgressController {
return new SuccessResponse(en.lessonStatus, data);
}

@Get('leaderboard/list')
async getLeaderboardDataTable(
@Query() paginationDto: BasePaginationDto,
): Promise<SuccessResponse> {
const leaderboardData = await this.lessonProgressService.getLeaderboardData(
Number(paginationDto.page),
Number(paginationDto.limit),
@Post('complete/:lessonId{/:userId}')
async markLessonAsCompleted(
@Body() dto: { courseId: number; isCompleted: boolean },
@CurrentUser() user: UserEntity,
@Param() param: LessonProgressCompleteDto,
) {
const currentUser = param.userId ? param.userId : user.id;
const response = await this.lessonProgressService.markLessonAsCompleted(
currentUser,
+param.lessonId,
dto.courseId,
);
return new SuccessResponse(en.successLeaderboardData, leaderboardData);
if (dto.isCompleted) {
return new SuccessResponse(en.successfullyCompletedLesson, {
isRead: !!response,
completed_date: response.completed_date,
});
} else {
return new SuccessResponse(en.lessonMarkedUnRead);
}
}

@Post('complete-public/:lessonId/:userId')
@Public()
async markLessonAsCompletedPublic(
@Body() dto: { courseId: number; isCompleted: boolean },
@Param() param: LessonProgressCompleteDto,
) {
const currentUser = param.userId;
const response = await this.lessonProgressService.markLessonAsCompleted(
currentUser,
+param.lessonId,
dto.courseId,
);
if (dto.isCompleted) {
return new SuccessResponse(en.successfullyCompletedLesson, {
isRead: !!response,
completed_date: response.completed_date,
});
} else {
return new SuccessResponse(en.lessonMarkedUnRead);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ export class LessonService extends PaginationService<LessonEntity> {
const queryBuilder = this.repository
.createQueryBuilder('lesson')
.leftJoinAndSelect('lesson.course', 'course')
.innerJoinAndSelect('lesson.created_by_user', 'created_by_user')
.leftJoinAndSelect('lesson.created_by_user', 'created_by_user')
.leftJoin('course.roadmaps', 'roadmaps')
.innerJoin('roadmaps.users', 'users')
.where('lesson.id = :id', { id })
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ApiProperty } from '@nestjs/swagger';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';
import { IsNotEmpty, IsOptional, IsString } from 'class-validator';

export class UserLessonParamDto {
Expand All @@ -12,7 +12,7 @@ export class UserLessonParamDto {
@IsString()
id: string;

@ApiProperty({
@ApiPropertyOptional({
name: 'userId',
required: false,
type: Number, // Aligning with the actual type in the route
Expand Down
Loading