import { getArticles, getTotalArticles } from '@services/graphql/articles'; import { Article } from '@ts/types/app'; import { settings } from '@utils/config'; import { Feed } from 'feed'; /** * Retrieve the data for all the articles. * * @returns {Promise} - All the articles. */ const getAllArticles = async (): Promise => { const totalArticles = await getTotalArticles(); const { articles } = await getArticles({ first: totalArticles }); return articles; }; /** * Generate a new feed. * * @returns {Promise} - The feed. */ export const generateFeed = async (): Promise => { const author = { name: settings.name, email: process.env.APP_AUTHOR_EMAIL, link: settings.url, }; const copyright = `${settings.name} CC BY SA ${settings.copyright.startYear} - ${settings.copyright.endYear}`; const title = `${settings.name} | ${settings.baseline.fr}`; const feed = new Feed({ author, copyright, description: process.env.APP_FEED_DESCRIPTION, feedLinks: { json: `${settings.url}/feed/json`, atom: `${settings.url}/feed/atom`, }, generator: 'Feed & NextJS', id: settings.url, language: settings.locales.defaultLocale, link: settings.url, title, }); const articles = await getAllArticles(); articles.forEach((article) => { feed.addItem({ content: article.intro, date: new Date(article.meta!.dates.publication), description: article.intro, id: `${article.id}`, link: `${settings.url}/article/${article.slug}`, title: article.title, }); }); return feed; };