Skip to content
Open
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 @@ -6,9 +6,16 @@ import {
IsUUID,
IsArray,
IsOptional,
IsEnum,
} from 'class-validator';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';

export enum EvaluationType {
AI = 'AI',
ONLINE = 'Online',
MANUAL = 'Manual',
}

export class CreateAssessmentTrackingDto {
@Expose()
assessmentTrackingId: string;
Expand Down Expand Up @@ -114,8 +121,14 @@ export class CreateAssessmentTrackingDto {
@IsOptional()
submitedBy: string;

@IsString()
@ApiPropertyOptional({
enum: EvaluationType,
description: 'Evaluation type: AI, Online, or Manual',
})
@IsOptional()
@IsEnum(EvaluationType, {
message: 'evaluatedBy must be one of: AI, Online, Manual',
})
evaluatedBy?: EvaluationType;

constructor(obj?: Partial<CreateAssessmentTrackingDto>) {
Expand All @@ -124,8 +137,3 @@ export class CreateAssessmentTrackingDto {
}
}
}
export enum EvaluationType {
AI = 'AI',
ONLINE = 'Online',
MANUAL = 'Manual',
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@ import {
IsUUID,
IsObject,
IsOptional,
IsEnum,
ValidationOptions,
registerDecorator,
ValidationArguments,
} from "class-validator";
import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";
import { EvaluationType } from "./tracking-assessment-create-dto";

export class setFilters {

Expand Down Expand Up @@ -64,6 +66,17 @@ export class setFilters {
@IsOptional()
@IsNotEmpty()
contentId: string;

@ApiPropertyOptional({
enum: EvaluationType,
description: "Evaluation type: AI, Online, or Manual",
})
@Expose()
@IsOptional()
@IsEnum(EvaluationType, {
message: 'evaluatedBy must be one of: AI, Online, Manual',
})
evaluatedBy?: EvaluationType;
}

export class paginationDto {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,11 @@ export class AssessmentTracking {
showFlag: boolean;

@IsOptional()
@Column()
@Column({
type: 'enum',
enum: EvaluationType,
nullable: true,
})
@IsEnum(EvaluationType, {
message: 'evaluatedBy must be one of: AI, Online, Manual',
})
Expand Down
63 changes: 40 additions & 23 deletions src/modules/tracking_assessment/tracking_assessment.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -510,7 +510,7 @@ export class TrackingAssessmentService {

let output_result = [];
const result = await this.dataSource.query(
`SELECT "assessmentTrackingId","userId","courseId","contentId","attemptId","createdOn","lastAttemptedOn","totalMaxScore","totalScore","updatedOn","timeSpent","unitId","tenantId" FROM assessment_tracking WHERE "userId"=$1 and "contentId"=$2 and "courseId"=$3 and "unitId"=$4 and "tenantId"=$5`,
`SELECT "assessmentTrackingId","userId","courseId","contentId","attemptId","createdOn","lastAttemptedOn","totalMaxScore","totalScore","updatedOn","timeSpent","unitId","tenantId","evaluatedBy" FROM assessment_tracking WHERE "userId"=$1 and "contentId"=$2 and "courseId"=$3 and "unitId"=$4 and "tenantId"=$5`,
[
searchFilter?.userId,
searchFilter?.contentId,
Expand Down Expand Up @@ -585,7 +585,7 @@ export class TrackingAssessmentService {
conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';

const result = await this.dataSource.query(
`SELECT "assessmentTrackingId", "userId", "courseId", "contentId", "attemptId", "createdOn", "lastAttemptedOn", "totalMaxScore", "totalScore", "updatedOn", "timeSpent", "unitId"
`SELECT "assessmentTrackingId", "userId", "courseId", "contentId", "attemptId", "createdOn", "lastAttemptedOn", "totalMaxScore", "totalScore", "updatedOn", "timeSpent", "unitId", "tenantId", "evaluatedBy"
FROM assessment_tracking ${whereClause}`,
params,
);
Expand Down Expand Up @@ -657,31 +657,51 @@ export class TrackingAssessmentService {
contentId_text = `${contentId_text},'${contentId}'`;
}
}
//courseId

//courseId - optional
let courseIdArray = searchFilter?.courseId;
let courseId_text = '';
for (let i = 0; i < courseIdArray.length; i++) {
let courseId = courseIdArray[i];
if (i == 0) {
courseId_text = `${courseId_text}'${courseId}'`;
} else {
courseId_text = `${courseId_text},'${courseId}'`;
let hasCourseId = courseIdArray && courseIdArray.length > 0;
if (hasCourseId) {
for (let i = 0; i < courseIdArray.length; i++) {
let courseId = courseIdArray[i];
if (i == 0) {
courseId_text = `${courseId_text}'${courseId}'`;
} else {
courseId_text = `${courseId_text},'${courseId}'`;
}
}
}
//unitId

//unitId - optional
let unitIdArray = searchFilter?.unitId;
let unitId_text = '';
for (let i = 0; i < unitIdArray.length; i++) {
let unitId = unitIdArray[i];
if (i == 0) {
unitId_text = `${unitId_text}'${unitId}'`;
} else {
unitId_text = `${unitId_text},'${unitId}'`;
let hasUnitId = unitIdArray && unitIdArray.length > 0;
if (hasUnitId) {
for (let i = 0; i < unitIdArray.length; i++) {
let unitId = unitIdArray[i];
if (i == 0) {
unitId_text = `${unitId_text}'${unitId}'`;
} else {
unitId_text = `${unitId_text},'${unitId}'`;
}
}
}

let userIdArray = searchFilter?.userId;
for (let i = 0; i < userIdArray.length; i++) {
let userId = userIdArray[i];

// Build dynamic WHERE clause
let whereConditions = `"evaluatedBy" IS DISTINCT FROM 'AI' AND "userId" = $1`;
if (hasCourseId) {
whereConditions += ` AND "courseId" IN (${courseId_text})`;
}
if (hasUnitId) {
whereConditions += ` AND "unitId" IN (${unitId_text})`;
}
whereConditions += ` AND "contentId" IN (${contentId_text}) AND "tenantId" = $2`;

const result = await this.dataSource.query(
`WITH latest_assessment AS (
SELECT
Expand All @@ -698,16 +718,12 @@ export class TrackingAssessmentService {
"timeSpent",
"unitId",
"tenantId",
"evaluatedBy",
ROW_NUMBER() OVER (PARTITION BY "userId", "courseId", "unitId", "contentId" ORDER BY CAST("totalScore" AS INTEGER) DESC) as row_num
FROM
assessment_tracking
WHERE
"evaluatedBy" IS DISTINCT FROM 'AI' AND
"userId" = $1
AND "courseId" IN (${courseId_text})
AND "unitId" IN (${unitId_text})
AND "contentId" IN (${contentId_text})
AND "tenantId" = $2
${whereConditions}
)
SELECT
"assessmentTrackingId",
Expand All @@ -722,7 +738,8 @@ export class TrackingAssessmentService {
"updatedOn",
"timeSpent",
"unitId",
"tenantId"
"tenantId",
"evaluatedBy"
FROM
latest_assessment
WHERE
Expand Down