59 lines
1.4 KiB
TypeScript
59 lines
1.4 KiB
TypeScript
/**
|
|
* 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,
|
|
},
|
|
},
|
|
};
|
|
},
|
|
}));
|