Skip to content

Commit a616af6

Browse files
authored
Merge branch 'main' into feature/student_csv_import
2 parents 63ed1f4 + 606291e commit a616af6

4 files changed

Lines changed: 37 additions & 12 deletions

File tree

client/src/model/Grading.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ export class Grading implements Modify<IGrading, Modified> {
7272
let sum = this.additionalPoints ?? 0;
7373

7474
for (const [, doc] of this.exerciseGradings) {
75-
sum += doc.points;
75+
sum += doc.totalPoints;
7676
}
7777

7878
return sum;

server/src/database/entities/grading.entity.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,21 @@ export class ExerciseGrading {
4242
this.points = points;
4343
}
4444

45+
/**
46+
* @returns Sum of all points of all subExercises, points of this exercise grading
47+
* and the `additionalPoints` of this exercise grading.
48+
*/
49+
get totalPoints(): number {
50+
if (this.subExercisePoints.size > 0) {
51+
return (
52+
(this.additionalPoints ?? 0) +
53+
[...this.subExercisePoints.values()].reduce((sum, points) => sum + points, 0)
54+
);
55+
} else {
56+
return this.points + (this.additionalPoints ?? 0);
57+
}
58+
}
59+
4560
getGradingForSubExercise(subEx: SubExercise): number | undefined {
4661
return this.subExercisePoints.get(subEx.id);
4762
}
@@ -112,7 +127,10 @@ export class Grading {
112127
get points(): number {
113128
const additional = this.additionalPoints ?? 0;
114129

115-
return additional + this.exerciseGradings.reduce((sum, grading) => sum + grading.points, 0);
130+
return (
131+
additional +
132+
this.exerciseGradings.reduce((sum, grading) => sum + grading.totalPoints, 0)
133+
);
116134
}
117135

118136
get handIn(): HandIn {

server/src/module/markdown/markdown.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ export class MarkdownService {
259259
pointInfo.total.must += total.must;
260260
pointInfo.total.bonus += total.bonus;
261261

262-
const achieved = gradingForExercise?.points ?? 0;
262+
const achieved = gradingForExercise?.totalPoints ?? 0;
263263
const exMaxPoints = convertExercisePointInfoToString(total);
264264
const subExTable = gradingForExercise
265265
? this.generateSubExerciseTable({

server/src/module/student/grading.service.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import { EntityRepository } from '@mikro-orm/core';
22
import { EntityManager } from '@mikro-orm/mysql';
3+
import { InjectRepository } from '@mikro-orm/nestjs';
34
import { BadRequestException, forwardRef, Inject, Injectable } from '@nestjs/common';
5+
import { GradingResponseData } from 'shared/model/Gradings';
46
import { Grading } from '../../database/entities/grading.entity';
57
import { HandIn } from '../../database/entities/ratedEntity.entity';
68
import { Student } from '../../database/entities/student.entity';
9+
import { Team } from '../../database/entities/team.entity';
10+
import { GradingList, GradingListsForStudents } from '../../helpers/GradingList';
711
import { ScheinexamService } from '../scheinexam/scheinexam.service';
812
import { SheetService } from '../sheet/sheet.service';
913
import { ShortTestService } from '../short-test/short-test.service';
1014
import { GradingDTO } from './student.dto';
1115
import { StudentService } from './student.service';
12-
import { GradingList, GradingListsForStudents } from '../../helpers/GradingList';
13-
import { Team } from '../../database/entities/team.entity';
14-
import { GradingResponseData } from 'shared/model/Gradings';
15-
import { InjectRepository } from '@mikro-orm/nestjs';
1616

1717
@Injectable()
1818
export class GradingService {
@@ -194,11 +194,18 @@ export class GradingService {
194194
}
195195

196196
async findAllHandInGradingsOfTeam(team: Team, handIn: HandIn): Promise<Grading[]> {
197-
const studentIds = team.getStudents().map((s) => s.id);
198-
return this.repository.find({
199-
handInId: handIn.id,
200-
students: { $contains: studentIds },
201-
});
197+
const gradings = await Promise.all(
198+
team.getStudents().map((s) =>
199+
this.repository.find(
200+
{
201+
handInId: handIn.id,
202+
students: s,
203+
},
204+
{ populate: true }
205+
)
206+
)
207+
);
208+
return [...new Set(gradings.flat())];
202209
}
203210

204211
private async updateGradingOfStudent({

0 commit comments

Comments
 (0)