pos-be/plopfile.js

246 lines
5.9 KiB
JavaScript

const path = require('path');
const fs = require('fs');
module.exports = function (plop) {
plop.setGenerator('module', {
description: 'Create a new module by default',
prompts: [
{
type: 'input',
name: 'name',
message: 'Name: ',
validate: function (value) {
if (/.+/.test(value)) {
return true;
}
return 'Name is required';
},
},
{
type: 'list',
name: 'base',
message: 'Base: ',
choices: function () {
return ['base', 'base status', 'base core'];
},
},
{
type: 'list',
name: 'location',
message: 'Location: ',
choices: function () {
return ['item related', 'user related', 'season related', 'transaction', 'web information'];
},
},
],
actions: function (data) {
if (['base', 'base core'].includes(data.base)) data.orchestrator = 'data'
else if (data.base == 'base status') data.orchestrator = 'data transaction'
const destination = `src/modules/{{dashCase location}}/{{dashCase name}}`;
const result = [
...mappingModule(data.base, destination),
...mappingController(data.base, destination),
...mappingModel(data.base, destination),
...mappingService(destination),
...mappingOrchestrator(data.base, destination),
...mappingManager(data.base, destination)
]
return result
},
})
};
function mappingService(destination) {
const datas = [];
datas.push(
{
type: 'addMany',
destination: `${destination}/data/services`,
templateFiles: `src/core/templates/services/*.hbs`,
base: 'src/core/templates/services',
},
)
return datas;
}
function mappingOrchestrator(base, destination) {
const datas = [];
if (base == 'base status') {
datas.push(
{
type: 'addMany',
destination: `${destination}/domain/usecases`,
templateFiles: `src/core/templates/orchestrators/base-status/*.hbs`,
base: 'src/core/templates/orchestrators/base-status',
},
)
} else {
datas.push(
{
type: 'addMany',
destination: `${destination}/domain/usecases`,
templateFiles: `src/core/templates/orchestrators/base/*.hbs`,
base: 'src/core/templates/orchestrators/base',
},
)
}
datas.push(
{
type: 'addMany',
destination: `${destination}/domain/usecases`,
templateFiles: `src/core/templates/orchestrators/base-read/*.hbs`,
base: 'src/core/templates/orchestrators/base-read',
},
)
return datas;
}
function mappingController(base, destination) {
const datas = [];
if (base == 'base status') {
datas.push(
{
type: 'addMany',
destination: `${destination}/infrastructure`,
templateFiles: `src/core/templates/controllers/base-status/*.hbs`,
base: 'src/core/templates/controllers/base-status',
},
)
} else {
datas.push(
{
type: 'addMany',
destination: `${destination}/infrastructure`,
templateFiles: `src/core/templates/controllers/base/*.hbs`,
base: 'src/core/templates/controllers/base',
},
)
}
datas.push(
{
type: 'addMany',
destination: `${destination}/infrastructure`,
templateFiles: `src/core/templates/controllers/base-read/*.hbs`,
base: 'src/core/templates/controllers/base-read',
},
)
return datas;
}
function mappingModel(base, destination) {
const datas = [];
if (base == 'base status') {
datas.push(
{
type: 'addMany',
destination: `${destination}/domain/entities/event`,
templateFiles: `src/core/templates/events/base-status/*.hbs`,
base: 'src/core/templates/events/base-status',
}
)
}
datas.push(
{
type: 'addMany',
destination: `${destination}/data/models`,
templateFiles: `src/core/templates/models/*.hbs`,
base: 'src/core/templates/models',
},
{
type: 'addMany',
destination: `${destination}/domain/entities`,
templateFiles: `src/core/templates/entities/*.hbs`,
base: 'src/core/templates/entities',
},
{
type: 'addMany',
destination: `${destination}/infrastructure/dto`,
templateFiles: `src/core/templates/dtos/*.hbs`,
base: 'src/core/templates/dtos',
},
{
type: 'addMany',
destination: `${destination}/domain/entities/event`,
templateFiles: `src/core/templates/events/base/*.hbs`,
base: 'src/core/templates/events/base',
}
)
return datas;
}
function mappingModule(base, destination) {
const datas = [];
if (base == 'base status') {
datas.push(
{
type: 'addMany',
destination: destination,
templateFiles: `src/core/templates/modules/base-status/*.hbs`,
base: 'src/core/templates/modules/base-status',
}
)
} else {
datas.push(
{
type: 'addMany',
destination: destination,
templateFiles: `src/core/templates/modules/base/*.hbs`,
base: 'src/core/templates/modules/base',
}
)
}
datas.push(
{
type: 'addMany',
destination: destination,
templateFiles: `src/core/templates/modules/core/*.hbs`,
base: 'src/core/templates/modules/core',
}
)
return datas;
}
function mappingManager(base, destination) {
const datas = [];
const tujuan = `${destination}/domain/usecases/managers`;
if (base == 'base status') {
datas.push(
{
type: 'addMany',
destination: tujuan,
templateFiles: `src/core/templates/managers/manager-statuses/*.hbs`,
base: 'src/core/templates/managers/manager-statuses',
},
)
}
datas.push(
{
type: 'addMany',
destination: tujuan,
templateFiles: `src/core/templates/managers/base/*.hbs`,
base: 'src/core/templates/managers/base',
},
)
return datas;
}