@strapi/content-releases 0.0.0-next.e21fe90bf2ab9906267ea6e6ca620bdcc729906c → 0.0.0-next.e326c69a49373b420f6566c30aca26f4b6274c6a
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/components/EntryValidationPopover.js +62 -96
- package/dist/admin/components/EntryValidationPopover.js.map +1 -1
- package/dist/admin/components/EntryValidationPopover.mjs +64 -98
- package/dist/admin/components/EntryValidationPopover.mjs.map +1 -1
- package/dist/admin/components/ReleaseAction.js +3 -1
- package/dist/admin/components/ReleaseAction.js.map +1 -1
- package/dist/admin/components/ReleaseAction.mjs +3 -1
- package/dist/admin/components/ReleaseAction.mjs.map +1 -1
- package/dist/admin/components/ReleaseActionMenu.js +25 -74
- package/dist/admin/components/ReleaseActionMenu.js.map +1 -1
- package/dist/admin/components/ReleaseActionMenu.mjs +26 -75
- package/dist/admin/components/ReleaseActionMenu.mjs.map +1 -1
- package/dist/admin/components/ReleaseModal.js +7 -0
- package/dist/admin/components/ReleaseModal.js.map +1 -1
- package/dist/admin/components/ReleaseModal.mjs +7 -0
- package/dist/admin/components/ReleaseModal.mjs.map +1 -1
- package/dist/admin/components/Widgets.js +122 -0
- package/dist/admin/components/Widgets.js.map +1 -0
- package/dist/admin/components/Widgets.mjs +120 -0
- package/dist/admin/components/Widgets.mjs.map +1 -0
- package/dist/admin/constants.js +2 -0
- package/dist/admin/constants.js.map +1 -1
- package/dist/admin/constants.mjs +2 -1
- package/dist/admin/constants.mjs.map +1 -1
- package/dist/admin/index.js +25 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +26 -3
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/pages/PurchaseContentReleases.js +2 -2
- package/dist/admin/pages/PurchaseContentReleases.js.map +1 -1
- package/dist/admin/pages/PurchaseContentReleases.mjs +3 -3
- package/dist/admin/pages/PurchaseContentReleases.mjs.map +1 -1
- package/dist/admin/pages/ReleaseDetailsPage.js +111 -158
- package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -1
- package/dist/admin/pages/ReleaseDetailsPage.mjs +113 -160
- package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -1
- package/dist/admin/pages/ReleasesPage.js +130 -122
- package/dist/admin/pages/ReleasesPage.js.map +1 -1
- package/dist/admin/pages/ReleasesPage.mjs +131 -123
- package/dist/admin/pages/ReleasesPage.mjs.map +1 -1
- package/dist/admin/pages/ReleasesSettingsPage.js +36 -10
- package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -1
- package/dist/admin/pages/ReleasesSettingsPage.mjs +37 -11
- package/dist/admin/pages/ReleasesSettingsPage.mjs.map +1 -1
- package/dist/admin/services/homepage.js +24 -0
- package/dist/admin/services/homepage.js.map +1 -0
- package/dist/admin/services/homepage.mjs +22 -0
- package/dist/admin/services/homepage.mjs.map +1 -0
- package/dist/admin/services/release.js +20 -10
- package/dist/admin/services/release.js.map +1 -1
- package/dist/admin/services/release.mjs +20 -10
- package/dist/admin/services/release.mjs.map +1 -1
- package/dist/admin/src/components/Widgets.d.ts +2 -0
- package/dist/admin/src/constants.d.ts +1 -0
- package/dist/admin/src/services/homepage.d.ts +9 -0
- package/dist/admin/src/services/release.d.ts +28 -28
- package/dist/admin/translations/en.json.js +6 -3
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +6 -3
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/controllers/homepage.js +15 -0
- package/dist/server/controllers/homepage.js.map +1 -0
- package/dist/server/controllers/homepage.mjs +13 -0
- package/dist/server/controllers/homepage.mjs.map +1 -0
- package/dist/server/controllers/index.js +2 -0
- package/dist/server/controllers/index.js.map +1 -1
- package/dist/server/controllers/index.mjs +2 -0
- package/dist/server/controllers/index.mjs.map +1 -1
- package/dist/server/destroy.js +2 -2
- package/dist/server/destroy.js.map +1 -1
- package/dist/server/destroy.mjs +2 -2
- package/dist/server/destroy.mjs.map +1 -1
- package/dist/server/routes/homepage.js +25 -0
- package/dist/server/routes/homepage.js.map +1 -0
- package/dist/server/routes/homepage.mjs +23 -0
- package/dist/server/routes/homepage.mjs.map +1 -0
- package/dist/server/routes/index.js +2 -0
- package/dist/server/routes/index.js.map +1 -1
- package/dist/server/routes/index.mjs +2 -0
- package/dist/server/routes/index.mjs.map +1 -1
- package/dist/server/services/homepage.js +26 -0
- package/dist/server/services/homepage.js.map +1 -0
- package/dist/server/services/homepage.mjs +24 -0
- package/dist/server/services/homepage.mjs.map +1 -0
- package/dist/server/services/index.js +2 -0
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +2 -0
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/services/release-action.js +2 -1
- package/dist/server/services/release-action.js.map +1 -1
- package/dist/server/services/release-action.mjs +2 -1
- package/dist/server/services/release-action.mjs.map +1 -1
- package/dist/server/services/scheduling.js +16 -12
- package/dist/server/services/scheduling.js.map +1 -1
- package/dist/server/services/scheduling.mjs +16 -12
- package/dist/server/services/scheduling.mjs.map +1 -1
- package/dist/server/src/controllers/homepage.d.ts +6 -0
- package/dist/server/src/controllers/homepage.d.ts.map +1 -0
- package/dist/server/src/controllers/index.d.ts +3 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/destroy.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +13 -4
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/homepage.d.ts +4 -0
- package/dist/server/src/routes/homepage.d.ts.map +1 -0
- package/dist/server/src/routes/index.d.ts +1 -0
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/homepage.d.ts +9 -0
- package/dist/server/src/services/homepage.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +9 -4
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/release-action.d.ts.map +1 -1
- package/dist/server/src/services/scheduling.d.ts +4 -5
- package/dist/server/src/services/scheduling.d.ts.map +1 -1
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/utils/index.js +2 -1
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs +2 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/shared/contracts/homepage.d.ts +11 -0
- package/dist/shared/contracts/homepage.d.ts.map +1 -0
- package/dist/shared/types.d.ts +1 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +10 -11
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const info = {
|
|
2
|
+
pluginName: 'content-manager',
|
|
3
|
+
type: 'admin'
|
|
4
|
+
};
|
|
5
|
+
const homepageRouter = {
|
|
6
|
+
type: 'admin',
|
|
7
|
+
routes: [
|
|
8
|
+
{
|
|
9
|
+
method: 'GET',
|
|
10
|
+
info,
|
|
11
|
+
path: '/homepage/upcoming-releases',
|
|
12
|
+
handler: 'homepage.getUpcomingReleases',
|
|
13
|
+
config: {
|
|
14
|
+
policies: [
|
|
15
|
+
'admin::isAuthenticatedAdmin'
|
|
16
|
+
]
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export { homepageRouter as default };
|
|
23
|
+
//# sourceMappingURL=homepage.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"homepage.mjs","sources":["../../../server/src/routes/homepage.ts"],"sourcesContent":["import type { Plugin } from '@strapi/types';\n\nconst info = { pluginName: 'content-manager', type: 'admin' };\n\nconst homepageRouter: Plugin.LoadedPlugin['routes'][string] = {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n info,\n path: '/homepage/upcoming-releases',\n handler: 'homepage.getUpcomingReleases',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n ],\n};\n\nexport default homepageRouter;\n"],"names":["info","pluginName","type","homepageRouter","routes","method","path","handler","config","policies"],"mappings":"AAEA,MAAMA,IAAO,GAAA;IAAEC,UAAY,EAAA,iBAAA;IAAmBC,IAAM,EAAA;AAAQ,CAAA;AAE5D,MAAMC,cAAwD,GAAA;IAC5DD,IAAM,EAAA,OAAA;IACNE,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,KAAA;AACRL,YAAAA,IAAAA;YACAM,IAAM,EAAA,6BAAA;YACNC,OAAS,EAAA,8BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH;;;;"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var homepage = require('./homepage.js');
|
|
3
4
|
var release = require('./release.js');
|
|
4
5
|
var releaseAction = require('./release-action.js');
|
|
5
6
|
var settings = require('./settings.js');
|
|
6
7
|
|
|
7
8
|
const routes = {
|
|
9
|
+
homepage,
|
|
8
10
|
settings,
|
|
9
11
|
release,
|
|
10
12
|
'release-action': releaseAction
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../server/src/routes/index.ts"],"sourcesContent":["import release from './release';\nimport releaseAction from './release-action';\nimport settings from './settings';\n\nexport const routes = {\n settings,\n release,\n 'release-action': releaseAction,\n};\n"],"names":["routes","settings","release","releaseAction"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../server/src/routes/index.ts"],"sourcesContent":["import homepage from './homepage';\nimport release from './release';\nimport releaseAction from './release-action';\nimport settings from './settings';\n\nexport const routes = {\n homepage,\n settings,\n release,\n 'release-action': releaseAction,\n};\n"],"names":["routes","homepage","settings","release","releaseAction"],"mappings":";;;;;;;MAKaA,MAAS,GAAA;AACpBC,IAAAA,QAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,OAAAA;IACA,gBAAkBC,EAAAA;AACpB;;;;"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import homepageRouter from './homepage.mjs';
|
|
1
2
|
import release from './release.mjs';
|
|
2
3
|
import releaseAction from './release-action.mjs';
|
|
3
4
|
import settings from './settings.mjs';
|
|
4
5
|
|
|
5
6
|
const routes = {
|
|
7
|
+
homepage: homepageRouter,
|
|
6
8
|
settings,
|
|
7
9
|
release,
|
|
8
10
|
'release-action': releaseAction
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../server/src/routes/index.ts"],"sourcesContent":["import release from './release';\nimport releaseAction from './release-action';\nimport settings from './settings';\n\nexport const routes = {\n settings,\n release,\n 'release-action': releaseAction,\n};\n"],"names":["routes","settings","release","releaseAction"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../server/src/routes/index.ts"],"sourcesContent":["import homepage from './homepage';\nimport release from './release';\nimport releaseAction from './release-action';\nimport settings from './settings';\n\nexport const routes = {\n homepage,\n settings,\n release,\n 'release-action': releaseAction,\n};\n"],"names":["routes","homepage","settings","release","releaseAction"],"mappings":";;;;;MAKaA,MAAS,GAAA;AACpBC,cAAAA,cAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,OAAAA;IACA,gBAAkBC,EAAAA;AACpB;;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const createHomepageService = ({ strapi })=>{
|
|
4
|
+
const MAX_DOCUMENTS = 4;
|
|
5
|
+
return {
|
|
6
|
+
async getUpcomingReleases () {
|
|
7
|
+
const releases = await strapi.db.query('plugin::content-releases.release').findMany({
|
|
8
|
+
filters: {
|
|
9
|
+
releasedAt: {
|
|
10
|
+
$notNull: false
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
orderBy: [
|
|
14
|
+
{
|
|
15
|
+
scheduledAt: 'asc'
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
limit: MAX_DOCUMENTS
|
|
19
|
+
});
|
|
20
|
+
return releases;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
module.exports = createHomepageService;
|
|
26
|
+
//# sourceMappingURL=homepage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"homepage.js","sources":["../../../server/src/services/homepage.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport type { GetUpcomingReleases } from '../../../shared/contracts/homepage';\n\nconst createHomepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const MAX_DOCUMENTS = 4;\n\n return {\n async getUpcomingReleases(): Promise<GetUpcomingReleases.Response['data']> {\n const releases = await strapi.db.query('plugin::content-releases.release').findMany({\n filters: {\n releasedAt: {\n $notNull: false,\n },\n },\n orderBy: [{ scheduledAt: 'asc' }],\n limit: MAX_DOCUMENTS,\n });\n\n return releases;\n },\n };\n};\n\nexport default createHomepageService;\n"],"names":["createHomepageService","strapi","MAX_DOCUMENTS","getUpcomingReleases","releases","db","query","findMany","filters","releasedAt","$notNull","orderBy","scheduledAt","limit"],"mappings":";;AAIA,MAAMA,qBAAwB,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAChE,IAAA,MAAMC,aAAgB,GAAA,CAAA;IAEtB,OAAO;QACL,MAAMC,mBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAMH,MAAOI,CAAAA,EAAE,CAACC,KAAK,CAAC,kCAAoCC,CAAAA,CAAAA,QAAQ,CAAC;gBAClFC,OAAS,EAAA;oBACPC,UAAY,EAAA;wBACVC,QAAU,EAAA;AACZ;AACF,iBAAA;gBACAC,OAAS,EAAA;AAAC,oBAAA;wBAAEC,WAAa,EAAA;AAAM;AAAE,iBAAA;gBACjCC,KAAOX,EAAAA;AACT,aAAA,CAAA;YAEA,OAAOE,QAAAA;AACT;AACF,KAAA;AACF;;;;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
const createHomepageService = ({ strapi })=>{
|
|
2
|
+
const MAX_DOCUMENTS = 4;
|
|
3
|
+
return {
|
|
4
|
+
async getUpcomingReleases () {
|
|
5
|
+
const releases = await strapi.db.query('plugin::content-releases.release').findMany({
|
|
6
|
+
filters: {
|
|
7
|
+
releasedAt: {
|
|
8
|
+
$notNull: false
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
orderBy: [
|
|
12
|
+
{
|
|
13
|
+
scheduledAt: 'asc'
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
limit: MAX_DOCUMENTS
|
|
17
|
+
});
|
|
18
|
+
return releases;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export { createHomepageService as default };
|
|
24
|
+
//# sourceMappingURL=homepage.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"homepage.mjs","sources":["../../../server/src/services/homepage.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport type { GetUpcomingReleases } from '../../../shared/contracts/homepage';\n\nconst createHomepageService = ({ strapi }: { strapi: Core.Strapi }) => {\n const MAX_DOCUMENTS = 4;\n\n return {\n async getUpcomingReleases(): Promise<GetUpcomingReleases.Response['data']> {\n const releases = await strapi.db.query('plugin::content-releases.release').findMany({\n filters: {\n releasedAt: {\n $notNull: false,\n },\n },\n orderBy: [{ scheduledAt: 'asc' }],\n limit: MAX_DOCUMENTS,\n });\n\n return releases;\n },\n };\n};\n\nexport default createHomepageService;\n"],"names":["createHomepageService","strapi","MAX_DOCUMENTS","getUpcomingReleases","releases","db","query","findMany","filters","releasedAt","$notNull","orderBy","scheduledAt","limit"],"mappings":"AAIA,MAAMA,qBAAwB,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAChE,IAAA,MAAMC,aAAgB,GAAA,CAAA;IAEtB,OAAO;QACL,MAAMC,mBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAMH,MAAOI,CAAAA,EAAE,CAACC,KAAK,CAAC,kCAAoCC,CAAAA,CAAAA,QAAQ,CAAC;gBAClFC,OAAS,EAAA;oBACPC,UAAY,EAAA;wBACVC,QAAU,EAAA;AACZ;AACF,iBAAA;gBACAC,OAAS,EAAA;AAAC,oBAAA;wBAAEC,WAAa,EAAA;AAAM;AAAE,iBAAA;gBACjCC,KAAOX,EAAAA;AACT,aAAA,CAAA;YAEA,OAAOE,QAAAA;AACT;AACF,KAAA;AACF;;;;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var homepage = require('./homepage.js');
|
|
3
4
|
var release = require('./release.js');
|
|
4
5
|
var releaseAction = require('./release-action.js');
|
|
5
6
|
var validation = require('./validation.js');
|
|
@@ -7,6 +8,7 @@ var scheduling = require('./scheduling.js');
|
|
|
7
8
|
var settings = require('./settings.js');
|
|
8
9
|
|
|
9
10
|
const services = {
|
|
11
|
+
homepage,
|
|
10
12
|
release,
|
|
11
13
|
'release-action': releaseAction,
|
|
12
14
|
'release-validation': validation.default,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import release from './release';\nimport releaseAction from './release-action';\nimport releaseValidation from './validation';\nimport scheduling from './scheduling';\nimport settings from './settings';\n\nexport const services = {\n release,\n 'release-action': releaseAction,\n 'release-validation': releaseValidation,\n scheduling,\n settings,\n};\n"],"names":["services","release","releaseAction","releaseValidation","scheduling","settings"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import homepage from './homepage';\nimport release from './release';\nimport releaseAction from './release-action';\nimport releaseValidation from './validation';\nimport scheduling from './scheduling';\nimport settings from './settings';\n\nexport const services = {\n homepage,\n release,\n 'release-action': releaseAction,\n 'release-validation': releaseValidation,\n scheduling,\n settings,\n};\n"],"names":["services","homepage","release","releaseAction","releaseValidation","scheduling","settings"],"mappings":";;;;;;;;;MAOaA,QAAW,GAAA;AACtBC,IAAAA,QAAAA;AACAC,IAAAA,OAAAA;IACA,gBAAkBC,EAAAA,aAAAA;IAClB,oBAAsBC,EAAAA,kBAAAA;AACtBC,IAAAA,UAAAA;AACAC,IAAAA;AACF;;;;"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import createHomepageService from './homepage.mjs';
|
|
1
2
|
import createReleaseService from './release.mjs';
|
|
2
3
|
import createReleaseActionService from './release-action.mjs';
|
|
3
4
|
import createReleaseValidationService from './validation.mjs';
|
|
@@ -5,6 +6,7 @@ import createSchedulingService from './scheduling.mjs';
|
|
|
5
6
|
import createSettingsService from './settings.mjs';
|
|
6
7
|
|
|
7
8
|
const services = {
|
|
9
|
+
homepage: createHomepageService,
|
|
8
10
|
release: createReleaseService,
|
|
9
11
|
'release-action': createReleaseActionService,
|
|
10
12
|
'release-validation': createReleaseValidationService,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import release from './release';\nimport releaseAction from './release-action';\nimport releaseValidation from './validation';\nimport scheduling from './scheduling';\nimport settings from './settings';\n\nexport const services = {\n release,\n 'release-action': releaseAction,\n 'release-validation': releaseValidation,\n scheduling,\n settings,\n};\n"],"names":["services","release","releaseAction","releaseValidation","scheduling","settings"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import homepage from './homepage';\nimport release from './release';\nimport releaseAction from './release-action';\nimport releaseValidation from './validation';\nimport scheduling from './scheduling';\nimport settings from './settings';\n\nexport const services = {\n homepage,\n release,\n 'release-action': releaseAction,\n 'release-validation': releaseValidation,\n scheduling,\n settings,\n};\n"],"names":["services","homepage","release","releaseAction","releaseValidation","scheduling","settings"],"mappings":";;;;;;;MAOaA,QAAW,GAAA;AACtBC,cAAAA,qBAAAA;AACAC,aAAAA,oBAAAA;IACA,gBAAkBC,EAAAA,0BAAAA;IAClB,oBAAsBC,EAAAA,8BAAAA;AACtBC,gBAAAA,uBAAAA;AACAC,cAAAA;AACF;;;;"}
|
|
@@ -187,7 +187,8 @@ const createReleaseActionService = ({ strapi })=>{
|
|
|
187
187
|
const contentTypeModelsMap = await utils.async.reduce(contentTypeUids)(async (accPromise, contentTypeUid)=>{
|
|
188
188
|
const acc = await accPromise;
|
|
189
189
|
const contentTypeModel = strapi.getModel(contentTypeUid);
|
|
190
|
-
|
|
190
|
+
// Workflows service may not be available depending on the license
|
|
191
|
+
const workflow = await workflowsService?.getAssignedWorkflow(contentTypeUid, {
|
|
191
192
|
populate: 'stageRequiredToPublish'
|
|
192
193
|
});
|
|
193
194
|
acc[contentTypeUid] = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-action.js","sources":["../../../server/src/services/release-action.ts"],"sourcesContent":["import { errors, async } from '@strapi/utils';\n\nimport type { Core, Internal, Modules, UID, Data } from '@strapi/types';\n\nimport _ from 'lodash/fp';\n\nimport { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID } from '../constants';\n\nimport type {\n CreateReleaseAction,\n GetReleaseActions,\n ReleaseAction,\n ReleaseActionGroupBy,\n UpdateReleaseAction,\n DeleteReleaseAction,\n} from '../../../shared/contracts/release-actions';\nimport type { Entity } from '../../../shared/types';\nimport { getService, getDraftEntryValidStatus, getEntry, getEntryStatus } from '../utils';\n\nconst getGroupName = (queryValue: string) => {\n switch (queryValue) {\n case 'contentType':\n return 'contentType.displayName';\n case 'type':\n return 'type';\n case 'locale':\n return _.getOr('No locale', 'locale.name');\n default:\n return 'contentType.displayName';\n }\n};\n\nexport interface Locale extends Entity {\n name: string;\n code: string;\n}\n\ntype LocaleDictionary = {\n [key: Locale['code']]: Pick<Locale, 'name' | 'code'>;\n};\n\nconst createReleaseActionService = ({ strapi }: { strapi: Core.Strapi }) => {\n const getLocalesDataForActions = async () => {\n if (!strapi.plugin('i18n')) {\n return {};\n }\n\n const allLocales: Locale[] = (await strapi.plugin('i18n').service('locales').find()) || [];\n return allLocales.reduce<LocaleDictionary>((acc, locale) => {\n acc[locale.code] = { name: locale.name, code: locale.code };\n\n return acc;\n }, {});\n };\n\n const getContentTypesDataForActions = async (\n contentTypesUids: ReleaseAction['contentType'][]\n ) => {\n const contentManagerContentTypeService = strapi\n .plugin('content-manager')\n .service('content-types');\n\n const contentTypesData: Record<\n Internal.UID.ContentType,\n { mainField: string; displayName: string }\n > = {};\n for (const contentTypeUid of contentTypesUids) {\n const contentTypeConfig = await contentManagerContentTypeService.findConfiguration({\n uid: contentTypeUid,\n });\n\n contentTypesData[contentTypeUid] = {\n mainField: contentTypeConfig.settings.mainField,\n displayName: strapi.getModel(contentTypeUid).info.displayName,\n };\n }\n\n return contentTypesData;\n };\n\n return {\n async create(\n releaseId: CreateReleaseAction.Request['params']['releaseId'],\n action: CreateReleaseAction.Request['body'],\n { disableUpdateReleaseStatus = false }: { disableUpdateReleaseStatus?: boolean } = {}\n ) {\n const { validateEntryData, validateUniqueEntry } = getService('release-validation', {\n strapi,\n });\n\n await Promise.all([\n validateEntryData(action.contentType, action.entryDocumentId),\n validateUniqueEntry(releaseId, action),\n ]);\n\n // If we are adding a singleType, we need to append the documentId of that singleType\n const model = strapi.contentType(action.contentType);\n if (model.kind === 'singleType') {\n const document = await strapi.db.query(model.uid).findOne({ select: ['documentId'] });\n\n if (!document) {\n throw new errors.NotFoundError(`No entry found for contentType ${action.contentType}`);\n }\n\n action.entryDocumentId = document.documentId;\n }\n\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n if (release.releasedAt) {\n throw new errors.ValidationError('Release already published');\n }\n\n // If the action is a publish, check if the entry is valid\n // If the action is an unpublish, skip the validation\n const actionStatus =\n action.type === 'publish'\n ? await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n {\n strapi,\n }\n )\n : true;\n\n const releaseAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).create({\n data: {\n ...action,\n release: release.id,\n isEntryValid: actionStatus,\n },\n populate: { release: { select: ['id'] } },\n });\n\n if (!disableUpdateReleaseStatus) {\n getService('release', { strapi }).updateReleaseStatus(release.id);\n }\n\n return releaseAction;\n },\n\n async findPage(\n releaseId: GetReleaseActions.Request['params']['releaseId'],\n query?: GetReleaseActions.Request['query']\n ) {\n const release = await strapi.db.query(RELEASE_MODEL_UID).findOne({\n where: { id: releaseId },\n select: ['id'],\n });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const dbQuery = strapi.get('query-params').transform(RELEASE_ACTION_MODEL_UID, query ?? {});\n const { results: actions, pagination } = await strapi.db\n .query(RELEASE_ACTION_MODEL_UID)\n .findPage({\n ...dbQuery,\n where: {\n release: releaseId,\n },\n });\n\n // For each contentType on the release, we create a custom populate object for nested relations\n const populateBuilderService = strapi.plugin('content-manager').service('populate-builder');\n\n const actionsWithEntry = await async.map(actions, async (action: ReleaseAction) => {\n // @ts-expect-error - Core.Service type is not a function\n const populate = await populateBuilderService(action.contentType)\n .populateDeep(Infinity)\n .build();\n\n const entry = await getEntry(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n populate,\n status: action.type === 'publish' ? 'draft' : 'published',\n },\n { strapi }\n );\n\n return {\n ...action,\n entry,\n status: entry ? await getEntryStatus(action.contentType, entry) : null,\n };\n });\n\n return {\n results: actionsWithEntry,\n pagination,\n };\n },\n\n async groupActions(actions: ReleaseAction[], groupBy: ReleaseActionGroupBy) {\n const contentTypeUids = actions.reduce<ReleaseAction['contentType'][]>((acc, action) => {\n if (!acc.includes(action.contentType)) {\n acc.push(action.contentType);\n }\n\n return acc;\n }, []);\n const allReleaseContentTypesDictionary = await getContentTypesDataForActions(contentTypeUids);\n const allLocalesDictionary = await getLocalesDataForActions();\n\n const formattedData = actions.map((action: ReleaseAction) => {\n const { mainField, displayName } = allReleaseContentTypesDictionary[action.contentType];\n\n return {\n ...action,\n locale: action.locale ? allLocalesDictionary[action.locale] : null,\n contentType: {\n displayName,\n mainFieldValue: action.entry[mainField],\n uid: action.contentType,\n },\n };\n });\n\n const groupName = getGroupName(groupBy);\n return _.groupBy(groupName)(formattedData);\n },\n\n async getContentTypeModelsFromActions(actions: ReleaseAction[]) {\n const contentTypeUids = actions.reduce<ReleaseAction['contentType'][]>((acc, action) => {\n if (!acc.includes(action.contentType)) {\n acc.push(action.contentType);\n }\n\n return acc;\n }, []);\n\n const workflowsService = strapi.plugin('review-workflows').service('workflows');\n\n const contentTypeModelsMap = await async.reduce(contentTypeUids)(\n async (\n accPromise: Promise<GetReleaseActions.Response['meta']['contentTypes']>,\n contentTypeUid: ReleaseAction['contentType']\n ) => {\n const acc = await accPromise;\n const contentTypeModel = strapi.getModel(contentTypeUid);\n\n const workflow = await workflowsService.getAssignedWorkflow(contentTypeUid, {\n populate: 'stageRequiredToPublish',\n });\n\n acc[contentTypeUid] = {\n ...contentTypeModel,\n hasReviewWorkflow: !!workflow,\n stageRequiredToPublish: workflow?.stageRequiredToPublish,\n };\n\n return acc;\n },\n {}\n );\n\n return contentTypeModelsMap;\n },\n\n async countActions(\n query: Modules.EntityService.Params.Pick<typeof RELEASE_ACTION_MODEL_UID, 'filters'>\n ) {\n const dbQuery = strapi.get('query-params').transform(RELEASE_ACTION_MODEL_UID, query ?? {});\n\n return strapi.db.query(RELEASE_ACTION_MODEL_UID).count(dbQuery);\n },\n\n async update(\n actionId: UpdateReleaseAction.Request['params']['actionId'],\n releaseId: UpdateReleaseAction.Request['params']['releaseId'],\n update: UpdateReleaseAction.Request['body']\n ) {\n const action = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findOne({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n });\n\n if (!action) {\n throw new errors.NotFoundError(\n `Action with id ${actionId} not found in release with id ${releaseId} or it is already published`\n );\n }\n\n const actionStatus =\n update.type === 'publish'\n ? await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n {\n strapi,\n }\n )\n : true;\n\n const updatedAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n data: {\n ...update,\n isEntryValid: actionStatus,\n },\n });\n\n getService('release', { strapi }).updateReleaseStatus(releaseId);\n\n return updatedAction;\n },\n\n async delete(\n actionId: DeleteReleaseAction.Request['params']['actionId'],\n releaseId: DeleteReleaseAction.Request['params']['releaseId']\n ) {\n const deletedAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).delete({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n });\n\n if (!deletedAction) {\n throw new errors.NotFoundError(\n `Action with id ${actionId} not found in release with id ${releaseId} or it is already published`\n );\n }\n\n getService('release', { strapi }).updateReleaseStatus(releaseId);\n\n return deletedAction;\n },\n\n async validateActionsByContentTypes(contentTypeUids: UID.ContentType[]) {\n const actions = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findMany({\n where: {\n contentType: {\n $in: contentTypeUids,\n },\n // We only want to validate actions that are going to be published\n type: 'publish',\n release: {\n releasedAt: {\n $null: true,\n },\n },\n },\n populate: { release: true },\n });\n\n const releasesUpdated: Data.ID[] = [];\n\n await async.map(actions, async (action: ReleaseAction) => {\n const isValid = await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n { strapi }\n );\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: action.id,\n },\n data: {\n isEntryValid: isValid,\n },\n });\n\n if (!releasesUpdated.includes(action.release.id)) {\n releasesUpdated.push(action.release.id);\n }\n\n return {\n id: action.id,\n isEntryValid: isValid,\n };\n });\n\n if (releasesUpdated.length > 0) {\n await async.map(releasesUpdated, async (releaseId: number) => {\n await getService('release', { strapi }).updateReleaseStatus(releaseId);\n });\n }\n },\n };\n};\n\nexport type ReleaseActionService = ReturnType<typeof createReleaseActionService>;\n\nexport default createReleaseActionService;\n"],"names":["getGroupName","queryValue","_","getOr","createReleaseActionService","strapi","getLocalesDataForActions","plugin","allLocales","service","find","reduce","acc","locale","code","name","getContentTypesDataForActions","contentTypesUids","contentManagerContentTypeService","contentTypesData","contentTypeUid","contentTypeConfig","findConfiguration","uid","mainField","settings","displayName","getModel","info","create","releaseId","action","disableUpdateReleaseStatus","validateEntryData","validateUniqueEntry","getService","Promise","all","contentType","entryDocumentId","model","kind","document","db","query","findOne","select","errors","NotFoundError","documentId","release","RELEASE_MODEL_UID","where","id","releasedAt","ValidationError","actionStatus","type","getDraftEntryValidStatus","releaseAction","RELEASE_ACTION_MODEL_UID","data","isEntryValid","populate","updateReleaseStatus","findPage","dbQuery","get","transform","results","actions","pagination","populateBuilderService","actionsWithEntry","async","map","populateDeep","Infinity","build","entry","getEntry","status","getEntryStatus","groupActions","groupBy","contentTypeUids","includes","push","allReleaseContentTypesDictionary","allLocalesDictionary","formattedData","mainFieldValue","groupName","getContentTypeModelsFromActions","workflowsService","contentTypeModelsMap","accPromise","contentTypeModel","workflow","getAssignedWorkflow","hasReviewWorkflow","stageRequiredToPublish","countActions","count","update","actionId","$null","updatedAction","delete","deletedAction","validateActionsByContentTypes","findMany","$in","releasesUpdated","isValid","length"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"release-action.js","sources":["../../../server/src/services/release-action.ts"],"sourcesContent":["import { errors, async } from '@strapi/utils';\n\nimport type { Core, Internal, Modules, UID, Data } from '@strapi/types';\n\nimport _ from 'lodash/fp';\n\nimport { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID } from '../constants';\n\nimport type {\n CreateReleaseAction,\n GetReleaseActions,\n ReleaseAction,\n ReleaseActionGroupBy,\n UpdateReleaseAction,\n DeleteReleaseAction,\n} from '../../../shared/contracts/release-actions';\nimport type { Entity } from '../../../shared/types';\nimport { getService, getDraftEntryValidStatus, getEntry, getEntryStatus } from '../utils';\n\nconst getGroupName = (queryValue: string) => {\n switch (queryValue) {\n case 'contentType':\n return 'contentType.displayName';\n case 'type':\n return 'type';\n case 'locale':\n return _.getOr('No locale', 'locale.name');\n default:\n return 'contentType.displayName';\n }\n};\n\nexport interface Locale extends Entity {\n name: string;\n code: string;\n}\n\ntype LocaleDictionary = {\n [key: Locale['code']]: Pick<Locale, 'name' | 'code'>;\n};\n\nconst createReleaseActionService = ({ strapi }: { strapi: Core.Strapi }) => {\n const getLocalesDataForActions = async () => {\n if (!strapi.plugin('i18n')) {\n return {};\n }\n\n const allLocales: Locale[] = (await strapi.plugin('i18n').service('locales').find()) || [];\n return allLocales.reduce<LocaleDictionary>((acc, locale) => {\n acc[locale.code] = { name: locale.name, code: locale.code };\n\n return acc;\n }, {});\n };\n\n const getContentTypesDataForActions = async (\n contentTypesUids: ReleaseAction['contentType'][]\n ) => {\n const contentManagerContentTypeService = strapi\n .plugin('content-manager')\n .service('content-types');\n\n const contentTypesData: Record<\n Internal.UID.ContentType,\n { mainField: string; displayName: string }\n > = {};\n for (const contentTypeUid of contentTypesUids) {\n const contentTypeConfig = await contentManagerContentTypeService.findConfiguration({\n uid: contentTypeUid,\n });\n\n contentTypesData[contentTypeUid] = {\n mainField: contentTypeConfig.settings.mainField,\n displayName: strapi.getModel(contentTypeUid).info.displayName,\n };\n }\n\n return contentTypesData;\n };\n\n return {\n async create(\n releaseId: CreateReleaseAction.Request['params']['releaseId'],\n action: CreateReleaseAction.Request['body'],\n { disableUpdateReleaseStatus = false }: { disableUpdateReleaseStatus?: boolean } = {}\n ) {\n const { validateEntryData, validateUniqueEntry } = getService('release-validation', {\n strapi,\n });\n\n await Promise.all([\n validateEntryData(action.contentType, action.entryDocumentId),\n validateUniqueEntry(releaseId, action),\n ]);\n\n // If we are adding a singleType, we need to append the documentId of that singleType\n const model = strapi.contentType(action.contentType);\n if (model.kind === 'singleType') {\n const document = await strapi.db.query(model.uid).findOne({ select: ['documentId'] });\n\n if (!document) {\n throw new errors.NotFoundError(`No entry found for contentType ${action.contentType}`);\n }\n\n action.entryDocumentId = document.documentId;\n }\n\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n if (release.releasedAt) {\n throw new errors.ValidationError('Release already published');\n }\n\n // If the action is a publish, check if the entry is valid\n // If the action is an unpublish, skip the validation\n const actionStatus =\n action.type === 'publish'\n ? await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n {\n strapi,\n }\n )\n : true;\n\n const releaseAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).create({\n data: {\n ...action,\n release: release.id,\n isEntryValid: actionStatus,\n },\n populate: { release: { select: ['id'] } },\n });\n\n if (!disableUpdateReleaseStatus) {\n getService('release', { strapi }).updateReleaseStatus(release.id);\n }\n\n return releaseAction;\n },\n\n async findPage(\n releaseId: GetReleaseActions.Request['params']['releaseId'],\n query?: GetReleaseActions.Request['query']\n ) {\n const release = await strapi.db.query(RELEASE_MODEL_UID).findOne({\n where: { id: releaseId },\n select: ['id'],\n });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const dbQuery = strapi.get('query-params').transform(RELEASE_ACTION_MODEL_UID, query ?? {});\n const { results: actions, pagination } = await strapi.db\n .query(RELEASE_ACTION_MODEL_UID)\n .findPage({\n ...dbQuery,\n where: {\n release: releaseId,\n },\n });\n\n // For each contentType on the release, we create a custom populate object for nested relations\n const populateBuilderService = strapi.plugin('content-manager').service('populate-builder');\n\n const actionsWithEntry = await async.map(actions, async (action: ReleaseAction) => {\n // @ts-expect-error - Core.Service type is not a function\n const populate = await populateBuilderService(action.contentType)\n .populateDeep(Infinity)\n .build();\n\n const entry = await getEntry(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n populate,\n status: action.type === 'publish' ? 'draft' : 'published',\n },\n { strapi }\n );\n\n return {\n ...action,\n entry,\n status: entry ? await getEntryStatus(action.contentType, entry) : null,\n };\n });\n\n return {\n results: actionsWithEntry,\n pagination,\n };\n },\n\n async groupActions(actions: ReleaseAction[], groupBy: ReleaseActionGroupBy) {\n const contentTypeUids = actions.reduce<ReleaseAction['contentType'][]>((acc, action) => {\n if (!acc.includes(action.contentType)) {\n acc.push(action.contentType);\n }\n\n return acc;\n }, []);\n const allReleaseContentTypesDictionary = await getContentTypesDataForActions(contentTypeUids);\n const allLocalesDictionary = await getLocalesDataForActions();\n\n const formattedData = actions.map((action: ReleaseAction) => {\n const { mainField, displayName } = allReleaseContentTypesDictionary[action.contentType];\n\n return {\n ...action,\n locale: action.locale ? allLocalesDictionary[action.locale] : null,\n contentType: {\n displayName,\n mainFieldValue: action.entry[mainField],\n uid: action.contentType,\n },\n };\n });\n\n const groupName = getGroupName(groupBy);\n return _.groupBy(groupName)(formattedData);\n },\n\n async getContentTypeModelsFromActions(actions: ReleaseAction[]) {\n const contentTypeUids = actions.reduce<ReleaseAction['contentType'][]>((acc, action) => {\n if (!acc.includes(action.contentType)) {\n acc.push(action.contentType);\n }\n\n return acc;\n }, []);\n\n const workflowsService = strapi.plugin('review-workflows').service('workflows');\n\n const contentTypeModelsMap = await async.reduce(contentTypeUids)(\n async (\n accPromise: Promise<GetReleaseActions.Response['meta']['contentTypes']>,\n contentTypeUid: ReleaseAction['contentType']\n ) => {\n const acc = await accPromise;\n const contentTypeModel = strapi.getModel(contentTypeUid);\n\n // Workflows service may not be available depending on the license\n const workflow = await workflowsService?.getAssignedWorkflow(contentTypeUid, {\n populate: 'stageRequiredToPublish',\n });\n\n acc[contentTypeUid] = {\n ...contentTypeModel,\n hasReviewWorkflow: !!workflow,\n stageRequiredToPublish: workflow?.stageRequiredToPublish,\n };\n\n return acc;\n },\n {}\n );\n\n return contentTypeModelsMap;\n },\n\n async countActions(\n query: Modules.EntityService.Params.Pick<typeof RELEASE_ACTION_MODEL_UID, 'filters'>\n ) {\n const dbQuery = strapi.get('query-params').transform(RELEASE_ACTION_MODEL_UID, query ?? {});\n\n return strapi.db.query(RELEASE_ACTION_MODEL_UID).count(dbQuery);\n },\n\n async update(\n actionId: UpdateReleaseAction.Request['params']['actionId'],\n releaseId: UpdateReleaseAction.Request['params']['releaseId'],\n update: UpdateReleaseAction.Request['body']\n ) {\n const action = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findOne({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n });\n\n if (!action) {\n throw new errors.NotFoundError(\n `Action with id ${actionId} not found in release with id ${releaseId} or it is already published`\n );\n }\n\n const actionStatus =\n update.type === 'publish'\n ? await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n {\n strapi,\n }\n )\n : true;\n\n const updatedAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n data: {\n ...update,\n isEntryValid: actionStatus,\n },\n });\n\n getService('release', { strapi }).updateReleaseStatus(releaseId);\n\n return updatedAction;\n },\n\n async delete(\n actionId: DeleteReleaseAction.Request['params']['actionId'],\n releaseId: DeleteReleaseAction.Request['params']['releaseId']\n ) {\n const deletedAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).delete({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n });\n\n if (!deletedAction) {\n throw new errors.NotFoundError(\n `Action with id ${actionId} not found in release with id ${releaseId} or it is already published`\n );\n }\n\n getService('release', { strapi }).updateReleaseStatus(releaseId);\n\n return deletedAction;\n },\n\n async validateActionsByContentTypes(contentTypeUids: UID.ContentType[]) {\n const actions = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findMany({\n where: {\n contentType: {\n $in: contentTypeUids,\n },\n // We only want to validate actions that are going to be published\n type: 'publish',\n release: {\n releasedAt: {\n $null: true,\n },\n },\n },\n populate: { release: true },\n });\n\n const releasesUpdated: Data.ID[] = [];\n\n await async.map(actions, async (action: ReleaseAction) => {\n const isValid = await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n { strapi }\n );\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: action.id,\n },\n data: {\n isEntryValid: isValid,\n },\n });\n\n if (!releasesUpdated.includes(action.release.id)) {\n releasesUpdated.push(action.release.id);\n }\n\n return {\n id: action.id,\n isEntryValid: isValid,\n };\n });\n\n if (releasesUpdated.length > 0) {\n await async.map(releasesUpdated, async (releaseId: number) => {\n await getService('release', { strapi }).updateReleaseStatus(releaseId);\n });\n }\n },\n };\n};\n\nexport type ReleaseActionService = ReturnType<typeof createReleaseActionService>;\n\nexport default createReleaseActionService;\n"],"names":["getGroupName","queryValue","_","getOr","createReleaseActionService","strapi","getLocalesDataForActions","plugin","allLocales","service","find","reduce","acc","locale","code","name","getContentTypesDataForActions","contentTypesUids","contentManagerContentTypeService","contentTypesData","contentTypeUid","contentTypeConfig","findConfiguration","uid","mainField","settings","displayName","getModel","info","create","releaseId","action","disableUpdateReleaseStatus","validateEntryData","validateUniqueEntry","getService","Promise","all","contentType","entryDocumentId","model","kind","document","db","query","findOne","select","errors","NotFoundError","documentId","release","RELEASE_MODEL_UID","where","id","releasedAt","ValidationError","actionStatus","type","getDraftEntryValidStatus","releaseAction","RELEASE_ACTION_MODEL_UID","data","isEntryValid","populate","updateReleaseStatus","findPage","dbQuery","get","transform","results","actions","pagination","populateBuilderService","actionsWithEntry","async","map","populateDeep","Infinity","build","entry","getEntry","status","getEntryStatus","groupActions","groupBy","contentTypeUids","includes","push","allReleaseContentTypesDictionary","allLocalesDictionary","formattedData","mainFieldValue","groupName","getContentTypeModelsFromActions","workflowsService","contentTypeModelsMap","accPromise","contentTypeModel","workflow","getAssignedWorkflow","hasReviewWorkflow","stageRequiredToPublish","countActions","count","update","actionId","$null","updatedAction","delete","deletedAction","validateActionsByContentTypes","findMany","$in","releasesUpdated","isValid","length"],"mappings":";;;;;;;AAmBA,MAAMA,eAAe,CAACC,UAAAA,GAAAA;IACpB,OAAQA,UAAAA;QACN,KAAK,aAAA;YACH,OAAO,yBAAA;QACT,KAAK,MAAA;YACH,OAAO,MAAA;QACT,KAAK,QAAA;YACH,OAAOC,CAAAA,CAAEC,KAAK,CAAC,WAAa,EAAA,aAAA,CAAA;AAC9B,QAAA;YACE,OAAO,yBAAA;AACX;AACF,CAAA;AAWA,MAAMC,0BAA6B,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AACrE,IAAA,MAAMC,wBAA2B,GAAA,UAAA;AAC/B,QAAA,IAAI,CAACD,MAAAA,CAAOE,MAAM,CAAC,MAAS,CAAA,EAAA;AAC1B,YAAA,OAAO,EAAC;AACV;AAEA,QAAA,MAAMC,UAAuB,GAAC,MAAMH,MAAAA,CAAOE,MAAM,CAAC,MAAQE,CAAAA,CAAAA,OAAO,CAAC,SAAA,CAAA,CAAWC,IAAI,EAAA,IAAO,EAAE;AAC1F,QAAA,OAAOF,UAAWG,CAAAA,MAAM,CAAmB,CAACC,GAAKC,EAAAA,MAAAA,GAAAA;AAC/CD,YAAAA,GAAG,CAACC,MAAAA,CAAOC,IAAI,CAAC,GAAG;AAAEC,gBAAAA,IAAAA,EAAMF,OAAOE,IAAI;AAAED,gBAAAA,IAAAA,EAAMD,OAAOC;AAAK,aAAA;YAE1D,OAAOF,GAAAA;AACT,SAAA,EAAG,EAAC,CAAA;AACN,KAAA;AAEA,IAAA,MAAMI,gCAAgC,OACpCC,gBAAAA,GAAAA;AAEA,QAAA,MAAMC,mCAAmCb,MACtCE,CAAAA,MAAM,CAAC,iBAAA,CAAA,CACPE,OAAO,CAAC,eAAA,CAAA;AAEX,QAAA,MAAMU,mBAGF,EAAC;QACL,KAAK,MAAMC,kBAAkBH,gBAAkB,CAAA;AAC7C,YAAA,MAAMI,iBAAoB,GAAA,MAAMH,gCAAiCI,CAAAA,iBAAiB,CAAC;gBACjFC,GAAKH,EAAAA;AACP,aAAA,CAAA;YAEAD,gBAAgB,CAACC,eAAe,GAAG;gBACjCI,SAAWH,EAAAA,iBAAAA,CAAkBI,QAAQ,CAACD,SAAS;AAC/CE,gBAAAA,WAAAA,EAAarB,OAAOsB,QAAQ,CAACP,cAAgBQ,CAAAA,CAAAA,IAAI,CAACF;AACpD,aAAA;AACF;QAEA,OAAOP,gBAAAA;AACT,KAAA;IAEA,OAAO;QACL,MAAMU,MAAAA,CAAAA,CACJC,SAA6D,EAC7DC,MAA2C,EAC3C,EAAEC,0BAAAA,GAA6B,KAAK,EAA4C,GAAG,EAAE,EAAA;AAErF,YAAA,MAAM,EAAEC,iBAAiB,EAAEC,mBAAmB,EAAE,GAAGC,iBAAW,oBAAsB,EAAA;AAClF9B,gBAAAA;AACF,aAAA,CAAA;YAEA,MAAM+B,OAAAA,CAAQC,GAAG,CAAC;AAChBJ,gBAAAA,iBAAAA,CAAkBF,MAAOO,CAAAA,WAAW,EAAEP,MAAAA,CAAOQ,eAAe,CAAA;AAC5DL,gBAAAA,mBAAAA,CAAoBJ,SAAWC,EAAAA,MAAAA;AAChC,aAAA,CAAA;;AAGD,YAAA,MAAMS,KAAQnC,GAAAA,MAAAA,CAAOiC,WAAW,CAACP,OAAOO,WAAW,CAAA;YACnD,IAAIE,KAAAA,CAAMC,IAAI,KAAK,YAAc,EAAA;gBAC/B,MAAMC,QAAAA,GAAW,MAAMrC,MAAAA,CAAOsC,EAAE,CAACC,KAAK,CAACJ,KAAMjB,CAAAA,GAAG,CAAEsB,CAAAA,OAAO,CAAC;oBAAEC,MAAQ,EAAA;AAAC,wBAAA;AAAa;AAAC,iBAAA,CAAA;AAEnF,gBAAA,IAAI,CAACJ,QAAU,EAAA;oBACb,MAAM,IAAIK,YAAOC,CAAAA,aAAa,CAAC,CAAC,+BAA+B,EAAEjB,MAAAA,CAAOO,WAAW,CAAC,CAAC,CAAA;AACvF;gBAEAP,MAAOQ,CAAAA,eAAe,GAAGG,QAAAA,CAASO,UAAU;AAC9C;YAEA,MAAMC,OAAAA,GAAU,MAAM7C,MAAOsC,CAAAA,EAAE,CAC5BC,KAAK,CAACO,2BACNN,CAAAA,CAAAA,OAAO,CAAC;gBAAEO,KAAO,EAAA;oBAAEC,EAAIvB,EAAAA;AAAU;AAAE,aAAA,CAAA;AAEtC,YAAA,IAAI,CAACoB,OAAS,EAAA;gBACZ,MAAM,IAAIH,aAAOC,aAAa,CAAC,CAAC,wBAAwB,EAAElB,UAAU,CAAC,CAAA;AACvE;YAEA,IAAIoB,OAAAA,CAAQI,UAAU,EAAE;gBACtB,MAAM,IAAIP,YAAOQ,CAAAA,eAAe,CAAC,2BAAA,CAAA;AACnC;;;AAIA,YAAA,MAAMC,eACJzB,MAAO0B,CAAAA,IAAI,KAAK,SAAA,GACZ,MAAMC,8BACJ,CAAA;AACEpB,gBAAAA,WAAAA,EAAaP,OAAOO,WAAW;AAC/BW,gBAAAA,UAAAA,EAAYlB,OAAOQ,eAAe;AAClC1B,gBAAAA,MAAAA,EAAQkB,OAAOlB;aAEjB,EAAA;AACER,gBAAAA;aAGJ,CAAA,GAAA,IAAA;YAEN,MAAMsD,aAAAA,GAAgB,MAAMtD,MAAOsC,CAAAA,EAAE,CAACC,KAAK,CAACgB,kCAA0B/B,CAAAA,CAAAA,MAAM,CAAC;gBAC3EgC,IAAM,EAAA;AACJ,oBAAA,GAAG9B,MAAM;AACTmB,oBAAAA,OAAAA,EAASA,QAAQG,EAAE;oBACnBS,YAAcN,EAAAA;AAChB,iBAAA;gBACAO,QAAU,EAAA;oBAAEb,OAAS,EAAA;wBAAEJ,MAAQ,EAAA;AAAC,4BAAA;AAAK;AAAC;AAAE;AAC1C,aAAA,CAAA;AAEA,YAAA,IAAI,CAACd,0BAA4B,EAAA;AAC/BG,gBAAAA,gBAAAA,CAAW,SAAW,EAAA;AAAE9B,oBAAAA;iBAAU2D,CAAAA,CAAAA,mBAAmB,CAACd,OAAAA,CAAQG,EAAE,CAAA;AAClE;YAEA,OAAOM,aAAAA;AACT,SAAA;QAEA,MAAMM,QAAAA,CAAAA,CACJnC,SAA2D,EAC3Dc,KAA0C,EAAA;YAE1C,MAAMM,OAAAA,GAAU,MAAM7C,MAAOsC,CAAAA,EAAE,CAACC,KAAK,CAACO,2BAAmBN,CAAAA,CAAAA,OAAO,CAAC;gBAC/DO,KAAO,EAAA;oBAAEC,EAAIvB,EAAAA;AAAU,iBAAA;gBACvBgB,MAAQ,EAAA;AAAC,oBAAA;AAAK;AAChB,aAAA,CAAA;AAEA,YAAA,IAAI,CAACI,OAAS,EAAA;gBACZ,MAAM,IAAIH,aAAOC,aAAa,CAAC,CAAC,wBAAwB,EAAElB,UAAU,CAAC,CAAA;AACvE;YAEA,MAAMoC,OAAAA,GAAU7D,OAAO8D,GAAG,CAAC,gBAAgBC,SAAS,CAACR,kCAA0BhB,EAAAA,KAAAA,IAAS,EAAC,CAAA;AACzF,YAAA,MAAM,EAAEyB,OAAAA,EAASC,OAAO,EAAEC,UAAU,EAAE,GAAG,MAAMlE,MAAAA,CAAOsC,EAAE,CACrDC,KAAK,CAACgB,kCAAAA,CAAAA,CACNK,QAAQ,CAAC;AACR,gBAAA,GAAGC,OAAO;gBACVd,KAAO,EAAA;oBACLF,OAASpB,EAAAA;AACX;AACF,aAAA,CAAA;;AAGF,YAAA,MAAM0C,yBAAyBnE,MAAOE,CAAAA,MAAM,CAAC,iBAAA,CAAA,CAAmBE,OAAO,CAAC,kBAAA,CAAA;AAExE,YAAA,MAAMgE,mBAAmB,MAAMC,WAAAA,CAAMC,GAAG,CAACL,SAAS,OAAOvC,MAAAA,GAAAA;;gBAEvD,MAAMgC,QAAAA,GAAW,MAAMS,sBAAuBzC,CAAAA,MAAAA,CAAOO,WAAW,CAC7DsC,CAAAA,YAAY,CAACC,QAAAA,CAAAA,CACbC,KAAK,EAAA;gBAER,MAAMC,KAAAA,GAAQ,MAAMC,cAClB,CAAA;AACE1C,oBAAAA,WAAAA,EAAaP,OAAOO,WAAW;AAC/BW,oBAAAA,UAAAA,EAAYlB,OAAOQ,eAAe;AAClC1B,oBAAAA,MAAAA,EAAQkB,OAAOlB,MAAM;AACrBkD,oBAAAA,QAAAA;AACAkB,oBAAAA,MAAAA,EAAQlD,MAAO0B,CAAAA,IAAI,KAAK,SAAA,GAAY,OAAU,GAAA;iBAEhD,EAAA;AAAEpD,oBAAAA;AAAO,iBAAA,CAAA;gBAGX,OAAO;AACL,oBAAA,GAAG0B,MAAM;AACTgD,oBAAAA,KAAAA;AACAE,oBAAAA,MAAAA,EAAQF,QAAQ,MAAMG,oBAAAA,CAAenD,MAAOO,CAAAA,WAAW,EAAEyC,KAAS,CAAA,GAAA;AACpE,iBAAA;AACF,aAAA,CAAA;YAEA,OAAO;gBACLV,OAASI,EAAAA,gBAAAA;AACTF,gBAAAA;AACF,aAAA;AACF,SAAA;QAEA,MAAMY,YAAAA,CAAAA,CAAab,OAAwB,EAAEc,OAA6B,EAAA;AACxE,YAAA,MAAMC,eAAkBf,GAAAA,OAAAA,CAAQ3D,MAAM,CAAiC,CAACC,GAAKmB,EAAAA,MAAAA,GAAAA;AAC3E,gBAAA,IAAI,CAACnB,GAAI0E,CAAAA,QAAQ,CAACvD,MAAAA,CAAOO,WAAW,CAAG,EAAA;oBACrC1B,GAAI2E,CAAAA,IAAI,CAACxD,MAAAA,CAAOO,WAAW,CAAA;AAC7B;gBAEA,OAAO1B,GAAAA;AACT,aAAA,EAAG,EAAE,CAAA;YACL,MAAM4E,gCAAAA,GAAmC,MAAMxE,6BAA8BqE,CAAAA,eAAAA,CAAAA;AAC7E,YAAA,MAAMI,uBAAuB,MAAMnF,wBAAAA,EAAAA;AAEnC,YAAA,MAAMoF,aAAgBpB,GAAAA,OAAAA,CAAQK,GAAG,CAAC,CAAC5C,MAAAA,GAAAA;gBACjC,MAAM,EAAEP,SAAS,EAAEE,WAAW,EAAE,GAAG8D,gCAAgC,CAACzD,MAAOO,CAAAA,WAAW,CAAC;gBAEvF,OAAO;AACL,oBAAA,GAAGP,MAAM;oBACTlB,MAAQkB,EAAAA,MAAAA,CAAOlB,MAAM,GAAG4E,oBAAoB,CAAC1D,MAAOlB,CAAAA,MAAM,CAAC,GAAG,IAAA;oBAC9DyB,WAAa,EAAA;AACXZ,wBAAAA,WAAAA;wBACAiE,cAAgB5D,EAAAA,MAAAA,CAAOgD,KAAK,CAACvD,SAAU,CAAA;AACvCD,wBAAAA,GAAAA,EAAKQ,OAAOO;AACd;AACF,iBAAA;AACF,aAAA,CAAA;AAEA,YAAA,MAAMsD,YAAY5F,YAAaoF,CAAAA,OAAAA,CAAAA;YAC/B,OAAOlF,CAAAA,CAAEkF,OAAO,CAACQ,SAAWF,CAAAA,CAAAA,aAAAA,CAAAA;AAC9B,SAAA;AAEA,QAAA,MAAMG,iCAAgCvB,OAAwB,EAAA;AAC5D,YAAA,MAAMe,eAAkBf,GAAAA,OAAAA,CAAQ3D,MAAM,CAAiC,CAACC,GAAKmB,EAAAA,MAAAA,GAAAA;AAC3E,gBAAA,IAAI,CAACnB,GAAI0E,CAAAA,QAAQ,CAACvD,MAAAA,CAAOO,WAAW,CAAG,EAAA;oBACrC1B,GAAI2E,CAAAA,IAAI,CAACxD,MAAAA,CAAOO,WAAW,CAAA;AAC7B;gBAEA,OAAO1B,GAAAA;AACT,aAAA,EAAG,EAAE,CAAA;AAEL,YAAA,MAAMkF,mBAAmBzF,MAAOE,CAAAA,MAAM,CAAC,kBAAA,CAAA,CAAoBE,OAAO,CAAC,WAAA,CAAA;AAEnE,YAAA,MAAMsF,uBAAuB,MAAMrB,WAAAA,CAAM/D,MAAM,CAAC0E,eAAAA,CAAAA,CAC9C,OACEW,UACA5E,EAAAA,cAAAA,GAAAA;AAEA,gBAAA,MAAMR,MAAM,MAAMoF,UAAAA;gBAClB,MAAMC,gBAAAA,GAAmB5F,MAAOsB,CAAAA,QAAQ,CAACP,cAAAA,CAAAA;;AAGzC,gBAAA,MAAM8E,QAAW,GAAA,MAAMJ,gBAAkBK,EAAAA,mBAAAA,CAAoB/E,cAAgB,EAAA;oBAC3E2C,QAAU,EAAA;AACZ,iBAAA,CAAA;gBAEAnD,GAAG,CAACQ,eAAe,GAAG;AACpB,oBAAA,GAAG6E,gBAAgB;AACnBG,oBAAAA,iBAAAA,EAAmB,CAAC,CAACF,QAAAA;AACrBG,oBAAAA,sBAAAA,EAAwBH,QAAUG,EAAAA;AACpC,iBAAA;gBAEA,OAAOzF,GAAAA;AACT,aAAA,EACA,EAAC,CAAA;YAGH,OAAOmF,oBAAAA;AACT,SAAA;AAEA,QAAA,MAAMO,cACJ1D,KAAoF,EAAA;YAEpF,MAAMsB,OAAAA,GAAU7D,OAAO8D,GAAG,CAAC,gBAAgBC,SAAS,CAACR,kCAA0BhB,EAAAA,KAAAA,IAAS,EAAC,CAAA;AAEzF,YAAA,OAAOvC,OAAOsC,EAAE,CAACC,KAAK,CAACgB,kCAAAA,CAAAA,CAA0B2C,KAAK,CAACrC,OAAAA,CAAAA;AACzD,SAAA;AAEA,QAAA,MAAMsC,MACJC,CAAAA,CAAAA,QAA2D,EAC3D3E,SAA6D,EAC7D0E,MAA2C,EAAA;YAE3C,MAAMzE,MAAAA,GAAS,MAAM1B,MAAOsC,CAAAA,EAAE,CAACC,KAAK,CAACgB,kCAA0Bf,CAAAA,CAAAA,OAAO,CAAC;gBACrEO,KAAO,EAAA;oBACLC,EAAIoD,EAAAA,QAAAA;oBACJvD,OAAS,EAAA;wBACPG,EAAIvB,EAAAA,SAAAA;wBACJwB,UAAY,EAAA;4BACVoD,KAAO,EAAA;AACT;AACF;AACF;AACF,aAAA,CAAA;AAEA,YAAA,IAAI,CAAC3E,MAAQ,EAAA;AACX,gBAAA,MAAM,IAAIgB,YAAAA,CAAOC,aAAa,CAC5B,CAAC,eAAe,EAAEyD,QAAAA,CAAS,8BAA8B,EAAE3E,SAAU,CAAA,2BAA2B,CAAC,CAAA;AAErG;AAEA,YAAA,MAAM0B,eACJgD,MAAO/C,CAAAA,IAAI,KAAK,SAAA,GACZ,MAAMC,8BACJ,CAAA;AACEpB,gBAAAA,WAAAA,EAAaP,OAAOO,WAAW;AAC/BW,gBAAAA,UAAAA,EAAYlB,OAAOQ,eAAe;AAClC1B,gBAAAA,MAAAA,EAAQkB,OAAOlB;aAEjB,EAAA;AACER,gBAAAA;aAGJ,CAAA,GAAA,IAAA;YAEN,MAAMsG,aAAAA,GAAgB,MAAMtG,MAAOsC,CAAAA,EAAE,CAACC,KAAK,CAACgB,kCAA0B4C,CAAAA,CAAAA,MAAM,CAAC;gBAC3EpD,KAAO,EAAA;oBACLC,EAAIoD,EAAAA,QAAAA;oBACJvD,OAAS,EAAA;wBACPG,EAAIvB,EAAAA,SAAAA;wBACJwB,UAAY,EAAA;4BACVoD,KAAO,EAAA;AACT;AACF;AACF,iBAAA;gBACA7C,IAAM,EAAA;AACJ,oBAAA,GAAG2C,MAAM;oBACT1C,YAAcN,EAAAA;AAChB;AACF,aAAA,CAAA;AAEArB,YAAAA,gBAAAA,CAAW,SAAW,EAAA;AAAE9B,gBAAAA;AAAO,aAAA,CAAA,CAAG2D,mBAAmB,CAAClC,SAAAA,CAAAA;YAEtD,OAAO6E,aAAAA;AACT,SAAA;QAEA,MAAMC,MAAAA,CAAAA,CACJH,QAA2D,EAC3D3E,SAA6D,EAAA;YAE7D,MAAM+E,aAAAA,GAAgB,MAAMxG,MAAOsC,CAAAA,EAAE,CAACC,KAAK,CAACgB,kCAA0BgD,CAAAA,CAAAA,MAAM,CAAC;gBAC3ExD,KAAO,EAAA;oBACLC,EAAIoD,EAAAA,QAAAA;oBACJvD,OAAS,EAAA;wBACPG,EAAIvB,EAAAA,SAAAA;wBACJwB,UAAY,EAAA;4BACVoD,KAAO,EAAA;AACT;AACF;AACF;AACF,aAAA,CAAA;AAEA,YAAA,IAAI,CAACG,aAAe,EAAA;AAClB,gBAAA,MAAM,IAAI9D,YAAAA,CAAOC,aAAa,CAC5B,CAAC,eAAe,EAAEyD,QAAAA,CAAS,8BAA8B,EAAE3E,SAAU,CAAA,2BAA2B,CAAC,CAAA;AAErG;AAEAK,YAAAA,gBAAAA,CAAW,SAAW,EAAA;AAAE9B,gBAAAA;AAAO,aAAA,CAAA,CAAG2D,mBAAmB,CAAClC,SAAAA,CAAAA;YAEtD,OAAO+E,aAAAA;AACT,SAAA;AAEA,QAAA,MAAMC,+BAA8BzB,eAAkC,EAAA;YACpE,MAAMf,OAAAA,GAAU,MAAMjE,MAAOsC,CAAAA,EAAE,CAACC,KAAK,CAACgB,kCAA0BmD,CAAAA,CAAAA,QAAQ,CAAC;gBACvE3D,KAAO,EAAA;oBACLd,WAAa,EAAA;wBACX0E,GAAK3B,EAAAA;AACP,qBAAA;;oBAEA5B,IAAM,EAAA,SAAA;oBACNP,OAAS,EAAA;wBACPI,UAAY,EAAA;4BACVoD,KAAO,EAAA;AACT;AACF;AACF,iBAAA;gBACA3C,QAAU,EAAA;oBAAEb,OAAS,EAAA;AAAK;AAC5B,aAAA,CAAA;AAEA,YAAA,MAAM+D,kBAA6B,EAAE;AAErC,YAAA,MAAMvC,WAAMC,CAAAA,GAAG,CAACL,OAAAA,EAAS,OAAOvC,MAAAA,GAAAA;gBAC9B,MAAMmF,OAAAA,GAAU,MAAMxD,8BACpB,CAAA;AACEpB,oBAAAA,WAAAA,EAAaP,OAAOO,WAAW;AAC/BW,oBAAAA,UAAAA,EAAYlB,OAAOQ,eAAe;AAClC1B,oBAAAA,MAAAA,EAAQkB,OAAOlB;iBAEjB,EAAA;AAAER,oBAAAA;AAAO,iBAAA,CAAA;AAGX,gBAAA,MAAMA,OAAOsC,EAAE,CAACC,KAAK,CAACgB,kCAAAA,CAAAA,CAA0B4C,MAAM,CAAC;oBACrDpD,KAAO,EAAA;AACLC,wBAAAA,EAAAA,EAAItB,OAAOsB;AACb,qBAAA;oBACAQ,IAAM,EAAA;wBACJC,YAAcoD,EAAAA;AAChB;AACF,iBAAA,CAAA;gBAEA,IAAI,CAACD,gBAAgB3B,QAAQ,CAACvD,OAAOmB,OAAO,CAACG,EAAE,CAAG,EAAA;AAChD4D,oBAAAA,eAAAA,CAAgB1B,IAAI,CAACxD,MAAOmB,CAAAA,OAAO,CAACG,EAAE,CAAA;AACxC;gBAEA,OAAO;AACLA,oBAAAA,EAAAA,EAAItB,OAAOsB,EAAE;oBACbS,YAAcoD,EAAAA;AAChB,iBAAA;AACF,aAAA,CAAA;YAEA,IAAID,eAAAA,CAAgBE,MAAM,GAAG,CAAG,EAAA;AAC9B,gBAAA,MAAMzC,WAAMC,CAAAA,GAAG,CAACsC,eAAAA,EAAiB,OAAOnF,SAAAA,GAAAA;AACtC,oBAAA,MAAMK,iBAAW,SAAW,EAAA;AAAE9B,wBAAAA;AAAO,qBAAA,CAAA,CAAG2D,mBAAmB,CAAClC,SAAAA,CAAAA;AAC9D,iBAAA,CAAA;AACF;AACF;AACF,KAAA;AACF;;;;"}
|
|
@@ -185,7 +185,8 @@ const createReleaseActionService = ({ strapi })=>{
|
|
|
185
185
|
const contentTypeModelsMap = await async.reduce(contentTypeUids)(async (accPromise, contentTypeUid)=>{
|
|
186
186
|
const acc = await accPromise;
|
|
187
187
|
const contentTypeModel = strapi.getModel(contentTypeUid);
|
|
188
|
-
|
|
188
|
+
// Workflows service may not be available depending on the license
|
|
189
|
+
const workflow = await workflowsService?.getAssignedWorkflow(contentTypeUid, {
|
|
189
190
|
populate: 'stageRequiredToPublish'
|
|
190
191
|
});
|
|
191
192
|
acc[contentTypeUid] = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-action.mjs","sources":["../../../server/src/services/release-action.ts"],"sourcesContent":["import { errors, async } from '@strapi/utils';\n\nimport type { Core, Internal, Modules, UID, Data } from '@strapi/types';\n\nimport _ from 'lodash/fp';\n\nimport { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID } from '../constants';\n\nimport type {\n CreateReleaseAction,\n GetReleaseActions,\n ReleaseAction,\n ReleaseActionGroupBy,\n UpdateReleaseAction,\n DeleteReleaseAction,\n} from '../../../shared/contracts/release-actions';\nimport type { Entity } from '../../../shared/types';\nimport { getService, getDraftEntryValidStatus, getEntry, getEntryStatus } from '../utils';\n\nconst getGroupName = (queryValue: string) => {\n switch (queryValue) {\n case 'contentType':\n return 'contentType.displayName';\n case 'type':\n return 'type';\n case 'locale':\n return _.getOr('No locale', 'locale.name');\n default:\n return 'contentType.displayName';\n }\n};\n\nexport interface Locale extends Entity {\n name: string;\n code: string;\n}\n\ntype LocaleDictionary = {\n [key: Locale['code']]: Pick<Locale, 'name' | 'code'>;\n};\n\nconst createReleaseActionService = ({ strapi }: { strapi: Core.Strapi }) => {\n const getLocalesDataForActions = async () => {\n if (!strapi.plugin('i18n')) {\n return {};\n }\n\n const allLocales: Locale[] = (await strapi.plugin('i18n').service('locales').find()) || [];\n return allLocales.reduce<LocaleDictionary>((acc, locale) => {\n acc[locale.code] = { name: locale.name, code: locale.code };\n\n return acc;\n }, {});\n };\n\n const getContentTypesDataForActions = async (\n contentTypesUids: ReleaseAction['contentType'][]\n ) => {\n const contentManagerContentTypeService = strapi\n .plugin('content-manager')\n .service('content-types');\n\n const contentTypesData: Record<\n Internal.UID.ContentType,\n { mainField: string; displayName: string }\n > = {};\n for (const contentTypeUid of contentTypesUids) {\n const contentTypeConfig = await contentManagerContentTypeService.findConfiguration({\n uid: contentTypeUid,\n });\n\n contentTypesData[contentTypeUid] = {\n mainField: contentTypeConfig.settings.mainField,\n displayName: strapi.getModel(contentTypeUid).info.displayName,\n };\n }\n\n return contentTypesData;\n };\n\n return {\n async create(\n releaseId: CreateReleaseAction.Request['params']['releaseId'],\n action: CreateReleaseAction.Request['body'],\n { disableUpdateReleaseStatus = false }: { disableUpdateReleaseStatus?: boolean } = {}\n ) {\n const { validateEntryData, validateUniqueEntry } = getService('release-validation', {\n strapi,\n });\n\n await Promise.all([\n validateEntryData(action.contentType, action.entryDocumentId),\n validateUniqueEntry(releaseId, action),\n ]);\n\n // If we are adding a singleType, we need to append the documentId of that singleType\n const model = strapi.contentType(action.contentType);\n if (model.kind === 'singleType') {\n const document = await strapi.db.query(model.uid).findOne({ select: ['documentId'] });\n\n if (!document) {\n throw new errors.NotFoundError(`No entry found for contentType ${action.contentType}`);\n }\n\n action.entryDocumentId = document.documentId;\n }\n\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n if (release.releasedAt) {\n throw new errors.ValidationError('Release already published');\n }\n\n // If the action is a publish, check if the entry is valid\n // If the action is an unpublish, skip the validation\n const actionStatus =\n action.type === 'publish'\n ? await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n {\n strapi,\n }\n )\n : true;\n\n const releaseAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).create({\n data: {\n ...action,\n release: release.id,\n isEntryValid: actionStatus,\n },\n populate: { release: { select: ['id'] } },\n });\n\n if (!disableUpdateReleaseStatus) {\n getService('release', { strapi }).updateReleaseStatus(release.id);\n }\n\n return releaseAction;\n },\n\n async findPage(\n releaseId: GetReleaseActions.Request['params']['releaseId'],\n query?: GetReleaseActions.Request['query']\n ) {\n const release = await strapi.db.query(RELEASE_MODEL_UID).findOne({\n where: { id: releaseId },\n select: ['id'],\n });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const dbQuery = strapi.get('query-params').transform(RELEASE_ACTION_MODEL_UID, query ?? {});\n const { results: actions, pagination } = await strapi.db\n .query(RELEASE_ACTION_MODEL_UID)\n .findPage({\n ...dbQuery,\n where: {\n release: releaseId,\n },\n });\n\n // For each contentType on the release, we create a custom populate object for nested relations\n const populateBuilderService = strapi.plugin('content-manager').service('populate-builder');\n\n const actionsWithEntry = await async.map(actions, async (action: ReleaseAction) => {\n // @ts-expect-error - Core.Service type is not a function\n const populate = await populateBuilderService(action.contentType)\n .populateDeep(Infinity)\n .build();\n\n const entry = await getEntry(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n populate,\n status: action.type === 'publish' ? 'draft' : 'published',\n },\n { strapi }\n );\n\n return {\n ...action,\n entry,\n status: entry ? await getEntryStatus(action.contentType, entry) : null,\n };\n });\n\n return {\n results: actionsWithEntry,\n pagination,\n };\n },\n\n async groupActions(actions: ReleaseAction[], groupBy: ReleaseActionGroupBy) {\n const contentTypeUids = actions.reduce<ReleaseAction['contentType'][]>((acc, action) => {\n if (!acc.includes(action.contentType)) {\n acc.push(action.contentType);\n }\n\n return acc;\n }, []);\n const allReleaseContentTypesDictionary = await getContentTypesDataForActions(contentTypeUids);\n const allLocalesDictionary = await getLocalesDataForActions();\n\n const formattedData = actions.map((action: ReleaseAction) => {\n const { mainField, displayName } = allReleaseContentTypesDictionary[action.contentType];\n\n return {\n ...action,\n locale: action.locale ? allLocalesDictionary[action.locale] : null,\n contentType: {\n displayName,\n mainFieldValue: action.entry[mainField],\n uid: action.contentType,\n },\n };\n });\n\n const groupName = getGroupName(groupBy);\n return _.groupBy(groupName)(formattedData);\n },\n\n async getContentTypeModelsFromActions(actions: ReleaseAction[]) {\n const contentTypeUids = actions.reduce<ReleaseAction['contentType'][]>((acc, action) => {\n if (!acc.includes(action.contentType)) {\n acc.push(action.contentType);\n }\n\n return acc;\n }, []);\n\n const workflowsService = strapi.plugin('review-workflows').service('workflows');\n\n const contentTypeModelsMap = await async.reduce(contentTypeUids)(\n async (\n accPromise: Promise<GetReleaseActions.Response['meta']['contentTypes']>,\n contentTypeUid: ReleaseAction['contentType']\n ) => {\n const acc = await accPromise;\n const contentTypeModel = strapi.getModel(contentTypeUid);\n\n const workflow = await workflowsService.getAssignedWorkflow(contentTypeUid, {\n populate: 'stageRequiredToPublish',\n });\n\n acc[contentTypeUid] = {\n ...contentTypeModel,\n hasReviewWorkflow: !!workflow,\n stageRequiredToPublish: workflow?.stageRequiredToPublish,\n };\n\n return acc;\n },\n {}\n );\n\n return contentTypeModelsMap;\n },\n\n async countActions(\n query: Modules.EntityService.Params.Pick<typeof RELEASE_ACTION_MODEL_UID, 'filters'>\n ) {\n const dbQuery = strapi.get('query-params').transform(RELEASE_ACTION_MODEL_UID, query ?? {});\n\n return strapi.db.query(RELEASE_ACTION_MODEL_UID).count(dbQuery);\n },\n\n async update(\n actionId: UpdateReleaseAction.Request['params']['actionId'],\n releaseId: UpdateReleaseAction.Request['params']['releaseId'],\n update: UpdateReleaseAction.Request['body']\n ) {\n const action = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findOne({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n });\n\n if (!action) {\n throw new errors.NotFoundError(\n `Action with id ${actionId} not found in release with id ${releaseId} or it is already published`\n );\n }\n\n const actionStatus =\n update.type === 'publish'\n ? await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n {\n strapi,\n }\n )\n : true;\n\n const updatedAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n data: {\n ...update,\n isEntryValid: actionStatus,\n },\n });\n\n getService('release', { strapi }).updateReleaseStatus(releaseId);\n\n return updatedAction;\n },\n\n async delete(\n actionId: DeleteReleaseAction.Request['params']['actionId'],\n releaseId: DeleteReleaseAction.Request['params']['releaseId']\n ) {\n const deletedAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).delete({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n });\n\n if (!deletedAction) {\n throw new errors.NotFoundError(\n `Action with id ${actionId} not found in release with id ${releaseId} or it is already published`\n );\n }\n\n getService('release', { strapi }).updateReleaseStatus(releaseId);\n\n return deletedAction;\n },\n\n async validateActionsByContentTypes(contentTypeUids: UID.ContentType[]) {\n const actions = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findMany({\n where: {\n contentType: {\n $in: contentTypeUids,\n },\n // We only want to validate actions that are going to be published\n type: 'publish',\n release: {\n releasedAt: {\n $null: true,\n },\n },\n },\n populate: { release: true },\n });\n\n const releasesUpdated: Data.ID[] = [];\n\n await async.map(actions, async (action: ReleaseAction) => {\n const isValid = await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n { strapi }\n );\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: action.id,\n },\n data: {\n isEntryValid: isValid,\n },\n });\n\n if (!releasesUpdated.includes(action.release.id)) {\n releasesUpdated.push(action.release.id);\n }\n\n return {\n id: action.id,\n isEntryValid: isValid,\n };\n });\n\n if (releasesUpdated.length > 0) {\n await async.map(releasesUpdated, async (releaseId: number) => {\n await getService('release', { strapi }).updateReleaseStatus(releaseId);\n });\n }\n },\n };\n};\n\nexport type ReleaseActionService = ReturnType<typeof createReleaseActionService>;\n\nexport default createReleaseActionService;\n"],"names":["getGroupName","queryValue","_","getOr","createReleaseActionService","strapi","getLocalesDataForActions","plugin","allLocales","service","find","reduce","acc","locale","code","name","getContentTypesDataForActions","contentTypesUids","contentManagerContentTypeService","contentTypesData","contentTypeUid","contentTypeConfig","findConfiguration","uid","mainField","settings","displayName","getModel","info","create","releaseId","action","disableUpdateReleaseStatus","validateEntryData","validateUniqueEntry","getService","Promise","all","contentType","entryDocumentId","model","kind","document","db","query","findOne","select","errors","NotFoundError","documentId","release","RELEASE_MODEL_UID","where","id","releasedAt","ValidationError","actionStatus","type","getDraftEntryValidStatus","releaseAction","RELEASE_ACTION_MODEL_UID","data","isEntryValid","populate","updateReleaseStatus","findPage","dbQuery","get","transform","results","actions","pagination","populateBuilderService","actionsWithEntry","async","map","populateDeep","Infinity","build","entry","getEntry","status","getEntryStatus","groupActions","groupBy","contentTypeUids","includes","push","allReleaseContentTypesDictionary","allLocalesDictionary","formattedData","mainFieldValue","groupName","getContentTypeModelsFromActions","workflowsService","contentTypeModelsMap","accPromise","contentTypeModel","workflow","getAssignedWorkflow","hasReviewWorkflow","stageRequiredToPublish","countActions","count","update","actionId","$null","updatedAction","delete","deletedAction","validateActionsByContentTypes","findMany","$in","releasesUpdated","isValid","length"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"release-action.mjs","sources":["../../../server/src/services/release-action.ts"],"sourcesContent":["import { errors, async } from '@strapi/utils';\n\nimport type { Core, Internal, Modules, UID, Data } from '@strapi/types';\n\nimport _ from 'lodash/fp';\n\nimport { RELEASE_ACTION_MODEL_UID, RELEASE_MODEL_UID } from '../constants';\n\nimport type {\n CreateReleaseAction,\n GetReleaseActions,\n ReleaseAction,\n ReleaseActionGroupBy,\n UpdateReleaseAction,\n DeleteReleaseAction,\n} from '../../../shared/contracts/release-actions';\nimport type { Entity } from '../../../shared/types';\nimport { getService, getDraftEntryValidStatus, getEntry, getEntryStatus } from '../utils';\n\nconst getGroupName = (queryValue: string) => {\n switch (queryValue) {\n case 'contentType':\n return 'contentType.displayName';\n case 'type':\n return 'type';\n case 'locale':\n return _.getOr('No locale', 'locale.name');\n default:\n return 'contentType.displayName';\n }\n};\n\nexport interface Locale extends Entity {\n name: string;\n code: string;\n}\n\ntype LocaleDictionary = {\n [key: Locale['code']]: Pick<Locale, 'name' | 'code'>;\n};\n\nconst createReleaseActionService = ({ strapi }: { strapi: Core.Strapi }) => {\n const getLocalesDataForActions = async () => {\n if (!strapi.plugin('i18n')) {\n return {};\n }\n\n const allLocales: Locale[] = (await strapi.plugin('i18n').service('locales').find()) || [];\n return allLocales.reduce<LocaleDictionary>((acc, locale) => {\n acc[locale.code] = { name: locale.name, code: locale.code };\n\n return acc;\n }, {});\n };\n\n const getContentTypesDataForActions = async (\n contentTypesUids: ReleaseAction['contentType'][]\n ) => {\n const contentManagerContentTypeService = strapi\n .plugin('content-manager')\n .service('content-types');\n\n const contentTypesData: Record<\n Internal.UID.ContentType,\n { mainField: string; displayName: string }\n > = {};\n for (const contentTypeUid of contentTypesUids) {\n const contentTypeConfig = await contentManagerContentTypeService.findConfiguration({\n uid: contentTypeUid,\n });\n\n contentTypesData[contentTypeUid] = {\n mainField: contentTypeConfig.settings.mainField,\n displayName: strapi.getModel(contentTypeUid).info.displayName,\n };\n }\n\n return contentTypesData;\n };\n\n return {\n async create(\n releaseId: CreateReleaseAction.Request['params']['releaseId'],\n action: CreateReleaseAction.Request['body'],\n { disableUpdateReleaseStatus = false }: { disableUpdateReleaseStatus?: boolean } = {}\n ) {\n const { validateEntryData, validateUniqueEntry } = getService('release-validation', {\n strapi,\n });\n\n await Promise.all([\n validateEntryData(action.contentType, action.entryDocumentId),\n validateUniqueEntry(releaseId, action),\n ]);\n\n // If we are adding a singleType, we need to append the documentId of that singleType\n const model = strapi.contentType(action.contentType);\n if (model.kind === 'singleType') {\n const document = await strapi.db.query(model.uid).findOne({ select: ['documentId'] });\n\n if (!document) {\n throw new errors.NotFoundError(`No entry found for contentType ${action.contentType}`);\n }\n\n action.entryDocumentId = document.documentId;\n }\n\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n if (release.releasedAt) {\n throw new errors.ValidationError('Release already published');\n }\n\n // If the action is a publish, check if the entry is valid\n // If the action is an unpublish, skip the validation\n const actionStatus =\n action.type === 'publish'\n ? await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n {\n strapi,\n }\n )\n : true;\n\n const releaseAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).create({\n data: {\n ...action,\n release: release.id,\n isEntryValid: actionStatus,\n },\n populate: { release: { select: ['id'] } },\n });\n\n if (!disableUpdateReleaseStatus) {\n getService('release', { strapi }).updateReleaseStatus(release.id);\n }\n\n return releaseAction;\n },\n\n async findPage(\n releaseId: GetReleaseActions.Request['params']['releaseId'],\n query?: GetReleaseActions.Request['query']\n ) {\n const release = await strapi.db.query(RELEASE_MODEL_UID).findOne({\n where: { id: releaseId },\n select: ['id'],\n });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const dbQuery = strapi.get('query-params').transform(RELEASE_ACTION_MODEL_UID, query ?? {});\n const { results: actions, pagination } = await strapi.db\n .query(RELEASE_ACTION_MODEL_UID)\n .findPage({\n ...dbQuery,\n where: {\n release: releaseId,\n },\n });\n\n // For each contentType on the release, we create a custom populate object for nested relations\n const populateBuilderService = strapi.plugin('content-manager').service('populate-builder');\n\n const actionsWithEntry = await async.map(actions, async (action: ReleaseAction) => {\n // @ts-expect-error - Core.Service type is not a function\n const populate = await populateBuilderService(action.contentType)\n .populateDeep(Infinity)\n .build();\n\n const entry = await getEntry(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n populate,\n status: action.type === 'publish' ? 'draft' : 'published',\n },\n { strapi }\n );\n\n return {\n ...action,\n entry,\n status: entry ? await getEntryStatus(action.contentType, entry) : null,\n };\n });\n\n return {\n results: actionsWithEntry,\n pagination,\n };\n },\n\n async groupActions(actions: ReleaseAction[], groupBy: ReleaseActionGroupBy) {\n const contentTypeUids = actions.reduce<ReleaseAction['contentType'][]>((acc, action) => {\n if (!acc.includes(action.contentType)) {\n acc.push(action.contentType);\n }\n\n return acc;\n }, []);\n const allReleaseContentTypesDictionary = await getContentTypesDataForActions(contentTypeUids);\n const allLocalesDictionary = await getLocalesDataForActions();\n\n const formattedData = actions.map((action: ReleaseAction) => {\n const { mainField, displayName } = allReleaseContentTypesDictionary[action.contentType];\n\n return {\n ...action,\n locale: action.locale ? allLocalesDictionary[action.locale] : null,\n contentType: {\n displayName,\n mainFieldValue: action.entry[mainField],\n uid: action.contentType,\n },\n };\n });\n\n const groupName = getGroupName(groupBy);\n return _.groupBy(groupName)(formattedData);\n },\n\n async getContentTypeModelsFromActions(actions: ReleaseAction[]) {\n const contentTypeUids = actions.reduce<ReleaseAction['contentType'][]>((acc, action) => {\n if (!acc.includes(action.contentType)) {\n acc.push(action.contentType);\n }\n\n return acc;\n }, []);\n\n const workflowsService = strapi.plugin('review-workflows').service('workflows');\n\n const contentTypeModelsMap = await async.reduce(contentTypeUids)(\n async (\n accPromise: Promise<GetReleaseActions.Response['meta']['contentTypes']>,\n contentTypeUid: ReleaseAction['contentType']\n ) => {\n const acc = await accPromise;\n const contentTypeModel = strapi.getModel(contentTypeUid);\n\n // Workflows service may not be available depending on the license\n const workflow = await workflowsService?.getAssignedWorkflow(contentTypeUid, {\n populate: 'stageRequiredToPublish',\n });\n\n acc[contentTypeUid] = {\n ...contentTypeModel,\n hasReviewWorkflow: !!workflow,\n stageRequiredToPublish: workflow?.stageRequiredToPublish,\n };\n\n return acc;\n },\n {}\n );\n\n return contentTypeModelsMap;\n },\n\n async countActions(\n query: Modules.EntityService.Params.Pick<typeof RELEASE_ACTION_MODEL_UID, 'filters'>\n ) {\n const dbQuery = strapi.get('query-params').transform(RELEASE_ACTION_MODEL_UID, query ?? {});\n\n return strapi.db.query(RELEASE_ACTION_MODEL_UID).count(dbQuery);\n },\n\n async update(\n actionId: UpdateReleaseAction.Request['params']['actionId'],\n releaseId: UpdateReleaseAction.Request['params']['releaseId'],\n update: UpdateReleaseAction.Request['body']\n ) {\n const action = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findOne({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n });\n\n if (!action) {\n throw new errors.NotFoundError(\n `Action with id ${actionId} not found in release with id ${releaseId} or it is already published`\n );\n }\n\n const actionStatus =\n update.type === 'publish'\n ? await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n {\n strapi,\n }\n )\n : true;\n\n const updatedAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n data: {\n ...update,\n isEntryValid: actionStatus,\n },\n });\n\n getService('release', { strapi }).updateReleaseStatus(releaseId);\n\n return updatedAction;\n },\n\n async delete(\n actionId: DeleteReleaseAction.Request['params']['actionId'],\n releaseId: DeleteReleaseAction.Request['params']['releaseId']\n ) {\n const deletedAction = await strapi.db.query(RELEASE_ACTION_MODEL_UID).delete({\n where: {\n id: actionId,\n release: {\n id: releaseId,\n releasedAt: {\n $null: true,\n },\n },\n },\n });\n\n if (!deletedAction) {\n throw new errors.NotFoundError(\n `Action with id ${actionId} not found in release with id ${releaseId} or it is already published`\n );\n }\n\n getService('release', { strapi }).updateReleaseStatus(releaseId);\n\n return deletedAction;\n },\n\n async validateActionsByContentTypes(contentTypeUids: UID.ContentType[]) {\n const actions = await strapi.db.query(RELEASE_ACTION_MODEL_UID).findMany({\n where: {\n contentType: {\n $in: contentTypeUids,\n },\n // We only want to validate actions that are going to be published\n type: 'publish',\n release: {\n releasedAt: {\n $null: true,\n },\n },\n },\n populate: { release: true },\n });\n\n const releasesUpdated: Data.ID[] = [];\n\n await async.map(actions, async (action: ReleaseAction) => {\n const isValid = await getDraftEntryValidStatus(\n {\n contentType: action.contentType,\n documentId: action.entryDocumentId,\n locale: action.locale,\n },\n { strapi }\n );\n\n await strapi.db.query(RELEASE_ACTION_MODEL_UID).update({\n where: {\n id: action.id,\n },\n data: {\n isEntryValid: isValid,\n },\n });\n\n if (!releasesUpdated.includes(action.release.id)) {\n releasesUpdated.push(action.release.id);\n }\n\n return {\n id: action.id,\n isEntryValid: isValid,\n };\n });\n\n if (releasesUpdated.length > 0) {\n await async.map(releasesUpdated, async (releaseId: number) => {\n await getService('release', { strapi }).updateReleaseStatus(releaseId);\n });\n }\n },\n };\n};\n\nexport type ReleaseActionService = ReturnType<typeof createReleaseActionService>;\n\nexport default createReleaseActionService;\n"],"names":["getGroupName","queryValue","_","getOr","createReleaseActionService","strapi","getLocalesDataForActions","plugin","allLocales","service","find","reduce","acc","locale","code","name","getContentTypesDataForActions","contentTypesUids","contentManagerContentTypeService","contentTypesData","contentTypeUid","contentTypeConfig","findConfiguration","uid","mainField","settings","displayName","getModel","info","create","releaseId","action","disableUpdateReleaseStatus","validateEntryData","validateUniqueEntry","getService","Promise","all","contentType","entryDocumentId","model","kind","document","db","query","findOne","select","errors","NotFoundError","documentId","release","RELEASE_MODEL_UID","where","id","releasedAt","ValidationError","actionStatus","type","getDraftEntryValidStatus","releaseAction","RELEASE_ACTION_MODEL_UID","data","isEntryValid","populate","updateReleaseStatus","findPage","dbQuery","get","transform","results","actions","pagination","populateBuilderService","actionsWithEntry","async","map","populateDeep","Infinity","build","entry","getEntry","status","getEntryStatus","groupActions","groupBy","contentTypeUids","includes","push","allReleaseContentTypesDictionary","allLocalesDictionary","formattedData","mainFieldValue","groupName","getContentTypeModelsFromActions","workflowsService","contentTypeModelsMap","accPromise","contentTypeModel","workflow","getAssignedWorkflow","hasReviewWorkflow","stageRequiredToPublish","countActions","count","update","actionId","$null","updatedAction","delete","deletedAction","validateActionsByContentTypes","findMany","$in","releasesUpdated","isValid","length"],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var nodeSchedule = require('node-schedule');
|
|
4
3
|
var utils = require('@strapi/utils');
|
|
5
4
|
var index = require('../utils/index.js');
|
|
6
5
|
var constants = require('../constants.js');
|
|
@@ -18,26 +17,31 @@ const createSchedulingService = ({ strapi })=>{
|
|
|
18
17
|
if (!release) {
|
|
19
18
|
throw new utils.errors.NotFoundError(`No release found for id ${releaseId}`);
|
|
20
19
|
}
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
const taskName = `publishRelease_${releaseId}`;
|
|
21
|
+
strapi.cron.add({
|
|
22
|
+
[taskName]: {
|
|
23
|
+
async task () {
|
|
24
|
+
try {
|
|
25
|
+
await index.getService('release', {
|
|
26
|
+
strapi
|
|
27
|
+
}).publish(releaseId);
|
|
28
|
+
// @TODO: Trigger webhook with success message
|
|
29
|
+
} catch (error) {
|
|
30
|
+
// @TODO: Trigger webhook with error message
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
options: scheduleDate
|
|
29
34
|
}
|
|
30
|
-
this.cancel(releaseId);
|
|
31
35
|
});
|
|
32
36
|
if (scheduledJobs.has(releaseId)) {
|
|
33
37
|
this.cancel(releaseId);
|
|
34
38
|
}
|
|
35
|
-
scheduledJobs.set(releaseId,
|
|
39
|
+
scheduledJobs.set(releaseId, taskName);
|
|
36
40
|
return scheduledJobs;
|
|
37
41
|
},
|
|
38
42
|
cancel (releaseId) {
|
|
39
43
|
if (scheduledJobs.has(releaseId)) {
|
|
40
|
-
scheduledJobs.get(releaseId)
|
|
44
|
+
strapi.cron.remove(scheduledJobs.get(releaseId));
|
|
41
45
|
scheduledJobs.delete(releaseId);
|
|
42
46
|
}
|
|
43
47
|
return scheduledJobs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scheduling.js","sources":["../../../server/src/services/scheduling.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"scheduling.js","sources":["../../../server/src/services/scheduling.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { errors } from '@strapi/utils';\nimport { Release } from '../../../shared/contracts/releases';\nimport { getService } from '../utils';\nimport { RELEASE_MODEL_UID } from '../constants';\n\nconst createSchedulingService = ({ strapi }: { strapi: Core.Strapi }) => {\n const scheduledJobs = new Map<Release['id'], string>();\n\n return {\n async set(releaseId: Release['id'], scheduleDate: Date) {\n const release = await strapi.db\n .query(RELEASE_MODEL_UID)\n .findOne({ where: { id: releaseId, releasedAt: null } });\n\n if (!release) {\n throw new errors.NotFoundError(`No release found for id ${releaseId}`);\n }\n\n const taskName = `publishRelease_${releaseId}`;\n\n strapi.cron.add({\n [taskName]: {\n async task() {\n try {\n await getService('release', { strapi }).publish(releaseId);\n // @TODO: Trigger webhook with success message\n } catch (error) {\n // @TODO: Trigger webhook with error message\n }\n },\n options: scheduleDate,\n },\n });\n\n if (scheduledJobs.has(releaseId)) {\n this.cancel(releaseId);\n }\n\n scheduledJobs.set(releaseId, taskName);\n\n return scheduledJobs;\n },\n\n cancel(releaseId: Release['id']) {\n if (scheduledJobs.has(releaseId)) {\n strapi.cron.remove(scheduledJobs.get(releaseId)!);\n scheduledJobs.delete(releaseId);\n }\n\n return scheduledJobs;\n },\n\n getAll() {\n return scheduledJobs;\n },\n\n /**\n * On bootstrap, we can use this function to make sure to sync the scheduled jobs from the database that are not yet released\n * This is useful in case the server was restarted and the scheduled jobs were lost\n * This also could be used to sync different Strapi instances in case of a cluster\n */\n async syncFromDatabase() {\n const releases = await strapi.db.query(RELEASE_MODEL_UID).findMany({\n where: {\n scheduledAt: {\n $gte: new Date(),\n },\n releasedAt: null,\n },\n });\n\n for (const release of releases) {\n this.set(release.id, release.scheduledAt);\n }\n\n return scheduledJobs;\n },\n };\n};\n\nexport default createSchedulingService;\n"],"names":["createSchedulingService","strapi","scheduledJobs","Map","set","releaseId","scheduleDate","release","db","query","RELEASE_MODEL_UID","findOne","where","id","releasedAt","errors","NotFoundError","taskName","cron","add","task","getService","publish","error","options","has","cancel","remove","get","delete","getAll","syncFromDatabase","releases","findMany","scheduledAt","$gte","Date"],"mappings":";;;;;;AAOA,MAAMA,uBAA0B,GAAA,CAAC,EAAEC,MAAM,EAA2B,GAAA;AAClE,IAAA,MAAMC,gBAAgB,IAAIC,GAAAA,EAAAA;IAE1B,OAAO;QACL,MAAMC,GAAAA,CAAAA,CAAIC,SAAwB,EAAEC,YAAkB,EAAA;YACpD,MAAMC,OAAAA,GAAU,MAAMN,MAAOO,CAAAA,EAAE,CAC5BC,KAAK,CAACC,2BACNC,CAAAA,CAAAA,OAAO,CAAC;gBAAEC,KAAO,EAAA;oBAAEC,EAAIR,EAAAA,SAAAA;oBAAWS,UAAY,EAAA;AAAK;AAAE,aAAA,CAAA;AAExD,YAAA,IAAI,CAACP,OAAS,EAAA;gBACZ,MAAM,IAAIQ,aAAOC,aAAa,CAAC,CAAC,wBAAwB,EAAEX,UAAU,CAAC,CAAA;AACvE;AAEA,YAAA,MAAMY,QAAW,GAAA,CAAC,eAAe,EAAEZ,UAAU,CAAC;YAE9CJ,MAAOiB,CAAAA,IAAI,CAACC,GAAG,CAAC;AACd,gBAAA,CAACF,WAAW;oBACV,MAAMG,IAAAA,CAAAA,GAAAA;wBACJ,IAAI;AACF,4BAAA,MAAMC,iBAAW,SAAW,EAAA;AAAEpB,gCAAAA;AAAO,6BAAA,CAAA,CAAGqB,OAAO,CAACjB,SAAAA,CAAAA;;AAElD,yBAAA,CAAE,OAAOkB,KAAO,EAAA;;AAEhB;AACF,qBAAA;oBACAC,OAASlB,EAAAA;AACX;AACF,aAAA,CAAA;YAEA,IAAIJ,aAAAA,CAAcuB,GAAG,CAACpB,SAAY,CAAA,EAAA;gBAChC,IAAI,CAACqB,MAAM,CAACrB,SAAAA,CAAAA;AACd;YAEAH,aAAcE,CAAAA,GAAG,CAACC,SAAWY,EAAAA,QAAAA,CAAAA;YAE7B,OAAOf,aAAAA;AACT,SAAA;AAEAwB,QAAAA,MAAAA,CAAAA,CAAOrB,SAAwB,EAAA;YAC7B,IAAIH,aAAAA,CAAcuB,GAAG,CAACpB,SAAY,CAAA,EAAA;AAChCJ,gBAAAA,MAAAA,CAAOiB,IAAI,CAACS,MAAM,CAACzB,aAAAA,CAAc0B,GAAG,CAACvB,SAAAA,CAAAA,CAAAA;AACrCH,gBAAAA,aAAAA,CAAc2B,MAAM,CAACxB,SAAAA,CAAAA;AACvB;YAEA,OAAOH,aAAAA;AACT,SAAA;AAEA4B,QAAAA,MAAAA,CAAAA,GAAAA;YACE,OAAO5B,aAAAA;AACT,SAAA;AAEA;;;;AAIC,QACD,MAAM6B,gBAAAA,CAAAA,GAAAA;YACJ,MAAMC,QAAAA,GAAW,MAAM/B,MAAOO,CAAAA,EAAE,CAACC,KAAK,CAACC,2BAAmBuB,CAAAA,CAAAA,QAAQ,CAAC;gBACjErB,KAAO,EAAA;oBACLsB,WAAa,EAAA;AACXC,wBAAAA,IAAAA,EAAM,IAAIC,IAAAA;AACZ,qBAAA;oBACAtB,UAAY,EAAA;AACd;AACF,aAAA,CAAA;YAEA,KAAK,MAAMP,WAAWyB,QAAU,CAAA;AAC9B,gBAAA,IAAI,CAAC5B,GAAG,CAACG,QAAQM,EAAE,EAAEN,QAAQ2B,WAAW,CAAA;AAC1C;YAEA,OAAOhC,aAAAA;AACT;AACF,KAAA;AACF;;;;"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { scheduleJob } from 'node-schedule';
|
|
2
1
|
import { errors } from '@strapi/utils';
|
|
3
2
|
import { getService } from '../utils/index.mjs';
|
|
4
3
|
import { RELEASE_MODEL_UID } from '../constants.mjs';
|
|
@@ -16,26 +15,31 @@ const createSchedulingService = ({ strapi })=>{
|
|
|
16
15
|
if (!release) {
|
|
17
16
|
throw new errors.NotFoundError(`No release found for id ${releaseId}`);
|
|
18
17
|
}
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
18
|
+
const taskName = `publishRelease_${releaseId}`;
|
|
19
|
+
strapi.cron.add({
|
|
20
|
+
[taskName]: {
|
|
21
|
+
async task () {
|
|
22
|
+
try {
|
|
23
|
+
await getService('release', {
|
|
24
|
+
strapi
|
|
25
|
+
}).publish(releaseId);
|
|
26
|
+
// @TODO: Trigger webhook with success message
|
|
27
|
+
} catch (error) {
|
|
28
|
+
// @TODO: Trigger webhook with error message
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
options: scheduleDate
|
|
27
32
|
}
|
|
28
|
-
this.cancel(releaseId);
|
|
29
33
|
});
|
|
30
34
|
if (scheduledJobs.has(releaseId)) {
|
|
31
35
|
this.cancel(releaseId);
|
|
32
36
|
}
|
|
33
|
-
scheduledJobs.set(releaseId,
|
|
37
|
+
scheduledJobs.set(releaseId, taskName);
|
|
34
38
|
return scheduledJobs;
|
|
35
39
|
},
|
|
36
40
|
cancel (releaseId) {
|
|
37
41
|
if (scheduledJobs.has(releaseId)) {
|
|
38
|
-
scheduledJobs.get(releaseId)
|
|
42
|
+
strapi.cron.remove(scheduledJobs.get(releaseId));
|
|
39
43
|
scheduledJobs.delete(releaseId);
|
|
40
44
|
}
|
|
41
45
|
return scheduledJobs;
|