rating-orama/core/models/tvshow.go
2023-04-09 06:45:27 +02:00

69 lines
1.9 KiB
Go

package models
import (
"strconv"
"time"
)
type Popularity struct {
ShowID string `json:"show_id"`
TimesViewed int `json:"times_viewed"`
}
type TvShow struct {
ShowID string `json:"show_id"`
Title string `json:"title"`
Runtime int `json:"runtime"`
Votes int `json:"votes"`
AvgRating float64 `json:"avg_rating"`
MedianRating float64 `json:"median_rating"`
Seasons []Season `json:"seasons"`
}
type Season struct {
Number int `json:"number"`
AvgRating float64 `json:"avg_rating"`
MedianRating float64 `json:"median_rating"`
Votes int `json:"votes"`
Episodes []Episode `json:"episodes"`
}
type Episode struct {
Number int `json:"number"`
EpisodeID string `json:"episode_id"`
Title string `json:"title"`
Aired time.Time `json:"aired"`
AvgRating float64 `json:"avg_rating"`
Votes int `json:"votes"`
}
func (tvShow *TvShow) TvShowBuilder(tvShowDTO TvShowDTO) {
tvShow.ShowID = tvShowDTO.ShowID
tvShow.Title = tvShowDTO.Title
tvShow.Runtime, _ = strconv.Atoi(tvShowDTO.Runtime)
lastSeasonNumber := tvShowDTO.Episodes[len(tvShowDTO.Episodes)-1].SeasonID
if lastSeasonNumber == -1 {
lastSeasonNumber = tvShowDTO.Episodes[len(tvShowDTO.Episodes)-2].SeasonID
}
seasons := make([]Season, lastSeasonNumber)
for currentSeason := 1; currentSeason <= lastSeasonNumber; currentSeason++ {
for _, episode := range tvShowDTO.Episodes {
if episode.SeasonID == currentSeason {
seasons[currentSeason-1].Number = currentSeason
seasons[currentSeason-1].Episodes = append(seasons[currentSeason-1].Episodes, Episode{
Number: episode.Number,
EpisodeID: episode.EpisodeID,
Title: episode.Title,
Aired: episode.Aired.Time,
AvgRating: episode.AvgRating,
Votes: episode.Votes,
})
}
}
}
tvShow.Seasons = seasons
}