* refactor: move zod import from validation package to zod * refactor: move missing zod imports
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { z } from "zod";
|
|
|
|
import { rssFeedsRequestHandler } from "@homarr/request-handler/rss-feeds";
|
|
|
|
import { createTRPCRouter, publicProcedure } from "../../trpc";
|
|
|
|
export const rssFeedRouter = createTRPCRouter({
|
|
getFeeds: publicProcedure
|
|
.input(
|
|
z.object({
|
|
urls: z.array(z.string()),
|
|
maximumAmountPosts: z.number(),
|
|
}),
|
|
)
|
|
.query(async ({ input }) => {
|
|
const rssFeeds = await Promise.all(
|
|
input.urls.map(async (url) => {
|
|
const innerHandler = rssFeedsRequestHandler.handler({
|
|
url,
|
|
count: input.maximumAmountPosts,
|
|
});
|
|
return await innerHandler.getCachedOrUpdatedDataAsync({
|
|
forceUpdate: false,
|
|
});
|
|
}),
|
|
);
|
|
|
|
return rssFeeds
|
|
.flatMap((rssFeed) => rssFeed.data.entries)
|
|
.slice(0, input.maximumAmountPosts)
|
|
.sort((entryA, entryB) => {
|
|
return entryA.published && entryB.published
|
|
? new Date(entryB.published).getTime() - new Date(entryA.published).getTime()
|
|
: 0;
|
|
});
|
|
}),
|
|
});
|