diff --git a/src/dinosaurwet/dinosaurwet.controller.ts b/src/dinosaurwet/dinosaurwet.controller.ts index f000df9..c4556e7 100644 --- a/src/dinosaurwet/dinosaurwet.controller.ts +++ b/src/dinosaurwet/dinosaurwet.controller.ts @@ -1,6 +1,6 @@ import { Controller, Get, Res } from '@nestjs/common'; import { Response } from 'express'; -import { identity } from 'ramda'; +import { identity, prop } from 'ramda'; import * as xml from 'xml'; const episodeFiles: [number, string][] = [ @@ -54,7 +54,7 @@ const episodes: Episode[] = episodeFiles.map((file, i) => { const buildFeeds = ( episodes: Episode[], - dateFn: (date: Date) => Date = identity, + pubDateFn: (index: number) => Date = () => startDate, ) => { const feedObject = { rss: [ @@ -86,24 +86,29 @@ const buildFeeds = ( 'A recreation of Dinosaur Wet as an RSS feed for listeners-with-licenses enjoyment.', }, { language: 'en-US' }, - ...episodes.map(({ title, url, length }) => ({ - item: [ - { title }, - { guid: url }, - { pubDate: startDate.toUTCString() }, - { - enclosure: [ - { - _attr: { - url, - type: 'audio/mpeg', - length, + ...episodes + .filter( + (episode: Episode, index: number) => + pubDateFn(index) <= new Date(), + ) + .map(({ title, url, length, fakeReleaseDate }, index) => ({ + item: [ + { title }, + { guid: url }, + { pubDate: pubDateFn(index).toUTCString() }, + { + enclosure: [ + { + _attr: { + url, + type: 'audio/mpeg', + length, + }, }, - }, - ], - }, - ], - })), + ], + }, + ], + })), ], }, ], @@ -121,4 +126,26 @@ export class DinosaurwetController { const feed = buildFeeds(episodes); return response.send(feed); } + + @Get('daily') + getDaily(@Res() response: Response) { + response.header('Content-Type', 'application/xml'); + const feed = buildFeeds( + episodes, + (index: number) => + new Date(new Date(startDate).setDate(startDate.getDate() + index)), + ); + return response.send(feed); + } + + @Get('weekly') + getWeekly(@Res() response: Response) { + response.header('Content-Type', 'application/xml'); + const feed = buildFeeds( + episodes, + (index: number) => + new Date(new Date(startDate).setDate(startDate.getDate() + index * 7)), + ); + return response.send(feed); + } }