/** * article service */ import { factories } from '@strapi/strapi'; import { parseISO, getYear } from 'date-fns'; export default factories.createCoreService('api::article.article', ({strapi}) => ({ async getDistinctYears() { const articles = await strapi.query("api::article.article").findMany({ select: ['date'], }); const years = articles .map(article => getYear(parseISO(article.date + ""))) .filter((year, index, self) => self.indexOf(year) === index) .sort((a, b) => b - a); return years; }, async findByYear(year:string, page = 1, pageSize = 10) { const startOfYear = new Date(`${year}-01-01T00:00:00.000Z`); const endOfYear = new Date(`${year}-12-31T23:59:59.999Z`); const articles = await strapi.query("api::article.article").findMany({ filters: { date: { $gte: startOfYear, $lte: endOfYear, }, }, limit: pageSize, offset: (page - 1) * pageSize, orderBy: { date: 'desc' }, }); const totalArticles = await strapi.query("api::article.article").count({ filters: { date: { $gte: startOfYear, $lte: endOfYear, }, }, }); return { data: articles, meta: { pagination: { page, pageSize, pageCount: Math.ceil(totalArticles / pageSize), total: totalArticles, }, }, }; }, }));