extend collection requests & hard-coded-public routes
This commit is contained in:
parent
bd52f5c996
commit
28afdfd83e
21 changed files with 387 additions and 23 deletions
|
@ -4,4 +4,25 @@
|
|||
|
||||
import { factories } from '@strapi/strapi'
|
||||
|
||||
export default factories.createCoreController('api::article.article');
|
||||
export default factories.createCoreController('api::article.article', ({ strapi }) => ({
|
||||
async distinctYears(ctx) {
|
||||
try {
|
||||
const years = await strapi.service('api::article.article').getDistinctYears();
|
||||
ctx.body = years;
|
||||
} catch (err) {
|
||||
ctx.throw(500, err);
|
||||
}
|
||||
},
|
||||
|
||||
async findByYear(ctx) {
|
||||
try {
|
||||
const { year } = ctx.params;
|
||||
const { page = '1', pageSize = '10' } = ctx.query as { page?: string, pageSize?: string };
|
||||
|
||||
const result = await strapi.service('api::article.article').findByYear(year, parseInt(page), parseInt(pageSize));
|
||||
ctx.body = result;
|
||||
} catch (err) {
|
||||
ctx.throw(500, err);
|
||||
}
|
||||
},
|
||||
}));
|
||||
|
|
|
@ -4,4 +4,13 @@
|
|||
|
||||
import { factories } from '@strapi/strapi';
|
||||
|
||||
export default factories.createCoreRouter('api::article.article');
|
||||
export default factories.createCoreRouter('api::article.article', {
|
||||
config: {
|
||||
find: {
|
||||
auth: false
|
||||
},
|
||||
findOne: {
|
||||
auth: false
|
||||
},
|
||||
},
|
||||
});
|
||||
|
|
20
src/api/article/routes/extend-article.ts
Normal file
20
src/api/article/routes/extend-article.ts
Normal file
|
@ -0,0 +1,20 @@
|
|||
export default {
|
||||
routes: [
|
||||
{
|
||||
method: 'GET',
|
||||
path: '/custom/articles/distinct-years',
|
||||
handler: 'api::article.article.distinctYears',
|
||||
config: {
|
||||
auth: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
method: 'GET',
|
||||
path: '/custom/articles/year/:year',
|
||||
handler: 'api::article.article.findByYear',
|
||||
config: {
|
||||
auth: false,
|
||||
},
|
||||
},
|
||||
]
|
||||
};
|
|
@ -3,5 +3,57 @@
|
|||
*/
|
||||
|
||||
import { factories } from '@strapi/strapi';
|
||||
import { parseISO, getYear } from 'date-fns';
|
||||
|
||||
export default factories.createCoreService('api::article.article');
|
||||
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,
|
||||
},
|
||||
},
|
||||
};
|
||||
},
|
||||
}));
|
||||
|
|
|
@ -20,7 +20,12 @@
|
|||
"type": "uid",
|
||||
"required": true
|
||||
},
|
||||
"imageItem": {
|
||||
"image_item": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"required": true
|
||||
},
|
||||
"date_list": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"required": true
|
||||
|
|
|
@ -4,4 +4,13 @@
|
|||
|
||||
import { factories } from '@strapi/strapi';
|
||||
|
||||
export default factories.createCoreRouter('api::collection-lookup.collection-lookup');
|
||||
export default factories.createCoreRouter('api::collection-lookup.collection-lookup', {
|
||||
config: {
|
||||
find: {
|
||||
auth: false
|
||||
},
|
||||
findOne: {
|
||||
auth: false
|
||||
},
|
||||
}
|
||||
});
|
||||
|
|
|
@ -4,4 +4,25 @@
|
|||
|
||||
import { factories } from '@strapi/strapi'
|
||||
|
||||
export default factories.createCoreController('api::event.event');
|
||||
export default factories.createCoreController('api::event.event', ({ strapi }) => ({
|
||||
async distinctYears(ctx) {
|
||||
try {
|
||||
const years = await strapi.service('api::event.event').getDistinctYears();
|
||||
ctx.body = years;
|
||||
} catch (err) {
|
||||
ctx.throw(500, err);
|
||||
}
|
||||
},
|
||||
|
||||
async findByYear(ctx) {
|
||||
try {
|
||||
const { year } = ctx.params;
|
||||
const { page = '1', pageSize = '10' } = ctx.query as { page?: string, pageSize?: string };
|
||||
|
||||
const result = await strapi.service('api::event.event').findByYear(year, parseInt(page), parseInt(pageSize));
|
||||
ctx.body = result;
|
||||
} catch (err) {
|
||||
ctx.throw(500, err);
|
||||
}
|
||||
},
|
||||
}));
|
||||
|
|
|
@ -4,4 +4,13 @@
|
|||
|
||||
import { factories } from '@strapi/strapi';
|
||||
|
||||
export default factories.createCoreRouter('api::event.event');
|
||||
export default factories.createCoreRouter('api::event.event', {
|
||||
config: {
|
||||
find: {
|
||||
auth: false
|
||||
},
|
||||
findOne: {
|
||||
auth: false
|
||||
},
|
||||
}
|
||||
});
|
||||
|
|
20
src/api/event/routes/extend-event.ts
Normal file
20
src/api/event/routes/extend-event.ts
Normal file
|
@ -0,0 +1,20 @@
|
|||
export default {
|
||||
routes: [
|
||||
{
|
||||
method: 'GET',
|
||||
path: '/custom/events/distinct-years',
|
||||
handler: 'api::event.event.distinctYears',
|
||||
config: {
|
||||
auth: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
method: 'GET',
|
||||
path: '/custom/events/year/:year',
|
||||
handler: 'api::event.event.findByYear',
|
||||
config: {
|
||||
auth: false,
|
||||
},
|
||||
},
|
||||
]
|
||||
};
|
|
@ -3,5 +3,57 @@
|
|||
*/
|
||||
|
||||
import { factories } from '@strapi/strapi';
|
||||
import { parseISO, getYear } from 'date-fns';
|
||||
|
||||
export default factories.createCoreService('api::event.event');
|
||||
export default factories.createCoreService('api::event.event', ({strapi}) => ({
|
||||
async getDistinctYears() {
|
||||
const articles = await strapi.query("api::event.event").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::event.event").findMany({
|
||||
filters: {
|
||||
date: {
|
||||
$gte: startOfYear,
|
||||
$lte: endOfYear,
|
||||
},
|
||||
},
|
||||
limit: pageSize,
|
||||
offset: (page - 1) * pageSize,
|
||||
orderBy: { date: 'desc' },
|
||||
});
|
||||
|
||||
const totalArticles = await strapi.query("api::event.event").count({
|
||||
filters: {
|
||||
date: {
|
||||
$gte: startOfYear,
|
||||
$lte: endOfYear,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
data: articles,
|
||||
meta: {
|
||||
pagination: {
|
||||
page,
|
||||
pageSize,
|
||||
pageCount: Math.ceil(totalArticles / pageSize),
|
||||
total: totalArticles,
|
||||
},
|
||||
},
|
||||
};
|
||||
},
|
||||
}));
|
||||
|
|
|
@ -4,4 +4,10 @@
|
|||
|
||||
import { factories } from '@strapi/strapi';
|
||||
|
||||
export default factories.createCoreRouter('api::global.global');
|
||||
export default factories.createCoreRouter('api::global.global', {
|
||||
config: {
|
||||
find: {
|
||||
auth: false
|
||||
},
|
||||
}
|
||||
});
|
||||
|
|
|
@ -4,4 +4,10 @@
|
|||
|
||||
import { factories } from '@strapi/strapi';
|
||||
|
||||
export default factories.createCoreRouter('api::homepage.homepage');
|
||||
export default factories.createCoreRouter('api::homepage.homepage', {
|
||||
config: {
|
||||
find: {
|
||||
auth: false
|
||||
},
|
||||
}
|
||||
});
|
||||
|
|
|
@ -4,4 +4,25 @@
|
|||
|
||||
import { factories } from '@strapi/strapi'
|
||||
|
||||
export default factories.createCoreController('api::operation.operation');
|
||||
export default factories.createCoreController('api::operation.operation', ({ strapi }) => ({
|
||||
async distinctYears(ctx) {
|
||||
try {
|
||||
const years = await strapi.service('api::operation.operation').getDistinctYears();
|
||||
ctx.body = years;
|
||||
} catch (err) {
|
||||
ctx.throw(500, err);
|
||||
}
|
||||
},
|
||||
|
||||
async findByYear(ctx) {
|
||||
try {
|
||||
const { year } = ctx.params;
|
||||
const { page = '1', pageSize = '10' } = ctx.query as { page?: string, pageSize?: string };
|
||||
|
||||
const result = await strapi.service('api::operation.operation').findByYear(year, parseInt(page), parseInt(pageSize));
|
||||
ctx.body = result;
|
||||
} catch (err) {
|
||||
ctx.throw(500, err);
|
||||
}
|
||||
},
|
||||
}));
|
||||
|
|
20
src/api/operation/routes/extend-operation.ts
Normal file
20
src/api/operation/routes/extend-operation.ts
Normal file
|
@ -0,0 +1,20 @@
|
|||
export default {
|
||||
routes: [
|
||||
{
|
||||
method: 'GET',
|
||||
path: '/custom/operations/distinct-years',
|
||||
handler: 'api::operation.operation.distinctYears',
|
||||
config: {
|
||||
auth: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
method: 'GET',
|
||||
path: '/custom/operations/year/:year',
|
||||
handler: 'api::operation.operation.findByYear',
|
||||
config: {
|
||||
auth: false,
|
||||
},
|
||||
},
|
||||
]
|
||||
};
|
|
@ -4,4 +4,13 @@
|
|||
|
||||
import { factories } from '@strapi/strapi';
|
||||
|
||||
export default factories.createCoreRouter('api::operation.operation');
|
||||
export default factories.createCoreRouter('api::operation.operation', {
|
||||
config: {
|
||||
find: {
|
||||
auth: false
|
||||
},
|
||||
findOne: {
|
||||
auth: false
|
||||
},
|
||||
}
|
||||
});
|
||||
|
|
|
@ -3,5 +3,57 @@
|
|||
*/
|
||||
|
||||
import { factories } from '@strapi/strapi';
|
||||
import { parseISO, getYear } from 'date-fns';
|
||||
|
||||
export default factories.createCoreService('api::operation.operation');
|
||||
export default factories.createCoreService('api::operation.operation', ({strapi}) => ({
|
||||
async getDistinctYears() {
|
||||
const articles = await strapi.query("api::operation.operation").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::operation.operation").findMany({
|
||||
filters: {
|
||||
date: {
|
||||
$gte: startOfYear,
|
||||
$lte: endOfYear,
|
||||
},
|
||||
},
|
||||
limit: pageSize,
|
||||
offset: (page - 1) * pageSize,
|
||||
orderBy: { date: 'desc' },
|
||||
});
|
||||
|
||||
const totalArticles = await strapi.query("api::operation.operation").count({
|
||||
filters: {
|
||||
date: {
|
||||
$gte: startOfYear,
|
||||
$lte: endOfYear,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
return {
|
||||
data: articles,
|
||||
meta: {
|
||||
pagination: {
|
||||
page,
|
||||
pageSize,
|
||||
pageCount: Math.ceil(totalArticles / pageSize),
|
||||
total: totalArticles,
|
||||
},
|
||||
},
|
||||
};
|
||||
},
|
||||
}));
|
||||
|
|
|
@ -4,4 +4,13 @@
|
|||
|
||||
import { factories } from '@strapi/strapi';
|
||||
|
||||
export default factories.createCoreRouter('api::page.page');
|
||||
export default factories.createCoreRouter('api::page.page', {
|
||||
config: {
|
||||
find: {
|
||||
auth: false
|
||||
},
|
||||
findOne: {
|
||||
auth: false
|
||||
},
|
||||
}
|
||||
});
|
||||
|
|
|
@ -4,4 +4,13 @@
|
|||
|
||||
import { factories } from '@strapi/strapi';
|
||||
|
||||
export default factories.createCoreRouter('api::vehicle.vehicle');
|
||||
export default factories.createCoreRouter('api::vehicle.vehicle', {
|
||||
config: {
|
||||
find: {
|
||||
auth: false
|
||||
},
|
||||
findOne: {
|
||||
auth: false
|
||||
},
|
||||
}
|
||||
});
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
"name": "Apache 2.0",
|
||||
"url": "https://www.apache.org/licenses/LICENSE-2.0.html"
|
||||
},
|
||||
"x-generation-date": "2024-11-03T14:29:07.198Z"
|
||||
"x-generation-date": "2024-11-04T10:41:27.532Z"
|
||||
},
|
||||
"x-strapi-config": {
|
||||
"plugins": [
|
||||
|
@ -6443,7 +6443,8 @@
|
|||
"required": [
|
||||
"reference",
|
||||
"collection",
|
||||
"imageItem"
|
||||
"image_item",
|
||||
"date_list"
|
||||
],
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
@ -6453,7 +6454,10 @@
|
|||
"collection": {
|
||||
"type": "string"
|
||||
},
|
||||
"imageItem": {
|
||||
"image_item": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"date_list": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"locale": {
|
||||
|
@ -6517,7 +6521,8 @@
|
|||
"required": [
|
||||
"reference",
|
||||
"collection",
|
||||
"imageItem"
|
||||
"image_item",
|
||||
"date_list"
|
||||
],
|
||||
"properties": {
|
||||
"id": {
|
||||
|
@ -6532,7 +6537,10 @@
|
|||
"collection": {
|
||||
"type": "string"
|
||||
},
|
||||
"imageItem": {
|
||||
"image_item": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"date_list": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"createdAt": {
|
||||
|
@ -6841,7 +6849,10 @@
|
|||
"collection": {
|
||||
"type": "string"
|
||||
},
|
||||
"imageItem": {
|
||||
"image_item": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"date_list": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"createdAt": {
|
||||
|
|
File diff suppressed because one or more lines are too long
5
types/generated/contentTypes.d.ts
vendored
5
types/generated/contentTypes.d.ts
vendored
|
@ -421,7 +421,10 @@ export interface ApiCollectionLookupCollectionLookup
|
|||
createdAt: Schema.Attribute.DateTime;
|
||||
createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> &
|
||||
Schema.Attribute.Private;
|
||||
imageItem: Schema.Attribute.Boolean &
|
||||
date_list: Schema.Attribute.Boolean &
|
||||
Schema.Attribute.Required &
|
||||
Schema.Attribute.DefaultTo<false>;
|
||||
image_item: Schema.Attribute.Boolean &
|
||||
Schema.Attribute.Required &
|
||||
Schema.Attribute.DefaultTo<false>;
|
||||
locale: Schema.Attribute.String & Schema.Attribute.Private;
|
||||
|
|
Loading…
Reference in a new issue