const { DataTypes, Model } = require('sequelize') module.exports = (sequelize) => { class Podcast extends Model { static getOldPodcast(libraryItemExpanded) { const podcastExpanded = libraryItemExpanded.media const podcastEpisodes = podcastExpanded.podcastEpisodes.map(ep => ep.getOldPodcastEpisode(libraryItemExpanded.id)).sort((a, b) => a.index - b.index) return { id: podcastExpanded.id, libraryItemId: libraryItemExpanded.id, metadata: { title: podcastExpanded.title, author: podcastExpanded.author, description: podcastExpanded.description, releaseDate: podcastExpanded.releaseDate, genres: podcastExpanded.genres, feedUrl: podcastExpanded.feedURL, imageUrl: podcastExpanded.imageURL, itunesPageUrl: podcastExpanded.itunesPageURL, itunesId: podcastExpanded.itunesId, itunesArtistId: podcastExpanded.itunesArtistId, explicit: podcastExpanded.explicit, language: podcastExpanded.language, type: podcastExpanded.podcastType }, coverPath: podcastExpanded.coverPath, tags: podcastExpanded.tags, episodes: podcastEpisodes, autoDownloadEpisodes: podcastExpanded.autoDownloadEpisodes, autoDownloadSchedule: podcastExpanded.autoDownloadSchedule, lastEpisodeCheck: podcastExpanded.lastEpisodeCheck?.valueOf() || null, maxEpisodesToKeep: podcastExpanded.maxEpisodesToKeep, maxNewEpisodesToDownload: podcastExpanded.maxNewEpisodesToDownload } } static getFromOld(oldPodcast) { const oldPodcastMetadata = oldPodcast.metadata return { id: oldPodcast.id, title: oldPodcastMetadata.title, author: oldPodcastMetadata.author, releaseDate: oldPodcastMetadata.releaseDate, feedURL: oldPodcastMetadata.feedUrl, imageURL: oldPodcastMetadata.imageUrl, description: oldPodcastMetadata.description, itunesPageURL: oldPodcastMetadata.itunesPageUrl, itunesId: oldPodcastMetadata.itunesId, itunesArtistId: oldPodcastMetadata.itunesArtistId, language: oldPodcastMetadata.language, podcastType: oldPodcastMetadata.type, explicit: !!oldPodcastMetadata.explicit, autoDownloadEpisodes: !!oldPodcast.autoDownloadEpisodes, autoDownloadSchedule: oldPodcast.autoDownloadSchedule, lastEpisodeCheck: oldPodcast.lastEpisodeCheck, maxEpisodesToKeep: oldPodcast.maxEpisodesToKeep, maxNewEpisodesToDownload: oldPodcast.maxNewEpisodesToDownload, coverPath: oldPodcast.coverPath, tags: oldPodcast.tags, genres: oldPodcastMetadata.genres } } } Podcast.init({ id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true }, title: DataTypes.STRING, author: DataTypes.STRING, releaseDate: DataTypes.STRING, feedURL: DataTypes.STRING, imageURL: DataTypes.STRING, description: DataTypes.TEXT, itunesPageURL: DataTypes.STRING, itunesId: DataTypes.STRING, itunesArtistId: DataTypes.STRING, language: DataTypes.STRING, podcastType: DataTypes.STRING, explicit: DataTypes.BOOLEAN, autoDownloadEpisodes: DataTypes.BOOLEAN, autoDownloadSchedule: DataTypes.STRING, lastEpisodeCheck: DataTypes.DATE, maxEpisodesToKeep: DataTypes.INTEGER, maxNewEpisodesToDownload: DataTypes.INTEGER, coverPath: DataTypes.STRING, tags: DataTypes.JSON, genres: DataTypes.JSON }, { sequelize, modelName: 'podcast' }) return Podcast }