adds pattern for local CRUD

This commit is contained in:
James
2020-07-27 17:04:54 -04:00
parent 16d2f400c4
commit 9c8145238c
11 changed files with 94 additions and 8 deletions

View File

@@ -0,0 +1,31 @@
const LocalOperations = {
slug: 'local-operations',
labels: {
singular: 'Local Operation',
plural: 'Local Operations',
},
hooks: {
afterRead: [
async ({ req, doc }) => {
const formattedData = { ...doc };
const localizedPosts = await req.payload.find({
collection: 'localized-posts',
});
formattedData.localizedPosts = localizedPosts;
return formattedData;
},
],
},
fields: [
{
name: 'title',
type: 'text',
label: 'title',
required: true,
},
],
};
module.exports = LocalOperations;

View File

@@ -10,6 +10,7 @@ const HiddenFields = require('./collections/HiddenFields');
const Hooks = require('./collections/Hooks');
const Localized = require('./collections/Localized');
const LocalizedArray = require('./collections/LocalizedArray');
const LocalOperations = require('./collections/LocalOperations');
const Media = require('./collections/Media');
const NestedArrays = require('./collections/NestedArrays');
const Preview = require('./collections/Preview');
@@ -46,6 +47,7 @@ module.exports = {
Hooks,
Localized,
LocalizedArray,
LocalOperations,
Media,
NestedArrays,
Preview,

View File

@@ -106,7 +106,6 @@
"slate-hyperscript": "^0.58.3",
"slate-react": "^0.58.3",
"style-loader": "^0.21.0",
"styled-components": "^5.1.1",
"uglifyjs-webpack-plugin": "^2.2.0",
"url-loader": "^1.0.1",
"uuid": "^8.1.0",

View File

@@ -0,0 +1,29 @@
async function find(options) {
const {
collection: collectionSlug,
depth,
page,
limit,
where,
locale,
fallbackLocale,
} = options;
const collection = this.collections[collectionSlug];
return this.operations.collections.find({
depth,
page,
limit,
where,
collection,
overrideAccess: true,
req: {
payloadAPI: 'local',
locale,
fallbackLocale,
},
});
}
module.exports = find;

View File

@@ -0,0 +1,13 @@
const find = require('./find');
const findOne = require('./findOne');
const create = require('./create');
const update = require('./update');
const localDelete = require('./delete');
module.exports = {
find,
findOne,
create,
update,
localDelete,
};

View File

@@ -9,22 +9,26 @@ const localizationMiddleware = require('../../localization/middleware');
const authenticate = require('./authenticate');
const identifyAPI = require('./identifyAPI');
const middleware = (config) => [
const middleware = (payload) => [
passport.initialize(),
identifyAPI('REST'),
authenticate(config),
authenticate(payload.config),
express.json(),
methodOverride('X-HTTP-Method-Override'),
qsMiddleware({ depth: 10 }),
bodyParser.urlencoded({ extended: true }),
compression(config.compression),
localizationMiddleware(config.localization),
compression(payload.config.compression),
localizationMiddleware(payload.config.localization),
fileUpload({
parseNested: true,
}),
(req, _, next) => {
req.payload = payload;
return next();
},
(req, res, next) => {
if (config.cors) {
if (config.cors.indexOf(req.headers.origin) > -1) {
if (payload.config.cors) {
if (payload.config.cors.indexOf(req.headers.origin) > -1) {
res.setHeader('Access-Control-Allow-Origin', req.headers.origin);
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
}

View File

@@ -23,6 +23,8 @@ const identifyAPI = require('./express/middleware/identifyAPI');
const errorHandler = require('./express/middleware/errorHandler');
const performFieldOperations = require('./fields/performFieldOperations');
const localOperations = require('./collections/operations/local');
class Payload {
constructor(options) {
logger.info('Starting Payload...');
@@ -56,7 +58,7 @@ class Payload {
// Setup & initialization
connectMongoose(this.config.mongoURL);
this.router.use(...expressMiddleware(this.config, this.collections));
this.router.use(...expressMiddleware(this));
this.initAuth();
this.initCollections();
@@ -105,6 +107,12 @@ class Payload {
authenticate() {
return authenticate(this.config);
}
async find(options) {
let { find } = localOperations;
find = find.bind(this);
return find(options);
}
}
module.exports = Payload;