@@ -16,6 +16,9 @@ import { Project } from "../entities/project";
1616import { Criterion } from "../entities/criterion" ;
1717import { UserRole } from "../entities/user-role" ;
1818
19+ /**
20+ * A service to handle rating entities.
21+ */
1922export interface IRatingService extends IService {
2023 /**
2124 * Get the ratings for a specific project, cast by a specific user.
@@ -49,7 +52,7 @@ export interface IRatingService extends IService {
4952export const RatingServiceToken = new Token < IRatingService > ( ) ;
5053
5154/**
52- * A service to handle users .
55+ * A service to handle rating entities .
5356 */
5457@Service ( RatingServiceToken )
5558export class RatingService implements IRatingService {
@@ -63,7 +66,7 @@ export class RatingService implements IRatingService {
6366 ) { }
6467
6568 /**
66- * Sets up the user service.
69+ * Sets up the rating service.
6770 */
6871 public async bootstrap ( ) : Promise < void > {
6972 this . _ratings = this . _database . getRepository ( Rating ) ;
@@ -172,12 +175,12 @@ export class RatingService implements IRatingService {
172175 const allProjects = await this . _projects . find ( ) ;
173176 const allRatings = await this . _ratings . find ( ) ;
174177
175- const result = [ ] ;
178+ const result : ProjectRatingResultDTO [ ] = [ ] ;
176179
177180 const idToCriterion : Record < number , Criterion > = { } ;
178181
179182 for ( const project of allProjects ) {
180- const averagesPerCriterion = [ ] ;
183+ const averagesPerCriterion : { criterion : Criterion , average : number } [ ] = [ ] ;
181184
182185 // Sum up
183186 const criterionIdToSum : Record < number , number > = { } ;
@@ -200,12 +203,17 @@ export class RatingService implements IRatingService {
200203 }
201204
202205 // Calculate average
203- for ( const criterionId in criterionIdToSum ) {
204- const average =
205- criterionIdToSum [ criterionId ] / criterionIdToCount [ criterionId ] ;
206+ Object . keys ( criterionIdToSum ) . map ( Number ) . forEach ( criterionId => {
207+ const count = criterionIdToCount [ criterionId ]
208+ if ( count === 0 ) {
209+ return
210+ }
211+
212+ const sum = criterionIdToSum [ criterionId ]
213+ const average = sum / count ;
206214 const criterion = idToCriterion [ criterionId ] ;
207215 averagesPerCriterion . push ( { criterion, average } ) ;
208- }
216+ } ) ;
209217
210218 result . push ( {
211219 project,
0 commit comments