From efbd9fcf42afa03097c07fe491c57bfa42c0a00d Mon Sep 17 00:00:00 2001 From: Dieter Stinglhamber Date: Wed, 10 Nov 2021 09:29:15 +0100 Subject: [PATCH] update route generation --- .../server/services/content-types.js | 17 +++- .../generators/generators/lib/plops/api.js | 78 +++++++++---------- .../generators/lib/plops/content-type.js | 10 +-- .../generators/lib/plops/controller.js | 2 +- .../generators/lib/plops/middleware.js | 2 +- .../generators/generators/lib/plops/policy.js | 2 +- .../get-attributes-prompts.js | 2 +- .../get-ct-names-prompts.js | 0 .../prompts/get-default-routes-prompts.js | 10 +++ .../get-destination-prompts.js | 0 .../get-draft-and-publish-prompts.js | 0 .../{utils => prompts}/get-kind-prompts.js | 2 +- .../generators/lib/plops/service.js | 2 +- .../lib/templates/single-route.js.hbs | 12 +++ 14 files changed, 84 insertions(+), 55 deletions(-) rename packages/generators/generators/lib/plops/{utils => prompts}/get-attributes-prompts.js (97%) rename packages/generators/generators/lib/plops/{utils => prompts}/get-ct-names-prompts.js (100%) create mode 100644 packages/generators/generators/lib/plops/prompts/get-default-routes-prompts.js rename packages/generators/generators/lib/plops/{utils => prompts}/get-destination-prompts.js (100%) rename packages/generators/generators/lib/plops/{utils => prompts}/get-draft-and-publish-prompts.js (100%) rename packages/generators/generators/lib/plops/{utils => prompts}/get-kind-prompts.js (85%) create mode 100644 packages/generators/generators/lib/templates/single-route.js.hbs diff --git a/packages/core/content-type-builder/server/services/content-types.js b/packages/core/content-type-builder/server/services/content-types.js index d1a30d2575..4ff051b6d3 100644 --- a/packages/core/content-type-builder/server/services/content-types.js +++ b/packages/core/content-type-builder/server/services/content-types.js @@ -122,9 +122,22 @@ const createContentType = async ({ contentType, components = [] }, options = {}) * Generate an API squeleton * @param {string} name */ -const generateAPI = ({ singularName, kind = 'collectionType' }) => { +const generateAPI = ({ singularName, kind = 'collectionType', pluralName, displayName }) => { const strapiGenerators = require('@strapi/generators'); - return strapiGenerators.generate('api', { id: singularName, kind }, { dir: strapi.dirs.root }); + return strapiGenerators.generate( + 'api', + { + id: singularName, + kind, + singularName, + pluralName, + displayName, + createContentType: true, + generateDefaultRoutes: true, + attributes: [], + }, + { dir: strapi.dirs.root } + ); }; /** diff --git a/packages/generators/generators/lib/plops/api.js b/packages/generators/generators/lib/plops/api.js index c36542ee10..baa4bf67d0 100644 --- a/packages/generators/generators/lib/plops/api.js +++ b/packages/generators/generators/lib/plops/api.js @@ -3,10 +3,11 @@ const { join } = require('path'); const fs = require('fs-extra'); const validateInput = require('./utils/validate-input'); -const getCtNamesPrompts = require('./utils/get-ct-names-prompts'); -const getKindPrompts = require('./utils/get-kind-prompts'); -const getDraftAndPublishPrompts = require('./utils/get-draft-and-publish-prompts'); -const getAttributesPrompts = require('./utils/get-attributes-prompts'); +const getCtNamesPrompts = require('./prompts/get-ct-names-prompts'); +const getKindPrompts = require('./prompts/get-kind-prompts'); +const getDraftAndPublishPrompts = require('./prompts/get-draft-and-publish-prompts'); +const getAttributesPrompts = require('./prompts/get-attributes-prompts'); +const getDefaultRoutesPrompts = require('./prompts/get-default-routes-prompts'); module.exports = plop => { // API generator @@ -48,26 +49,10 @@ module.exports = plop => { return pluginsDirContent; }, }, - { - type: 'list', - name: 'kind', - message: 'Please choose the model type', - default: 'collectionType', - choices: [ - { name: 'Collection Type', value: 'collectionType' }, - { name: 'Single Type', value: 'singleType' }, - ], - }, - { - type: 'confirm', - name: 'useDraftAndPublish', - default: false, - message: 'Use draft and publish?', - }, { type: 'confirm', name: 'createContentType', - default: false, + default: true, message: 'Create a content-type?', }, ]); @@ -82,6 +67,7 @@ module.exports = plop => { ...getCtNamesPrompts, ...getKindPrompts, ...getDraftAndPublishPrompts, + ...getDefaultRoutesPrompts, ])), attributes: await getAttributesPrompts(inquirer), }; @@ -111,33 +97,41 @@ module.exports = plop => { return baseActions; } - const routeType = - answers.kind === 'singleType' - ? 'single-type-routes.js.hbs' - : 'collection-type-routes.js.hbs'; - - if (answers.createContentType) { - baseActions.push( - ...(answers.isPluginApi && answers.plugin - ? plop.getGenerator('content-type').actions({ - ...answers, - destination: 'plugin', - plugin: answers.id, - }) - : plop.getGenerator('content-type').actions({ - ...answers, - destination: 'new', - })) - ); + if (!answers.createContentType) { + return [ + { + type: 'add', + path: `${filePath}/routes/{{id}}.js`, + templateFile: `templates/single-route.js.hbs`, + }, + ...baseActions, + ]; } - return [ - { + if (answers.generateDefaultRoutes) { + const routeType = + answers.kind === 'singleType' + ? 'single-type-routes.js.hbs' + : 'collection-type-routes.js.hbs'; + + baseActions.push({ type: 'add', path: `${filePath}/routes/{{id}}.js`, templateFile: `templates/${routeType}`, - }, + }); + } + + const destination = + answers.isPluginApi && answers.plugin + ? { destination: 'plugin', plugin: answers.id } + : { destination: 'new' }; + + return [ ...baseActions, + ...plop.getGenerator('content-type').actions({ + ...answers, + ...destination, + }), ]; }, }); diff --git a/packages/generators/generators/lib/plops/content-type.js b/packages/generators/generators/lib/plops/content-type.js index ff4de16f11..071b4cc1bb 100644 --- a/packages/generators/generators/lib/plops/content-type.js +++ b/packages/generators/generators/lib/plops/content-type.js @@ -2,12 +2,12 @@ const slugify = require('@sindresorhus/slugify'); -const getDestinationPrompts = require('./utils/get-destination-prompts'); +const getDestinationPrompts = require('./prompts/get-destination-prompts'); const getFilePath = require('./utils/get-file-path'); -const getCtNamesPrompts = require('./utils/get-ct-names-prompts'); -const getKindPrompts = require('./utils/get-kind-prompts'); -const getDraftAndPublishPrompts = require('./utils/get-draft-and-publish-prompts'); -const getAttributesPrompts = require('./utils/get-attributes-prompts'); +const getCtNamesPrompts = require('./prompts/get-ct-names-prompts'); +const getKindPrompts = require('./prompts/get-kind-prompts'); +const getDraftAndPublishPrompts = require('./prompts/get-draft-and-publish-prompts'); +const getAttributesPrompts = require('./prompts/get-attributes-prompts'); module.exports = plop => { // Model generator diff --git a/packages/generators/generators/lib/plops/controller.js b/packages/generators/generators/lib/plops/controller.js index 0820d68aa0..f05dcadf69 100644 --- a/packages/generators/generators/lib/plops/controller.js +++ b/packages/generators/generators/lib/plops/controller.js @@ -1,6 +1,6 @@ 'use strict'; -const getDestinationPrompts = require('./utils/get-destination-prompts'); +const getDestinationPrompts = require('./prompts/get-destination-prompts'); const getFilePath = require('./utils/get-file-path'); const validateInput = require('./utils/validate-input'); diff --git a/packages/generators/generators/lib/plops/middleware.js b/packages/generators/generators/lib/plops/middleware.js index 692b3b4118..69b720c092 100644 --- a/packages/generators/generators/lib/plops/middleware.js +++ b/packages/generators/generators/lib/plops/middleware.js @@ -1,6 +1,6 @@ 'use strict'; -const getDestinationPrompts = require('./utils/get-destination-prompts'); +const getDestinationPrompts = require('./prompts/get-destination-prompts'); module.exports = plop => { // middleware generator diff --git a/packages/generators/generators/lib/plops/policy.js b/packages/generators/generators/lib/plops/policy.js index 4244baa435..57eb9d21a3 100644 --- a/packages/generators/generators/lib/plops/policy.js +++ b/packages/generators/generators/lib/plops/policy.js @@ -1,6 +1,6 @@ 'use strict'; -const getDestinationPrompts = require('./utils/get-destination-prompts'); +const getDestinationPrompts = require('./prompts/get-destination-prompts'); module.exports = plop => { // Policy generator diff --git a/packages/generators/generators/lib/plops/utils/get-attributes-prompts.js b/packages/generators/generators/lib/plops/prompts/get-attributes-prompts.js similarity index 97% rename from packages/generators/generators/lib/plops/utils/get-attributes-prompts.js rename to packages/generators/generators/lib/plops/prompts/get-attributes-prompts.js index 0308d9f352..7b797a9208 100644 --- a/packages/generators/generators/lib/plops/utils/get-attributes-prompts.js +++ b/packages/generators/generators/lib/plops/prompts/get-attributes-prompts.js @@ -1,6 +1,6 @@ 'use strict'; -const validateInput = require('./validate-input'); +const validateInput = require('../utils/validate-input'); const DEFAULT_TYPES = [ // advanced types diff --git a/packages/generators/generators/lib/plops/utils/get-ct-names-prompts.js b/packages/generators/generators/lib/plops/prompts/get-ct-names-prompts.js similarity index 100% rename from packages/generators/generators/lib/plops/utils/get-ct-names-prompts.js rename to packages/generators/generators/lib/plops/prompts/get-ct-names-prompts.js diff --git a/packages/generators/generators/lib/plops/prompts/get-default-routes-prompts.js b/packages/generators/generators/lib/plops/prompts/get-default-routes-prompts.js new file mode 100644 index 0000000000..568f11e14e --- /dev/null +++ b/packages/generators/generators/lib/plops/prompts/get-default-routes-prompts.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = [ + { + type: 'confirm', + name: 'generateDefaultRoutes', + default: true, + message: 'Generate default routes?', + }, +]; diff --git a/packages/generators/generators/lib/plops/utils/get-destination-prompts.js b/packages/generators/generators/lib/plops/prompts/get-destination-prompts.js similarity index 100% rename from packages/generators/generators/lib/plops/utils/get-destination-prompts.js rename to packages/generators/generators/lib/plops/prompts/get-destination-prompts.js diff --git a/packages/generators/generators/lib/plops/utils/get-draft-and-publish-prompts.js b/packages/generators/generators/lib/plops/prompts/get-draft-and-publish-prompts.js similarity index 100% rename from packages/generators/generators/lib/plops/utils/get-draft-and-publish-prompts.js rename to packages/generators/generators/lib/plops/prompts/get-draft-and-publish-prompts.js diff --git a/packages/generators/generators/lib/plops/utils/get-kind-prompts.js b/packages/generators/generators/lib/plops/prompts/get-kind-prompts.js similarity index 85% rename from packages/generators/generators/lib/plops/utils/get-kind-prompts.js rename to packages/generators/generators/lib/plops/prompts/get-kind-prompts.js index 2e043992aa..1ae60d911d 100644 --- a/packages/generators/generators/lib/plops/utils/get-kind-prompts.js +++ b/packages/generators/generators/lib/plops/prompts/get-kind-prompts.js @@ -1,6 +1,6 @@ 'use strict'; -const validateInput = require('./validate-input'); +const validateInput = require('../utils/validate-input'); module.exports = [ { diff --git a/packages/generators/generators/lib/plops/service.js b/packages/generators/generators/lib/plops/service.js index c5d409b7de..248085feb3 100644 --- a/packages/generators/generators/lib/plops/service.js +++ b/packages/generators/generators/lib/plops/service.js @@ -1,6 +1,6 @@ 'use strict'; -const getDestinationPrompts = require('./utils/get-destination-prompts'); +const getDestinationPrompts = require('./prompts/get-destination-prompts'); const getFilePath = require('./utils/get-file-path'); module.exports = plop => { diff --git a/packages/generators/generators/lib/templates/single-route.js.hbs b/packages/generators/generators/lib/templates/single-route.js.hbs new file mode 100644 index 0000000000..bd9b79bab1 --- /dev/null +++ b/packages/generators/generators/lib/templates/single-route.js.hbs @@ -0,0 +1,12 @@ +module.exports = { + routes: [ + // { + // method: 'GET', + // path: '/{{id}}', + // handler: '{{id}}.exampleAction', + // config: { + // policies: [], + // }, + // }, + ], +};