@strapi/content-releases 5.12.1 → 5.12.2
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/assets/purchase-page-illustration-dark.svg.js +6 -0
- package/dist/admin/assets/purchase-page-illustration-dark.svg.js.map +1 -0
- package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs +4 -0
- package/dist/admin/assets/purchase-page-illustration-dark.svg.mjs.map +1 -0
- package/dist/admin/assets/purchase-page-illustration-light.svg.js +6 -0
- package/dist/admin/assets/purchase-page-illustration-light.svg.js.map +1 -0
- package/dist/admin/assets/purchase-page-illustration-light.svg.mjs +4 -0
- package/dist/admin/assets/purchase-page-illustration-light.svg.mjs.map +1 -0
- package/dist/admin/components/EntryValidationPopover.js +344 -0
- package/dist/admin/components/EntryValidationPopover.js.map +1 -0
- package/dist/admin/components/EntryValidationPopover.mjs +342 -0
- package/dist/admin/components/EntryValidationPopover.mjs.map +1 -0
- package/dist/admin/components/RelativeTime.js +76 -0
- package/dist/admin/components/RelativeTime.js.map +1 -0
- package/dist/admin/components/RelativeTime.mjs +55 -0
- package/dist/admin/components/RelativeTime.mjs.map +1 -0
- package/dist/admin/components/ReleaseAction.js +201 -0
- package/dist/admin/components/ReleaseAction.js.map +1 -0
- package/dist/admin/components/ReleaseAction.mjs +199 -0
- package/dist/admin/components/ReleaseAction.mjs.map +1 -0
- package/dist/admin/components/ReleaseActionMenu.js +243 -0
- package/dist/admin/components/ReleaseActionMenu.js.map +1 -0
- package/dist/admin/components/ReleaseActionMenu.mjs +222 -0
- package/dist/admin/components/ReleaseActionMenu.mjs.map +1 -0
- package/dist/admin/components/ReleaseActionModal.js +268 -0
- package/dist/admin/components/ReleaseActionModal.js.map +1 -0
- package/dist/admin/components/ReleaseActionModal.mjs +244 -0
- package/dist/admin/components/ReleaseActionModal.mjs.map +1 -0
- package/dist/admin/components/ReleaseActionOptions.js +104 -0
- package/dist/admin/components/ReleaseActionOptions.js.map +1 -0
- package/dist/admin/components/ReleaseActionOptions.mjs +102 -0
- package/dist/admin/components/ReleaseActionOptions.mjs.map +1 -0
- package/dist/admin/components/ReleaseListCell.js +103 -0
- package/dist/admin/components/ReleaseListCell.js.map +1 -0
- package/dist/admin/components/ReleaseListCell.mjs +100 -0
- package/dist/admin/components/ReleaseListCell.mjs.map +1 -0
- package/dist/admin/components/ReleaseModal.js +323 -0
- package/dist/admin/components/ReleaseModal.js.map +1 -0
- package/dist/admin/components/ReleaseModal.mjs +302 -0
- package/dist/admin/components/ReleaseModal.mjs.map +1 -0
- package/dist/admin/components/ReleasesPanel.js +138 -0
- package/dist/admin/components/ReleasesPanel.js.map +1 -0
- package/dist/admin/components/ReleasesPanel.mjs +136 -0
- package/dist/admin/components/ReleasesPanel.mjs.map +1 -0
- package/dist/admin/constants.js +77 -0
- package/dist/admin/constants.js.map +1 -0
- package/dist/admin/constants.mjs +75 -0
- package/dist/admin/constants.mjs.map +1 -0
- package/dist/admin/index.js +120 -14
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +121 -13
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/{chunks/hooks-DA5VbUAp.js → modules/hooks.js} +1 -1
- package/dist/admin/modules/hooks.js.map +1 -0
- package/dist/admin/{chunks/hooks-CFk_8Q0b.mjs → modules/hooks.mjs} +2 -2
- package/dist/admin/modules/hooks.mjs.map +1 -0
- package/dist/admin/pages/App.js +29 -0
- package/dist/admin/pages/App.js.map +1 -0
- package/dist/admin/pages/App.mjs +27 -0
- package/dist/admin/pages/App.mjs.map +1 -0
- package/dist/admin/pages/PurchaseContentReleases.js +192 -0
- package/dist/admin/pages/PurchaseContentReleases.js.map +1 -0
- package/dist/admin/pages/PurchaseContentReleases.mjs +190 -0
- package/dist/admin/pages/PurchaseContentReleases.mjs.map +1 -0
- package/dist/admin/pages/ReleaseDetailsPage.js +821 -0
- package/dist/admin/pages/ReleaseDetailsPage.js.map +1 -0
- package/dist/admin/pages/ReleaseDetailsPage.mjs +800 -0
- package/dist/admin/pages/ReleaseDetailsPage.mjs.map +1 -0
- package/dist/admin/pages/ReleasesPage.js +397 -0
- package/dist/admin/pages/ReleasesPage.js.map +1 -0
- package/dist/admin/pages/ReleasesPage.mjs +375 -0
- package/dist/admin/pages/ReleasesPage.mjs.map +1 -0
- package/dist/admin/{chunks/ReleasesSettingsPage-KRcoI1bC.js → pages/ReleasesSettingsPage.js} +9 -17
- package/dist/admin/pages/ReleasesSettingsPage.js.map +1 -0
- package/dist/admin/{chunks/ReleasesSettingsPage-DUKdFdvx.mjs → pages/ReleasesSettingsPage.mjs} +5 -13
- package/dist/admin/pages/ReleasesSettingsPage.mjs.map +1 -0
- package/dist/admin/pluginId.js +6 -0
- package/dist/admin/pluginId.js.map +1 -0
- package/dist/admin/pluginId.mjs +4 -0
- package/dist/admin/pluginId.mjs.map +1 -0
- package/dist/admin/services/release.js +464 -0
- package/dist/admin/services/release.js.map +1 -0
- package/dist/admin/services/release.mjs +447 -0
- package/dist/admin/services/release.mjs.map +1 -0
- package/dist/admin/store/hooks.js +8 -0
- package/dist/admin/store/hooks.js.map +1 -0
- package/dist/admin/store/hooks.mjs +6 -0
- package/dist/admin/store/hooks.mjs.map +1 -0
- package/dist/admin/{chunks/en-BOpqX2t_.js → translations/en.json.js} +2 -2
- package/dist/admin/translations/en.json.js.map +1 -0
- package/dist/admin/{chunks/en-aQo8Bn_U.mjs → translations/en.json.mjs} +1 -1
- package/dist/admin/translations/en.json.mjs.map +1 -0
- package/dist/admin/{chunks/uk-9T9su-bj.js → translations/uk.json.js} +2 -2
- package/dist/admin/translations/uk.json.js.map +1 -0
- package/dist/admin/{chunks/uk-Bp9HotPq.mjs → translations/uk.json.mjs} +1 -1
- package/dist/admin/translations/uk.json.mjs.map +1 -0
- package/dist/admin/utils/api.js +8 -0
- package/dist/admin/utils/api.js.map +1 -0
- package/dist/admin/utils/api.mjs +6 -0
- package/dist/admin/utils/api.mjs.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.js +11 -0
- package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
- package/dist/admin/utils/time.js +42 -0
- package/dist/admin/utils/time.js.map +1 -0
- package/dist/admin/utils/time.mjs +39 -0
- package/dist/admin/utils/time.mjs.map +1 -0
- package/dist/admin/{chunks/schemas-DS7NeFDN.js → validation/schemas.js} +1 -1
- package/dist/admin/validation/schemas.js.map +1 -0
- package/dist/admin/{chunks/schemas-DMt8h1z-.mjs → validation/schemas.mjs} +2 -2
- package/dist/admin/validation/schemas.mjs.map +1 -0
- package/dist/server/bootstrap.js +68 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/bootstrap.mjs +66 -0
- package/dist/server/bootstrap.mjs.map +1 -0
- package/dist/server/constants.js +74 -0
- package/dist/server/constants.js.map +1 -0
- package/dist/server/constants.mjs +69 -0
- package/dist/server/constants.mjs.map +1 -0
- package/dist/server/content-types/index.js +12 -0
- package/dist/server/content-types/index.js.map +1 -0
- package/dist/server/content-types/index.mjs +10 -0
- package/dist/server/content-types/index.mjs.map +1 -0
- package/dist/server/content-types/release/index.js +10 -0
- package/dist/server/content-types/release/index.js.map +1 -0
- package/dist/server/content-types/release/index.mjs +8 -0
- package/dist/server/content-types/release/index.mjs.map +1 -0
- package/dist/server/content-types/release/schema.js +58 -0
- package/dist/server/content-types/release/schema.js.map +1 -0
- package/dist/server/content-types/release/schema.mjs +56 -0
- package/dist/server/content-types/release/schema.mjs.map +1 -0
- package/dist/server/content-types/release-action/index.js +10 -0
- package/dist/server/content-types/release-action/index.js.map +1 -0
- package/dist/server/content-types/release-action/index.mjs +8 -0
- package/dist/server/content-types/release-action/index.mjs.map +1 -0
- package/dist/server/content-types/release-action/schema.js +55 -0
- package/dist/server/content-types/release-action/schema.js.map +1 -0
- package/dist/server/content-types/release-action/schema.mjs +53 -0
- package/dist/server/content-types/release-action/schema.mjs.map +1 -0
- package/dist/server/controllers/index.js +14 -0
- package/dist/server/controllers/index.js.map +1 -0
- package/dist/server/controllers/index.mjs +12 -0
- package/dist/server/controllers/index.mjs.map +1 -0
- package/dist/server/controllers/release-action.js +150 -0
- package/dist/server/controllers/release-action.js.map +1 -0
- package/dist/server/controllers/release-action.mjs +148 -0
- package/dist/server/controllers/release-action.mjs.map +1 -0
- package/dist/server/controllers/release.js +302 -0
- package/dist/server/controllers/release.js.map +1 -0
- package/dist/server/controllers/release.mjs +300 -0
- package/dist/server/controllers/release.mjs.map +1 -0
- package/dist/server/controllers/settings.js +37 -0
- package/dist/server/controllers/settings.js.map +1 -0
- package/dist/server/controllers/settings.mjs +35 -0
- package/dist/server/controllers/settings.mjs.map +1 -0
- package/dist/server/controllers/validation/release-action.js +34 -0
- package/dist/server/controllers/validation/release-action.js.map +1 -0
- package/dist/server/controllers/validation/release-action.mjs +30 -0
- package/dist/server/controllers/validation/release-action.mjs.map +1 -0
- package/dist/server/controllers/validation/release.js +26 -0
- package/dist/server/controllers/validation/release.js.map +1 -0
- package/dist/server/controllers/validation/release.mjs +22 -0
- package/dist/server/controllers/validation/release.mjs.map +1 -0
- package/dist/server/controllers/validation/settings.js +32 -0
- package/dist/server/controllers/validation/settings.js.map +1 -0
- package/dist/server/controllers/validation/settings.mjs +10 -0
- package/dist/server/controllers/validation/settings.mjs.map +1 -0
- package/dist/server/destroy.js +15 -0
- package/dist/server/destroy.js.map +1 -0
- package/dist/server/destroy.mjs +13 -0
- package/dist/server/destroy.mjs.map +1 -0
- package/dist/server/index.js +16 -2336
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +7 -2308
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/middlewares/documents.js +104 -0
- package/dist/server/middlewares/documents.js.map +1 -0
- package/dist/server/middlewares/documents.mjs +101 -0
- package/dist/server/middlewares/documents.mjs.map +1 -0
- package/dist/server/migrations/database/5.0.0-document-id-in-actions.js +51 -0
- package/dist/server/migrations/database/5.0.0-document-id-in-actions.js.map +1 -0
- package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs +49 -0
- package/dist/server/migrations/database/5.0.0-document-id-in-actions.mjs.map +1 -0
- package/dist/server/migrations/index.js +205 -0
- package/dist/server/migrations/index.js.map +1 -0
- package/dist/server/migrations/index.mjs +198 -0
- package/dist/server/migrations/index.mjs.map +1 -0
- package/dist/server/register.js +23 -0
- package/dist/server/register.js.map +1 -0
- package/dist/server/register.mjs +21 -0
- package/dist/server/register.mjs.map +1 -0
- package/dist/server/routes/index.js +14 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/index.mjs +12 -0
- package/dist/server/routes/index.mjs.map +1 -0
- package/dist/server/routes/release-action.js +100 -0
- package/dist/server/routes/release-action.js.map +1 -0
- package/dist/server/routes/release-action.mjs +98 -0
- package/dist/server/routes/release-action.mjs.map +1 -0
- package/dist/server/routes/release.js +154 -0
- package/dist/server/routes/release.js.map +1 -0
- package/dist/server/routes/release.mjs +152 -0
- package/dist/server/routes/release.mjs.map +1 -0
- package/dist/server/routes/settings.js +46 -0
- package/dist/server/routes/settings.js.map +1 -0
- package/dist/server/routes/settings.mjs +44 -0
- package/dist/server/routes/settings.mjs.map +1 -0
- package/dist/server/services/index.js +18 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/index.mjs +16 -0
- package/dist/server/services/index.mjs.map +1 -0
- package/dist/server/services/release-action.js +323 -0
- package/dist/server/services/release-action.js.map +1 -0
- package/dist/server/services/release-action.mjs +321 -0
- package/dist/server/services/release-action.mjs.map +1 -0
- package/dist/server/services/release.js +324 -0
- package/dist/server/services/release.js.map +1 -0
- package/dist/server/services/release.mjs +322 -0
- package/dist/server/services/release.mjs.map +1 -0
- package/dist/server/services/scheduling.js +70 -0
- package/dist/server/services/scheduling.js.map +1 -0
- package/dist/server/services/scheduling.mjs +68 -0
- package/dist/server/services/scheduling.mjs.map +1 -0
- package/dist/server/services/settings.js +34 -0
- package/dist/server/services/settings.js.map +1 -0
- package/dist/server/services/settings.mjs +32 -0
- package/dist/server/services/settings.mjs.map +1 -0
- package/dist/server/services/validation.js +91 -0
- package/dist/server/services/validation.js.map +1 -0
- package/dist/server/services/validation.mjs +86 -0
- package/dist/server/services/validation.mjs.map +1 -0
- package/dist/server/utils/index.js +93 -0
- package/dist/server/utils/index.js.map +1 -0
- package/dist/server/utils/index.mjs +87 -0
- package/dist/server/utils/index.mjs.map +1 -0
- package/package.json +7 -7
- package/dist/admin/chunks/App-BkWgp5q_.mjs +0 -1845
- package/dist/admin/chunks/App-BkWgp5q_.mjs.map +0 -1
- package/dist/admin/chunks/App-CJiqPP7-.js +0 -1866
- package/dist/admin/chunks/App-CJiqPP7-.js.map +0 -1
- package/dist/admin/chunks/PurchaseContentReleases-CzayeVUD.mjs +0 -193
- package/dist/admin/chunks/PurchaseContentReleases-CzayeVUD.mjs.map +0 -1
- package/dist/admin/chunks/PurchaseContentReleases-Z9uEPb5b.js +0 -195
- package/dist/admin/chunks/PurchaseContentReleases-Z9uEPb5b.js.map +0 -1
- package/dist/admin/chunks/ReleasesSettingsPage-DUKdFdvx.mjs.map +0 -1
- package/dist/admin/chunks/ReleasesSettingsPage-KRcoI1bC.js.map +0 -1
- package/dist/admin/chunks/en-BOpqX2t_.js.map +0 -1
- package/dist/admin/chunks/en-aQo8Bn_U.mjs.map +0 -1
- package/dist/admin/chunks/hooks-CFk_8Q0b.mjs.map +0 -1
- package/dist/admin/chunks/hooks-DA5VbUAp.js.map +0 -1
- package/dist/admin/chunks/index-DBUaMD56.mjs +0 -1619
- package/dist/admin/chunks/index-DBUaMD56.mjs.map +0 -1
- package/dist/admin/chunks/index-vjWrvGN3.js +0 -1658
- package/dist/admin/chunks/index-vjWrvGN3.js.map +0 -1
- package/dist/admin/chunks/schemas-DMt8h1z-.mjs.map +0 -1
- package/dist/admin/chunks/schemas-DS7NeFDN.js.map +0 -1
- package/dist/admin/chunks/uk-9T9su-bj.js.map +0 -1
- package/dist/admin/chunks/uk-Bp9HotPq.mjs.map +0 -1
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { RELEASE_ACTION_MODEL_UID } from '../../constants.mjs';
|
|
2
|
+
|
|
3
|
+
var schema = {
|
|
4
|
+
collectionName: 'strapi_releases',
|
|
5
|
+
info: {
|
|
6
|
+
singularName: 'release',
|
|
7
|
+
pluralName: 'releases',
|
|
8
|
+
displayName: 'Release'
|
|
9
|
+
},
|
|
10
|
+
options: {
|
|
11
|
+
draftAndPublish: false
|
|
12
|
+
},
|
|
13
|
+
pluginOptions: {
|
|
14
|
+
'content-manager': {
|
|
15
|
+
visible: false
|
|
16
|
+
},
|
|
17
|
+
'content-type-builder': {
|
|
18
|
+
visible: false
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
attributes: {
|
|
22
|
+
name: {
|
|
23
|
+
type: 'string',
|
|
24
|
+
required: true
|
|
25
|
+
},
|
|
26
|
+
releasedAt: {
|
|
27
|
+
type: 'datetime'
|
|
28
|
+
},
|
|
29
|
+
scheduledAt: {
|
|
30
|
+
type: 'datetime'
|
|
31
|
+
},
|
|
32
|
+
timezone: {
|
|
33
|
+
type: 'string'
|
|
34
|
+
},
|
|
35
|
+
status: {
|
|
36
|
+
type: 'enumeration',
|
|
37
|
+
enum: [
|
|
38
|
+
'ready',
|
|
39
|
+
'blocked',
|
|
40
|
+
'failed',
|
|
41
|
+
'done',
|
|
42
|
+
'empty'
|
|
43
|
+
],
|
|
44
|
+
required: true
|
|
45
|
+
},
|
|
46
|
+
actions: {
|
|
47
|
+
type: 'relation',
|
|
48
|
+
relation: 'oneToMany',
|
|
49
|
+
target: RELEASE_ACTION_MODEL_UID,
|
|
50
|
+
mappedBy: 'release'
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export { schema as default };
|
|
56
|
+
//# sourceMappingURL=schema.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.mjs","sources":["../../../../server/src/content-types/release/schema.ts"],"sourcesContent":["import { RELEASE_ACTION_MODEL_UID } from '../../constants';\n\nexport default {\n collectionName: 'strapi_releases',\n info: {\n singularName: 'release',\n pluralName: 'releases',\n displayName: 'Release',\n },\n options: {\n draftAndPublish: false,\n },\n pluginOptions: {\n 'content-manager': {\n visible: false,\n },\n 'content-type-builder': {\n visible: false,\n },\n },\n attributes: {\n name: {\n type: 'string',\n required: true,\n },\n releasedAt: {\n type: 'datetime',\n },\n scheduledAt: {\n type: 'datetime',\n },\n timezone: {\n type: 'string',\n },\n status: {\n type: 'enumeration',\n enum: ['ready', 'blocked', 'failed', 'done', 'empty'],\n required: true,\n },\n actions: {\n type: 'relation',\n relation: 'oneToMany',\n target: RELEASE_ACTION_MODEL_UID,\n mappedBy: 'release',\n },\n },\n};\n"],"names":["collectionName","info","singularName","pluralName","displayName","options","draftAndPublish","pluginOptions","visible","attributes","name","type","required","releasedAt","scheduledAt","timezone","status","enum","actions","relation","target","RELEASE_ACTION_MODEL_UID","mappedBy"],"mappings":";;AAEA,aAAe;IACbA,cAAgB,EAAA,iBAAA;IAChBC,IAAM,EAAA;QACJC,YAAc,EAAA,SAAA;QACdC,UAAY,EAAA,UAAA;QACZC,WAAa,EAAA;AACf,KAAA;IACAC,OAAS,EAAA;QACPC,eAAiB,EAAA;AACnB,KAAA;IACAC,aAAe,EAAA;QACb,iBAAmB,EAAA;YACjBC,OAAS,EAAA;AACX,SAAA;QACA,sBAAwB,EAAA;YACtBA,OAAS,EAAA;AACX;AACF,KAAA;IACAC,UAAY,EAAA;QACVC,IAAM,EAAA;YACJC,IAAM,EAAA,QAAA;YACNC,QAAU,EAAA;AACZ,SAAA;QACAC,UAAY,EAAA;YACVF,IAAM,EAAA;AACR,SAAA;QACAG,WAAa,EAAA;YACXH,IAAM,EAAA;AACR,SAAA;QACAI,QAAU,EAAA;YACRJ,IAAM,EAAA;AACR,SAAA;QACAK,MAAQ,EAAA;YACNL,IAAM,EAAA,aAAA;YACNM,IAAM,EAAA;AAAC,gBAAA,OAAA;AAAS,gBAAA,SAAA;AAAW,gBAAA,QAAA;AAAU,gBAAA,MAAA;AAAQ,gBAAA;AAAQ,aAAA;YACrDL,QAAU,EAAA;AACZ,SAAA;QACAM,OAAS,EAAA;YACPP,IAAM,EAAA,UAAA;YACNQ,QAAU,EAAA,WAAA;YACVC,MAAQC,EAAAA,wBAAAA;YACRC,QAAU,EAAA;AACZ;AACF;AACF,CAAE;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../server/src/content-types/release-action/index.ts"],"sourcesContent":["import schema from './schema';\n\nexport const releaseAction = {\n schema,\n};\n"],"names":["releaseAction","schema"],"mappings":";;;;MAEaA,aAAgB,GAAA;AAC3BC,IAAAA;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../server/src/content-types/release-action/index.ts"],"sourcesContent":["import schema from './schema';\n\nexport const releaseAction = {\n schema,\n};\n"],"names":["releaseAction","schema"],"mappings":";;MAEaA,aAAgB,GAAA;AAC3BC,IAAAA;AACF;;;;"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var constants = require('../../constants.js');
|
|
4
|
+
|
|
5
|
+
var schema = {
|
|
6
|
+
collectionName: 'strapi_release_actions',
|
|
7
|
+
info: {
|
|
8
|
+
singularName: 'release-action',
|
|
9
|
+
pluralName: 'release-actions',
|
|
10
|
+
displayName: 'Release Action'
|
|
11
|
+
},
|
|
12
|
+
options: {
|
|
13
|
+
draftAndPublish: false
|
|
14
|
+
},
|
|
15
|
+
pluginOptions: {
|
|
16
|
+
'content-manager': {
|
|
17
|
+
visible: false
|
|
18
|
+
},
|
|
19
|
+
'content-type-builder': {
|
|
20
|
+
visible: false
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
attributes: {
|
|
24
|
+
type: {
|
|
25
|
+
type: 'enumeration',
|
|
26
|
+
enum: [
|
|
27
|
+
'publish',
|
|
28
|
+
'unpublish'
|
|
29
|
+
],
|
|
30
|
+
required: true
|
|
31
|
+
},
|
|
32
|
+
contentType: {
|
|
33
|
+
type: 'string',
|
|
34
|
+
required: true
|
|
35
|
+
},
|
|
36
|
+
entryDocumentId: {
|
|
37
|
+
type: 'string'
|
|
38
|
+
},
|
|
39
|
+
locale: {
|
|
40
|
+
type: 'string'
|
|
41
|
+
},
|
|
42
|
+
release: {
|
|
43
|
+
type: 'relation',
|
|
44
|
+
relation: 'manyToOne',
|
|
45
|
+
target: constants.RELEASE_MODEL_UID,
|
|
46
|
+
inversedBy: 'actions'
|
|
47
|
+
},
|
|
48
|
+
isEntryValid: {
|
|
49
|
+
type: 'boolean'
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
module.exports = schema;
|
|
55
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sources":["../../../../server/src/content-types/release-action/schema.ts"],"sourcesContent":["import { RELEASE_MODEL_UID } from '../../constants';\n\nexport default {\n collectionName: 'strapi_release_actions',\n info: {\n singularName: 'release-action',\n pluralName: 'release-actions',\n displayName: 'Release Action',\n },\n options: {\n draftAndPublish: false,\n },\n pluginOptions: {\n 'content-manager': {\n visible: false,\n },\n 'content-type-builder': {\n visible: false,\n },\n },\n attributes: {\n type: {\n type: 'enumeration',\n enum: ['publish', 'unpublish'],\n required: true,\n },\n contentType: {\n type: 'string',\n required: true,\n },\n entryDocumentId: {\n type: 'string',\n },\n locale: {\n type: 'string',\n },\n release: {\n type: 'relation',\n relation: 'manyToOne',\n target: RELEASE_MODEL_UID,\n inversedBy: 'actions',\n },\n isEntryValid: {\n type: 'boolean',\n },\n },\n};\n"],"names":["collectionName","info","singularName","pluralName","displayName","options","draftAndPublish","pluginOptions","visible","attributes","type","enum","required","contentType","entryDocumentId","locale","release","relation","target","RELEASE_MODEL_UID","inversedBy","isEntryValid"],"mappings":";;;;AAEA,aAAe;IACbA,cAAgB,EAAA,wBAAA;IAChBC,IAAM,EAAA;QACJC,YAAc,EAAA,gBAAA;QACdC,UAAY,EAAA,iBAAA;QACZC,WAAa,EAAA;AACf,KAAA;IACAC,OAAS,EAAA;QACPC,eAAiB,EAAA;AACnB,KAAA;IACAC,aAAe,EAAA;QACb,iBAAmB,EAAA;YACjBC,OAAS,EAAA;AACX,SAAA;QACA,sBAAwB,EAAA;YACtBA,OAAS,EAAA;AACX;AACF,KAAA;IACAC,UAAY,EAAA;QACVC,IAAM,EAAA;YACJA,IAAM,EAAA,aAAA;YACNC,IAAM,EAAA;AAAC,gBAAA,SAAA;AAAW,gBAAA;AAAY,aAAA;YAC9BC,QAAU,EAAA;AACZ,SAAA;QACAC,WAAa,EAAA;YACXH,IAAM,EAAA,QAAA;YACNE,QAAU,EAAA;AACZ,SAAA;QACAE,eAAiB,EAAA;YACfJ,IAAM,EAAA;AACR,SAAA;QACAK,MAAQ,EAAA;YACNL,IAAM,EAAA;AACR,SAAA;QACAM,OAAS,EAAA;YACPN,IAAM,EAAA,UAAA;YACNO,QAAU,EAAA,WAAA;YACVC,MAAQC,EAAAA,2BAAAA;YACRC,UAAY,EAAA;AACd,SAAA;QACAC,YAAc,EAAA;YACZX,IAAM,EAAA;AACR;AACF;AACF,CAAE;;;;"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { RELEASE_MODEL_UID } from '../../constants.mjs';
|
|
2
|
+
|
|
3
|
+
var schema = {
|
|
4
|
+
collectionName: 'strapi_release_actions',
|
|
5
|
+
info: {
|
|
6
|
+
singularName: 'release-action',
|
|
7
|
+
pluralName: 'release-actions',
|
|
8
|
+
displayName: 'Release Action'
|
|
9
|
+
},
|
|
10
|
+
options: {
|
|
11
|
+
draftAndPublish: false
|
|
12
|
+
},
|
|
13
|
+
pluginOptions: {
|
|
14
|
+
'content-manager': {
|
|
15
|
+
visible: false
|
|
16
|
+
},
|
|
17
|
+
'content-type-builder': {
|
|
18
|
+
visible: false
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
attributes: {
|
|
22
|
+
type: {
|
|
23
|
+
type: 'enumeration',
|
|
24
|
+
enum: [
|
|
25
|
+
'publish',
|
|
26
|
+
'unpublish'
|
|
27
|
+
],
|
|
28
|
+
required: true
|
|
29
|
+
},
|
|
30
|
+
contentType: {
|
|
31
|
+
type: 'string',
|
|
32
|
+
required: true
|
|
33
|
+
},
|
|
34
|
+
entryDocumentId: {
|
|
35
|
+
type: 'string'
|
|
36
|
+
},
|
|
37
|
+
locale: {
|
|
38
|
+
type: 'string'
|
|
39
|
+
},
|
|
40
|
+
release: {
|
|
41
|
+
type: 'relation',
|
|
42
|
+
relation: 'manyToOne',
|
|
43
|
+
target: RELEASE_MODEL_UID,
|
|
44
|
+
inversedBy: 'actions'
|
|
45
|
+
},
|
|
46
|
+
isEntryValid: {
|
|
47
|
+
type: 'boolean'
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export { schema as default };
|
|
53
|
+
//# sourceMappingURL=schema.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.mjs","sources":["../../../../server/src/content-types/release-action/schema.ts"],"sourcesContent":["import { RELEASE_MODEL_UID } from '../../constants';\n\nexport default {\n collectionName: 'strapi_release_actions',\n info: {\n singularName: 'release-action',\n pluralName: 'release-actions',\n displayName: 'Release Action',\n },\n options: {\n draftAndPublish: false,\n },\n pluginOptions: {\n 'content-manager': {\n visible: false,\n },\n 'content-type-builder': {\n visible: false,\n },\n },\n attributes: {\n type: {\n type: 'enumeration',\n enum: ['publish', 'unpublish'],\n required: true,\n },\n contentType: {\n type: 'string',\n required: true,\n },\n entryDocumentId: {\n type: 'string',\n },\n locale: {\n type: 'string',\n },\n release: {\n type: 'relation',\n relation: 'manyToOne',\n target: RELEASE_MODEL_UID,\n inversedBy: 'actions',\n },\n isEntryValid: {\n type: 'boolean',\n },\n },\n};\n"],"names":["collectionName","info","singularName","pluralName","displayName","options","draftAndPublish","pluginOptions","visible","attributes","type","enum","required","contentType","entryDocumentId","locale","release","relation","target","RELEASE_MODEL_UID","inversedBy","isEntryValid"],"mappings":";;AAEA,aAAe;IACbA,cAAgB,EAAA,wBAAA;IAChBC,IAAM,EAAA;QACJC,YAAc,EAAA,gBAAA;QACdC,UAAY,EAAA,iBAAA;QACZC,WAAa,EAAA;AACf,KAAA;IACAC,OAAS,EAAA;QACPC,eAAiB,EAAA;AACnB,KAAA;IACAC,aAAe,EAAA;QACb,iBAAmB,EAAA;YACjBC,OAAS,EAAA;AACX,SAAA;QACA,sBAAwB,EAAA;YACtBA,OAAS,EAAA;AACX;AACF,KAAA;IACAC,UAAY,EAAA;QACVC,IAAM,EAAA;YACJA,IAAM,EAAA,aAAA;YACNC,IAAM,EAAA;AAAC,gBAAA,SAAA;AAAW,gBAAA;AAAY,aAAA;YAC9BC,QAAU,EAAA;AACZ,SAAA;QACAC,WAAa,EAAA;YACXH,IAAM,EAAA,QAAA;YACNE,QAAU,EAAA;AACZ,SAAA;QACAE,eAAiB,EAAA;YACfJ,IAAM,EAAA;AACR,SAAA;QACAK,MAAQ,EAAA;YACNL,IAAM,EAAA;AACR,SAAA;QACAM,OAAS,EAAA;YACPN,IAAM,EAAA,UAAA;YACNO,QAAU,EAAA,WAAA;YACVC,MAAQC,EAAAA,iBAAAA;YACRC,UAAY,EAAA;AACd,SAAA;QACAC,YAAc,EAAA;YACZX,IAAM,EAAA;AACR;AACF;AACF,CAAE;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var release = require('./release.js');
|
|
4
|
+
var releaseAction = require('./release-action.js');
|
|
5
|
+
var settings = require('./settings.js');
|
|
6
|
+
|
|
7
|
+
const controllers = {
|
|
8
|
+
release,
|
|
9
|
+
'release-action': releaseAction,
|
|
10
|
+
settings
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
exports.controllers = controllers;
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../server/src/controllers/index.ts"],"sourcesContent":["import release from './release';\nimport releaseAction from './release-action';\nimport settings from './settings';\n\nexport const controllers = {\n release,\n 'release-action': releaseAction,\n settings,\n};\n"],"names":["controllers","release","releaseAction","settings"],"mappings":";;;;;;MAIaA,WAAc,GAAA;AACzBC,IAAAA,OAAAA;IACA,gBAAkBC,EAAAA,aAAAA;AAClBC,IAAAA;AACF;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import releaseController from './release.mjs';
|
|
2
|
+
import releaseActionController from './release-action.mjs';
|
|
3
|
+
import settingsController from './settings.mjs';
|
|
4
|
+
|
|
5
|
+
const controllers = {
|
|
6
|
+
release: releaseController,
|
|
7
|
+
'release-action': releaseActionController,
|
|
8
|
+
settings: settingsController
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export { controllers };
|
|
12
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../server/src/controllers/index.ts"],"sourcesContent":["import release from './release';\nimport releaseAction from './release-action';\nimport settings from './settings';\n\nexport const controllers = {\n release,\n 'release-action': releaseAction,\n settings,\n};\n"],"names":["controllers","release","releaseAction","settings"],"mappings":";;;;MAIaA,WAAc,GAAA;AACzBC,aAAAA,iBAAAA;IACA,gBAAkBC,EAAAA,uBAAAA;AAClBC,cAAAA;AACF;;;;"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var utils = require('@strapi/utils');
|
|
4
|
+
var releaseAction = require('./validation/release-action.js');
|
|
5
|
+
var index = require('../utils/index.js');
|
|
6
|
+
var constants = require('../constants.js');
|
|
7
|
+
var validation = require('../services/validation.js');
|
|
8
|
+
|
|
9
|
+
const releaseActionController = {
|
|
10
|
+
async create (ctx) {
|
|
11
|
+
const releaseId = ctx.params.releaseId;
|
|
12
|
+
const releaseActionArgs = ctx.request.body;
|
|
13
|
+
await releaseAction.validateReleaseAction(releaseActionArgs);
|
|
14
|
+
const releaseActionService = index.getService('release-action', {
|
|
15
|
+
strapi
|
|
16
|
+
});
|
|
17
|
+
const releaseAction$1 = await releaseActionService.create(releaseId, releaseActionArgs);
|
|
18
|
+
ctx.created({
|
|
19
|
+
data: releaseAction$1
|
|
20
|
+
});
|
|
21
|
+
},
|
|
22
|
+
async createMany (ctx) {
|
|
23
|
+
const releaseId = ctx.params.releaseId;
|
|
24
|
+
const releaseActionsArgs = ctx.request.body;
|
|
25
|
+
await Promise.all(releaseActionsArgs.map((releaseActionArgs)=>releaseAction.validateReleaseAction(releaseActionArgs)));
|
|
26
|
+
const releaseActionService = index.getService('release-action', {
|
|
27
|
+
strapi
|
|
28
|
+
});
|
|
29
|
+
const releaseService = index.getService('release', {
|
|
30
|
+
strapi
|
|
31
|
+
});
|
|
32
|
+
const releaseActions = await strapi.db.transaction(async ()=>{
|
|
33
|
+
const releaseActions = await Promise.all(releaseActionsArgs.map(async (releaseActionArgs)=>{
|
|
34
|
+
try {
|
|
35
|
+
const action = await releaseActionService.create(releaseId, releaseActionArgs, {
|
|
36
|
+
disableUpdateReleaseStatus: true
|
|
37
|
+
});
|
|
38
|
+
return action;
|
|
39
|
+
} catch (error) {
|
|
40
|
+
// If the entry is already in the release, we don't want to throw an error, so we catch and ignore it
|
|
41
|
+
if (error instanceof validation.AlreadyOnReleaseError) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
}));
|
|
47
|
+
return releaseActions;
|
|
48
|
+
});
|
|
49
|
+
const newReleaseActions = releaseActions.filter((action)=>action !== null);
|
|
50
|
+
if (newReleaseActions.length > 0) {
|
|
51
|
+
releaseService.updateReleaseStatus(releaseId);
|
|
52
|
+
}
|
|
53
|
+
ctx.created({
|
|
54
|
+
data: newReleaseActions,
|
|
55
|
+
meta: {
|
|
56
|
+
entriesAlreadyInRelease: releaseActions.length - newReleaseActions.length,
|
|
57
|
+
totalEntries: releaseActions.length
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
},
|
|
61
|
+
async findMany (ctx) {
|
|
62
|
+
const releaseId = ctx.params.releaseId;
|
|
63
|
+
const permissionsManager = strapi.service('admin::permission').createPermissionsManager({
|
|
64
|
+
ability: ctx.state.userAbility,
|
|
65
|
+
model: constants.RELEASE_ACTION_MODEL_UID
|
|
66
|
+
});
|
|
67
|
+
await releaseAction.validateFindManyActionsParams(ctx.query);
|
|
68
|
+
if (ctx.query.groupBy) {
|
|
69
|
+
if (![
|
|
70
|
+
'action',
|
|
71
|
+
'contentType',
|
|
72
|
+
'locale'
|
|
73
|
+
].includes(ctx.query.groupBy)) {
|
|
74
|
+
ctx.badRequest('Invalid groupBy parameter');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
ctx.query.sort = ctx.query.groupBy === 'action' ? 'type' : ctx.query.groupBy;
|
|
78
|
+
delete ctx.query.groupBy;
|
|
79
|
+
const query = await permissionsManager.sanitizeQuery(ctx.query);
|
|
80
|
+
const releaseActionService = index.getService('release-action', {
|
|
81
|
+
strapi
|
|
82
|
+
});
|
|
83
|
+
const { results, pagination } = await releaseActionService.findPage(releaseId, {
|
|
84
|
+
...query
|
|
85
|
+
});
|
|
86
|
+
/**
|
|
87
|
+
* Release actions can be related to entries of different content types.
|
|
88
|
+
* We need to sanitize the entry output according to that content type.
|
|
89
|
+
* So, we group the sanitized output function by content type.
|
|
90
|
+
*/ const contentTypeOutputSanitizers = results.reduce((acc, action)=>{
|
|
91
|
+
if (acc[action.contentType]) {
|
|
92
|
+
return acc;
|
|
93
|
+
}
|
|
94
|
+
const contentTypePermissionsManager = strapi.service('admin::permission').createPermissionsManager({
|
|
95
|
+
ability: ctx.state.userAbility,
|
|
96
|
+
model: action.contentType
|
|
97
|
+
});
|
|
98
|
+
acc[action.contentType] = contentTypePermissionsManager.sanitizeOutput;
|
|
99
|
+
return acc;
|
|
100
|
+
}, {});
|
|
101
|
+
/**
|
|
102
|
+
* sanitizeOutput doesn't work if you use it directly on the Release Action model, it doesn't sanitize the entries
|
|
103
|
+
* So, we need to sanitize manually each entry inside a Release Action
|
|
104
|
+
*/ const sanitizedResults = await utils.async.map(results, async (action)=>({
|
|
105
|
+
...action,
|
|
106
|
+
entry: action.entry ? await contentTypeOutputSanitizers[action.contentType](action.entry) : {}
|
|
107
|
+
}));
|
|
108
|
+
const groupedData = await releaseActionService.groupActions(sanitizedResults, query.sort);
|
|
109
|
+
const contentTypes = await releaseActionService.getContentTypeModelsFromActions(results);
|
|
110
|
+
const releaseService = index.getService('release', {
|
|
111
|
+
strapi
|
|
112
|
+
});
|
|
113
|
+
const components = await releaseService.getAllComponents();
|
|
114
|
+
ctx.body = {
|
|
115
|
+
data: groupedData,
|
|
116
|
+
meta: {
|
|
117
|
+
pagination,
|
|
118
|
+
contentTypes,
|
|
119
|
+
components
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
},
|
|
123
|
+
async update (ctx) {
|
|
124
|
+
const actionId = ctx.params.actionId;
|
|
125
|
+
const releaseId = ctx.params.releaseId;
|
|
126
|
+
const releaseActionUpdateArgs = ctx.request.body;
|
|
127
|
+
await releaseAction.validateReleaseActionUpdateSchema(releaseActionUpdateArgs);
|
|
128
|
+
const releaseActionService = index.getService('release-action', {
|
|
129
|
+
strapi
|
|
130
|
+
});
|
|
131
|
+
const updatedAction = await releaseActionService.update(actionId, releaseId, releaseActionUpdateArgs);
|
|
132
|
+
ctx.body = {
|
|
133
|
+
data: updatedAction
|
|
134
|
+
};
|
|
135
|
+
},
|
|
136
|
+
async delete (ctx) {
|
|
137
|
+
const actionId = ctx.params.actionId;
|
|
138
|
+
const releaseId = ctx.params.releaseId;
|
|
139
|
+
const releaseActionService = index.getService('release-action', {
|
|
140
|
+
strapi
|
|
141
|
+
});
|
|
142
|
+
const deletedReleaseAction = await releaseActionService.delete(actionId, releaseId);
|
|
143
|
+
ctx.body = {
|
|
144
|
+
data: deletedReleaseAction
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
module.exports = releaseActionController;
|
|
150
|
+
//# sourceMappingURL=release-action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-action.js","sources":["../../../server/src/controllers/release-action.ts"],"sourcesContent":["import type Koa from 'koa';\n\nimport { async } from '@strapi/utils';\nimport {\n validateReleaseAction,\n validateReleaseActionUpdateSchema,\n validateFindManyActionsParams,\n} from './validation/release-action';\nimport type {\n CreateReleaseAction,\n CreateManyReleaseActions,\n GetReleaseActions,\n UpdateReleaseAction,\n DeleteReleaseAction,\n} from '../../../shared/contracts/release-actions';\nimport { getService } from '../utils';\nimport { RELEASE_ACTION_MODEL_UID } from '../constants';\nimport { AlreadyOnReleaseError } from '../services/validation';\n\nconst releaseActionController = {\n async create(ctx: Koa.Context) {\n const releaseId: CreateReleaseAction.Request['params']['releaseId'] = ctx.params.releaseId;\n const releaseActionArgs = ctx.request.body as CreateReleaseAction.Request['body'];\n\n await validateReleaseAction(releaseActionArgs);\n\n const releaseActionService = getService('release-action', { strapi });\n const releaseAction = await releaseActionService.create(releaseId, releaseActionArgs);\n\n ctx.created({\n data: releaseAction,\n });\n },\n\n async createMany(ctx: Koa.Context) {\n const releaseId: CreateManyReleaseActions.Request['params']['releaseId'] = ctx.params.releaseId;\n const releaseActionsArgs = ctx.request.body as CreateManyReleaseActions.Request['body'];\n\n await Promise.all(\n releaseActionsArgs.map((releaseActionArgs) => validateReleaseAction(releaseActionArgs))\n );\n\n const releaseActionService = getService('release-action', { strapi });\n const releaseService = getService('release', { strapi });\n\n const releaseActions = await strapi.db.transaction(async () => {\n const releaseActions = await Promise.all(\n releaseActionsArgs.map(async (releaseActionArgs) => {\n try {\n const action = await releaseActionService.create(releaseId, releaseActionArgs, {\n disableUpdateReleaseStatus: true,\n });\n return action;\n } catch (error) {\n // If the entry is already in the release, we don't want to throw an error, so we catch and ignore it\n if (error instanceof AlreadyOnReleaseError) {\n return null;\n }\n throw error;\n }\n })\n );\n return releaseActions;\n });\n\n const newReleaseActions = releaseActions.filter((action) => action !== null);\n\n if (newReleaseActions.length > 0) {\n releaseService.updateReleaseStatus(releaseId);\n }\n\n ctx.created({\n data: newReleaseActions,\n meta: {\n entriesAlreadyInRelease: releaseActions.length - newReleaseActions.length,\n totalEntries: releaseActions.length,\n },\n });\n },\n\n async findMany(ctx: Koa.Context) {\n const releaseId: GetReleaseActions.Request['params']['releaseId'] = ctx.params.releaseId;\n const permissionsManager = strapi.service('admin::permission').createPermissionsManager({\n ability: ctx.state.userAbility,\n model: RELEASE_ACTION_MODEL_UID,\n });\n\n await validateFindManyActionsParams(ctx.query);\n\n if (ctx.query.groupBy) {\n if (!['action', 'contentType', 'locale'].includes(ctx.query.groupBy as string)) {\n ctx.badRequest('Invalid groupBy parameter');\n }\n }\n\n ctx.query.sort = ctx.query.groupBy === 'action' ? 'type' : ctx.query.groupBy;\n delete ctx.query.groupBy;\n\n const query = await permissionsManager.sanitizeQuery(ctx.query);\n\n const releaseActionService = getService('release-action', { strapi });\n const { results, pagination } = await releaseActionService.findPage(releaseId, {\n ...query,\n });\n\n /**\n * Release actions can be related to entries of different content types.\n * We need to sanitize the entry output according to that content type.\n * So, we group the sanitized output function by content type.\n */\n const contentTypeOutputSanitizers = results.reduce((acc: Record<string, any>, action: any) => {\n if (acc[action.contentType]) {\n return acc;\n }\n\n const contentTypePermissionsManager = strapi\n .service('admin::permission')\n .createPermissionsManager({\n ability: ctx.state.userAbility,\n model: action.contentType,\n });\n\n acc[action.contentType] = contentTypePermissionsManager.sanitizeOutput;\n\n return acc;\n }, {});\n\n /**\n * sanitizeOutput doesn't work if you use it directly on the Release Action model, it doesn't sanitize the entries\n * So, we need to sanitize manually each entry inside a Release Action\n */\n const sanitizedResults = await async.map(results, async (action: any) => ({\n ...action,\n entry: action.entry\n ? await contentTypeOutputSanitizers[action.contentType](action.entry)\n : {},\n }));\n\n const groupedData = await releaseActionService.groupActions(sanitizedResults, query.sort);\n\n const contentTypes = await releaseActionService.getContentTypeModelsFromActions(results);\n\n const releaseService = getService('release', { strapi });\n const components = await releaseService.getAllComponents();\n\n ctx.body = {\n data: groupedData,\n meta: {\n pagination,\n contentTypes,\n components,\n },\n };\n },\n\n async update(ctx: Koa.Context) {\n const actionId: UpdateReleaseAction.Request['params']['actionId'] = ctx.params.actionId;\n const releaseId: UpdateReleaseAction.Request['params']['releaseId'] = ctx.params.releaseId;\n const releaseActionUpdateArgs = ctx.request.body as UpdateReleaseAction.Request['body'];\n\n await validateReleaseActionUpdateSchema(releaseActionUpdateArgs);\n\n const releaseActionService = getService('release-action', { strapi });\n\n const updatedAction = await releaseActionService.update(\n actionId,\n releaseId,\n releaseActionUpdateArgs\n );\n\n ctx.body = {\n data: updatedAction,\n };\n },\n\n async delete(ctx: Koa.Context) {\n const actionId: DeleteReleaseAction.Request['params']['actionId'] = ctx.params.actionId;\n const releaseId: DeleteReleaseAction.Request['params']['releaseId'] = ctx.params.releaseId;\n\n const releaseActionService = getService('release-action', { strapi });\n\n const deletedReleaseAction = await releaseActionService.delete(actionId, releaseId);\n\n ctx.body = {\n data: deletedReleaseAction,\n };\n },\n};\n\nexport default releaseActionController;\n"],"names":["releaseActionController","create","ctx","releaseId","params","releaseActionArgs","request","body","validateReleaseAction","releaseActionService","getService","strapi","releaseAction","created","data","createMany","releaseActionsArgs","Promise","all","map","releaseService","releaseActions","db","transaction","action","disableUpdateReleaseStatus","error","AlreadyOnReleaseError","newReleaseActions","filter","length","updateReleaseStatus","meta","entriesAlreadyInRelease","totalEntries","findMany","permissionsManager","service","createPermissionsManager","ability","state","userAbility","model","RELEASE_ACTION_MODEL_UID","validateFindManyActionsParams","query","groupBy","includes","badRequest","sort","sanitizeQuery","results","pagination","findPage","contentTypeOutputSanitizers","reduce","acc","contentType","contentTypePermissionsManager","sanitizeOutput","sanitizedResults","async","entry","groupedData","groupActions","contentTypes","getContentTypeModelsFromActions","components","getAllComponents","update","actionId","releaseActionUpdateArgs","validateReleaseActionUpdateSchema","updatedAction","delete","deletedReleaseAction"],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { async } from '@strapi/utils';
|
|
2
|
+
import { validateReleaseAction, validateFindManyActionsParams, validateReleaseActionUpdateSchema } from './validation/release-action.mjs';
|
|
3
|
+
import { getService } from '../utils/index.mjs';
|
|
4
|
+
import { RELEASE_ACTION_MODEL_UID } from '../constants.mjs';
|
|
5
|
+
import { AlreadyOnReleaseError } from '../services/validation.mjs';
|
|
6
|
+
|
|
7
|
+
const releaseActionController = {
|
|
8
|
+
async create (ctx) {
|
|
9
|
+
const releaseId = ctx.params.releaseId;
|
|
10
|
+
const releaseActionArgs = ctx.request.body;
|
|
11
|
+
await validateReleaseAction(releaseActionArgs);
|
|
12
|
+
const releaseActionService = getService('release-action', {
|
|
13
|
+
strapi
|
|
14
|
+
});
|
|
15
|
+
const releaseAction = await releaseActionService.create(releaseId, releaseActionArgs);
|
|
16
|
+
ctx.created({
|
|
17
|
+
data: releaseAction
|
|
18
|
+
});
|
|
19
|
+
},
|
|
20
|
+
async createMany (ctx) {
|
|
21
|
+
const releaseId = ctx.params.releaseId;
|
|
22
|
+
const releaseActionsArgs = ctx.request.body;
|
|
23
|
+
await Promise.all(releaseActionsArgs.map((releaseActionArgs)=>validateReleaseAction(releaseActionArgs)));
|
|
24
|
+
const releaseActionService = getService('release-action', {
|
|
25
|
+
strapi
|
|
26
|
+
});
|
|
27
|
+
const releaseService = getService('release', {
|
|
28
|
+
strapi
|
|
29
|
+
});
|
|
30
|
+
const releaseActions = await strapi.db.transaction(async ()=>{
|
|
31
|
+
const releaseActions = await Promise.all(releaseActionsArgs.map(async (releaseActionArgs)=>{
|
|
32
|
+
try {
|
|
33
|
+
const action = await releaseActionService.create(releaseId, releaseActionArgs, {
|
|
34
|
+
disableUpdateReleaseStatus: true
|
|
35
|
+
});
|
|
36
|
+
return action;
|
|
37
|
+
} catch (error) {
|
|
38
|
+
// If the entry is already in the release, we don't want to throw an error, so we catch and ignore it
|
|
39
|
+
if (error instanceof AlreadyOnReleaseError) {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
throw error;
|
|
43
|
+
}
|
|
44
|
+
}));
|
|
45
|
+
return releaseActions;
|
|
46
|
+
});
|
|
47
|
+
const newReleaseActions = releaseActions.filter((action)=>action !== null);
|
|
48
|
+
if (newReleaseActions.length > 0) {
|
|
49
|
+
releaseService.updateReleaseStatus(releaseId);
|
|
50
|
+
}
|
|
51
|
+
ctx.created({
|
|
52
|
+
data: newReleaseActions,
|
|
53
|
+
meta: {
|
|
54
|
+
entriesAlreadyInRelease: releaseActions.length - newReleaseActions.length,
|
|
55
|
+
totalEntries: releaseActions.length
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
},
|
|
59
|
+
async findMany (ctx) {
|
|
60
|
+
const releaseId = ctx.params.releaseId;
|
|
61
|
+
const permissionsManager = strapi.service('admin::permission').createPermissionsManager({
|
|
62
|
+
ability: ctx.state.userAbility,
|
|
63
|
+
model: RELEASE_ACTION_MODEL_UID
|
|
64
|
+
});
|
|
65
|
+
await validateFindManyActionsParams(ctx.query);
|
|
66
|
+
if (ctx.query.groupBy) {
|
|
67
|
+
if (![
|
|
68
|
+
'action',
|
|
69
|
+
'contentType',
|
|
70
|
+
'locale'
|
|
71
|
+
].includes(ctx.query.groupBy)) {
|
|
72
|
+
ctx.badRequest('Invalid groupBy parameter');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
ctx.query.sort = ctx.query.groupBy === 'action' ? 'type' : ctx.query.groupBy;
|
|
76
|
+
delete ctx.query.groupBy;
|
|
77
|
+
const query = await permissionsManager.sanitizeQuery(ctx.query);
|
|
78
|
+
const releaseActionService = getService('release-action', {
|
|
79
|
+
strapi
|
|
80
|
+
});
|
|
81
|
+
const { results, pagination } = await releaseActionService.findPage(releaseId, {
|
|
82
|
+
...query
|
|
83
|
+
});
|
|
84
|
+
/**
|
|
85
|
+
* Release actions can be related to entries of different content types.
|
|
86
|
+
* We need to sanitize the entry output according to that content type.
|
|
87
|
+
* So, we group the sanitized output function by content type.
|
|
88
|
+
*/ const contentTypeOutputSanitizers = results.reduce((acc, action)=>{
|
|
89
|
+
if (acc[action.contentType]) {
|
|
90
|
+
return acc;
|
|
91
|
+
}
|
|
92
|
+
const contentTypePermissionsManager = strapi.service('admin::permission').createPermissionsManager({
|
|
93
|
+
ability: ctx.state.userAbility,
|
|
94
|
+
model: action.contentType
|
|
95
|
+
});
|
|
96
|
+
acc[action.contentType] = contentTypePermissionsManager.sanitizeOutput;
|
|
97
|
+
return acc;
|
|
98
|
+
}, {});
|
|
99
|
+
/**
|
|
100
|
+
* sanitizeOutput doesn't work if you use it directly on the Release Action model, it doesn't sanitize the entries
|
|
101
|
+
* So, we need to sanitize manually each entry inside a Release Action
|
|
102
|
+
*/ const sanitizedResults = await async.map(results, async (action)=>({
|
|
103
|
+
...action,
|
|
104
|
+
entry: action.entry ? await contentTypeOutputSanitizers[action.contentType](action.entry) : {}
|
|
105
|
+
}));
|
|
106
|
+
const groupedData = await releaseActionService.groupActions(sanitizedResults, query.sort);
|
|
107
|
+
const contentTypes = await releaseActionService.getContentTypeModelsFromActions(results);
|
|
108
|
+
const releaseService = getService('release', {
|
|
109
|
+
strapi
|
|
110
|
+
});
|
|
111
|
+
const components = await releaseService.getAllComponents();
|
|
112
|
+
ctx.body = {
|
|
113
|
+
data: groupedData,
|
|
114
|
+
meta: {
|
|
115
|
+
pagination,
|
|
116
|
+
contentTypes,
|
|
117
|
+
components
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
},
|
|
121
|
+
async update (ctx) {
|
|
122
|
+
const actionId = ctx.params.actionId;
|
|
123
|
+
const releaseId = ctx.params.releaseId;
|
|
124
|
+
const releaseActionUpdateArgs = ctx.request.body;
|
|
125
|
+
await validateReleaseActionUpdateSchema(releaseActionUpdateArgs);
|
|
126
|
+
const releaseActionService = getService('release-action', {
|
|
127
|
+
strapi
|
|
128
|
+
});
|
|
129
|
+
const updatedAction = await releaseActionService.update(actionId, releaseId, releaseActionUpdateArgs);
|
|
130
|
+
ctx.body = {
|
|
131
|
+
data: updatedAction
|
|
132
|
+
};
|
|
133
|
+
},
|
|
134
|
+
async delete (ctx) {
|
|
135
|
+
const actionId = ctx.params.actionId;
|
|
136
|
+
const releaseId = ctx.params.releaseId;
|
|
137
|
+
const releaseActionService = getService('release-action', {
|
|
138
|
+
strapi
|
|
139
|
+
});
|
|
140
|
+
const deletedReleaseAction = await releaseActionService.delete(actionId, releaseId);
|
|
141
|
+
ctx.body = {
|
|
142
|
+
data: deletedReleaseAction
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
export { releaseActionController as default };
|
|
148
|
+
//# sourceMappingURL=release-action.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-action.mjs","sources":["../../../server/src/controllers/release-action.ts"],"sourcesContent":["import type Koa from 'koa';\n\nimport { async } from '@strapi/utils';\nimport {\n validateReleaseAction,\n validateReleaseActionUpdateSchema,\n validateFindManyActionsParams,\n} from './validation/release-action';\nimport type {\n CreateReleaseAction,\n CreateManyReleaseActions,\n GetReleaseActions,\n UpdateReleaseAction,\n DeleteReleaseAction,\n} from '../../../shared/contracts/release-actions';\nimport { getService } from '../utils';\nimport { RELEASE_ACTION_MODEL_UID } from '../constants';\nimport { AlreadyOnReleaseError } from '../services/validation';\n\nconst releaseActionController = {\n async create(ctx: Koa.Context) {\n const releaseId: CreateReleaseAction.Request['params']['releaseId'] = ctx.params.releaseId;\n const releaseActionArgs = ctx.request.body as CreateReleaseAction.Request['body'];\n\n await validateReleaseAction(releaseActionArgs);\n\n const releaseActionService = getService('release-action', { strapi });\n const releaseAction = await releaseActionService.create(releaseId, releaseActionArgs);\n\n ctx.created({\n data: releaseAction,\n });\n },\n\n async createMany(ctx: Koa.Context) {\n const releaseId: CreateManyReleaseActions.Request['params']['releaseId'] = ctx.params.releaseId;\n const releaseActionsArgs = ctx.request.body as CreateManyReleaseActions.Request['body'];\n\n await Promise.all(\n releaseActionsArgs.map((releaseActionArgs) => validateReleaseAction(releaseActionArgs))\n );\n\n const releaseActionService = getService('release-action', { strapi });\n const releaseService = getService('release', { strapi });\n\n const releaseActions = await strapi.db.transaction(async () => {\n const releaseActions = await Promise.all(\n releaseActionsArgs.map(async (releaseActionArgs) => {\n try {\n const action = await releaseActionService.create(releaseId, releaseActionArgs, {\n disableUpdateReleaseStatus: true,\n });\n return action;\n } catch (error) {\n // If the entry is already in the release, we don't want to throw an error, so we catch and ignore it\n if (error instanceof AlreadyOnReleaseError) {\n return null;\n }\n throw error;\n }\n })\n );\n return releaseActions;\n });\n\n const newReleaseActions = releaseActions.filter((action) => action !== null);\n\n if (newReleaseActions.length > 0) {\n releaseService.updateReleaseStatus(releaseId);\n }\n\n ctx.created({\n data: newReleaseActions,\n meta: {\n entriesAlreadyInRelease: releaseActions.length - newReleaseActions.length,\n totalEntries: releaseActions.length,\n },\n });\n },\n\n async findMany(ctx: Koa.Context) {\n const releaseId: GetReleaseActions.Request['params']['releaseId'] = ctx.params.releaseId;\n const permissionsManager = strapi.service('admin::permission').createPermissionsManager({\n ability: ctx.state.userAbility,\n model: RELEASE_ACTION_MODEL_UID,\n });\n\n await validateFindManyActionsParams(ctx.query);\n\n if (ctx.query.groupBy) {\n if (!['action', 'contentType', 'locale'].includes(ctx.query.groupBy as string)) {\n ctx.badRequest('Invalid groupBy parameter');\n }\n }\n\n ctx.query.sort = ctx.query.groupBy === 'action' ? 'type' : ctx.query.groupBy;\n delete ctx.query.groupBy;\n\n const query = await permissionsManager.sanitizeQuery(ctx.query);\n\n const releaseActionService = getService('release-action', { strapi });\n const { results, pagination } = await releaseActionService.findPage(releaseId, {\n ...query,\n });\n\n /**\n * Release actions can be related to entries of different content types.\n * We need to sanitize the entry output according to that content type.\n * So, we group the sanitized output function by content type.\n */\n const contentTypeOutputSanitizers = results.reduce((acc: Record<string, any>, action: any) => {\n if (acc[action.contentType]) {\n return acc;\n }\n\n const contentTypePermissionsManager = strapi\n .service('admin::permission')\n .createPermissionsManager({\n ability: ctx.state.userAbility,\n model: action.contentType,\n });\n\n acc[action.contentType] = contentTypePermissionsManager.sanitizeOutput;\n\n return acc;\n }, {});\n\n /**\n * sanitizeOutput doesn't work if you use it directly on the Release Action model, it doesn't sanitize the entries\n * So, we need to sanitize manually each entry inside a Release Action\n */\n const sanitizedResults = await async.map(results, async (action: any) => ({\n ...action,\n entry: action.entry\n ? await contentTypeOutputSanitizers[action.contentType](action.entry)\n : {},\n }));\n\n const groupedData = await releaseActionService.groupActions(sanitizedResults, query.sort);\n\n const contentTypes = await releaseActionService.getContentTypeModelsFromActions(results);\n\n const releaseService = getService('release', { strapi });\n const components = await releaseService.getAllComponents();\n\n ctx.body = {\n data: groupedData,\n meta: {\n pagination,\n contentTypes,\n components,\n },\n };\n },\n\n async update(ctx: Koa.Context) {\n const actionId: UpdateReleaseAction.Request['params']['actionId'] = ctx.params.actionId;\n const releaseId: UpdateReleaseAction.Request['params']['releaseId'] = ctx.params.releaseId;\n const releaseActionUpdateArgs = ctx.request.body as UpdateReleaseAction.Request['body'];\n\n await validateReleaseActionUpdateSchema(releaseActionUpdateArgs);\n\n const releaseActionService = getService('release-action', { strapi });\n\n const updatedAction = await releaseActionService.update(\n actionId,\n releaseId,\n releaseActionUpdateArgs\n );\n\n ctx.body = {\n data: updatedAction,\n };\n },\n\n async delete(ctx: Koa.Context) {\n const actionId: DeleteReleaseAction.Request['params']['actionId'] = ctx.params.actionId;\n const releaseId: DeleteReleaseAction.Request['params']['releaseId'] = ctx.params.releaseId;\n\n const releaseActionService = getService('release-action', { strapi });\n\n const deletedReleaseAction = await releaseActionService.delete(actionId, releaseId);\n\n ctx.body = {\n data: deletedReleaseAction,\n };\n },\n};\n\nexport default releaseActionController;\n"],"names":["releaseActionController","create","ctx","releaseId","params","releaseActionArgs","request","body","validateReleaseAction","releaseActionService","getService","strapi","releaseAction","created","data","createMany","releaseActionsArgs","Promise","all","map","releaseService","releaseActions","db","transaction","action","disableUpdateReleaseStatus","error","AlreadyOnReleaseError","newReleaseActions","filter","length","updateReleaseStatus","meta","entriesAlreadyInRelease","totalEntries","findMany","permissionsManager","service","createPermissionsManager","ability","state","userAbility","model","RELEASE_ACTION_MODEL_UID","validateFindManyActionsParams","query","groupBy","includes","badRequest","sort","sanitizeQuery","results","pagination","findPage","contentTypeOutputSanitizers","reduce","acc","contentType","contentTypePermissionsManager","sanitizeOutput","sanitizedResults","async","entry","groupedData","groupActions","contentTypes","getContentTypeModelsFromActions","components","getAllComponents","update","actionId","releaseActionUpdateArgs","validateReleaseActionUpdateSchema","updatedAction","delete","deletedReleaseAction"],"mappings":"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"}
|