ff-webpage-cms/src/api/article/services/article.ts

60 lines
1.4 KiB
TypeScript
Raw Normal View History

2024-10-30 14:50:13 +01:00
/**
* article service
*/
import { factories } from '@strapi/strapi';
import { parseISO, getYear } from 'date-fns';
2024-10-30 14:50:13 +01:00
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,
},
},
};
},
}));