-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathseries.ts
More file actions
27 lines (23 loc) · 988 Bytes
/
Copy pathseries.ts
File metadata and controls
27 lines (23 loc) · 988 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import { Episode, Season, SeasonAverageScore, Series, SeriesAverageScore } from '../types/series';
import { calculateAverage } from './calculateAverage';
import { isEpisodeRated } from './episode';
export const NOT_RELEASED_TEXT = 'Not yet released';
export const calculateEpisodeAverageScore = (episodes: Episode[]): number => {
const scores = episodes
.filter(isEpisodeRated)
.map((episode) => episode.imdbRating);
return scores.length ? calculateAverage(scores) : 0;
};
export const calculateSeasonAverageScore = (season: Season) => {
const averageScore = calculateEpisodeAverageScore(season.episodes);
return {
SeasonNumber: season.seasonNumber,
AverageScore: averageScore > 0 ? averageScore : NOT_RELEASED_TEXT,
} as SeasonAverageScore;
};
export const calculateSeriesAverageScore = (series: Series) => {
return {
Title: series.title,
Seasons: series.seasons.map((season) => calculateSeasonAverageScore(season)),
} as SeriesAverageScore;
};