@websolutespa/payload-plugin-bowl
Version:
Bowl PayloadCms plugin of the BOM Repository
81 lines (80 loc) • 3.81 kB
JavaScript
import { ResponseError, ResponseSuccess } from '@websolutespa/payload-utils/server';
import { decorateMenu_, decorateRichText_, decorateSchema_ } from '../decorators';
import { findByIDHandler } from '../utils/findByIDHandler';
import { findHandler } from '../utils/findHandler';
import { getCollectionItem, getCollectionItems } from './collection.service';
/**
* Rest api menu get handler.
*/ export const menuIndexGet = (options)=>({
path: '/',
method: 'get',
handler: async (req)=>{
try {
const { query } = req;
// console.log('menuIndexGet', ...Object.entries(query));
if (!query) {
return findHandler(req);
}
const { locale, market, pagination, page, limit } = query;
if (typeof market === 'string' && typeof locale === 'string') {
// const context = await setMixerContext(req, market, locale);
// console.log('menuIndexGet.context', context.market, context.locale, context.routes.length, context.categories.length);
if (pagination === 'true') {
return findHandler(req);
} else {
const items = await getCollectionItems(req, options.slug.menu);
return ResponseSuccess(items);
}
} else if (pagination === 'false') {
const items = await getCollectionItems(req, options.slug.menu);
return ResponseSuccess(items);
}
return findHandler(req);
} catch (error) {
console.error('MenuService.menuIndexGet.error', error);
return ResponseError(error);
}
}
});
/**
* Rest api menu detail get handler.
*/ export const menuDetailGet = (options)=>({
path: '/:id',
method: 'get',
handler: async (req)=>{
// const collection = getRequestCollection(req);
const { query } = req;
if (!query) {
return findByIDHandler(req);
}
// console.log('menuDetailGet', ...Object.entries(query));
const { market, locale } = query;
if (!(typeof market === 'string' && typeof locale === 'string')) {
return findByIDHandler(req);
}
// const context = await setMixerContext(req, market, locale);
// console.log('menuDetailGet.context', context.market, context.locale, context.routes.length, context.categories.length);
try {
const id = req.routeParams?.id;
const item = await getCollectionItem(req, options.slug.menu, id);
return ResponseSuccess(item);
} catch (error) {
console.error('MenuService.menuDetailGet.error', error);
return ResponseError(error);
}
}
});
/**
* Decorate record for Mixer when queried by market and locale.
*/ export const afterMenuReadHook = (collectionConfig)=>async ({ doc, req, context, findMany })=>{
// console.log('afterMenuReadHook', query.locale, query.market, depth);
const { market, locale, markets, locales, routes, categories } = context;
if (!market || !locale || !markets || !locales || !routes || !categories) {
return doc;
}
const withSchema = await decorateSchema_(doc, collectionConfig.slug);
const withRichText = await decorateRichText_(withSchema, collectionConfig.fields, context, req.payload.config);
const withMenu = await decorateMenu_(withRichText, context);
return withMenu;
};
//# sourceMappingURL=menu.service.js.map