You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Consolidated audit of the current Publishing Queue portlet that produces every input the FE implementation will need: feature parity matrix across the three Dojo tabs, backend API contract, target UI mapping to the new Angular design, and a backend hardening backlog.
Deliverables
Post the artifacts below as a comment on this issue, then back-link a one-line summary on epic #34734.
1. Feature parity matrix
Single table covering every feature currently shipped across all three Dojo tabs, with classification (Keep / Drop / Defer) and a short note explaining why. Group rows by the target Angular surface in the new design, so the FE task can be sized accurately:
Queue tab — IN PROGRESS column (currently Pending tab): list queued bundles, list assets per bundle, delete asset from queue, delete bundle from queue, status / retry chips, pagination
History tab (currently Status / History tab): debounced search, pagination, bundle detail modal, retry bundles, bulk delete options (selected / all / success only / fail only), Sent / Failed chips
Cross-tab top bar: single global search ("bundles, content, or environments"), Refresh, Upload Bundle
Modals (new design): Asset list (Name / Type / State), Bundle details (metadata + endpoints-by-environment table), Configure & send (Push / Remove / Push+Remove + Send now / Schedule + env + filter), Upload bundle, Confirm-remove
Legacy Dojo bits to drop: dijit.layout.TabContainer, dotcms.dojo.push.PushHandler, dojox.form.Uploader, the inline ng-event custom DOM bridge used to hand off "Generate / Download" to Angular
2. Backend API audit
Table covering every endpoint the portlet touches, with the columns below. Source code references included so reviewers can confirm.
GET /v1/publishing — list bundles with filter / status (com.dotcms.rest.api.v1.publishing.PublishingResource)
GET /v1/publishing/{bundleId} — bundle detail
POST /v1/publishing/retry — retry bundles
POST /v1/publishing/push/{bundleId} — push to environments
DELETE /v1/publishing/{bundleId} — delete bundle
DELETE /v1/publishing/purge — bulk purge by status (async, WebSocket completion notification)
POST /v1/bundles/assets, DELETE /v1/bundles/{bundleId}/assets — bundle asset management (com.dotcms.rest.api.v1.publishing.BundleManagementResource)
GET /bundle/{bundleId}/assets — list assets in bundle (legacy)
GET /bundle/getunsendbundles/{params:.*} — list unsent (legacy, regex path)
GET /bundle/updatebundle/{params:.*} — update name/filter (legacy)
GET /bundle/_download/{bundleId} — .tar.gz streaming download (legacy)
POST /bundle/_generate — generate bundle (legacy)
POST /bundle/sync, POST /bundle — bundle upload sync / async (legacy, requireLicense(true))
DELETE /v1/publishqueue — delete queue elements
GET /environment, POST /environment, PUT /environment/{id}, DELETE /environment/{id} — environments
GET /v1/environments/endpoints, …
GET /v1/pushpublish/filters, …
3. Target UI mapping — design walkthrough
For each screen in the new design (link below), produce a short annotated description that lists: route + component name + which store action drives it + which endpoint(s) it calls + edge cases (empty state, error, in-flight). Cover at minimum:
Queue tab populated (READY TO SEND + IN PROGRESS two-column)
Top bar (search + Refresh + Upload Bundle + site selector)
4. Security findings
If the API audit surfaces a license, role, or inter-server-auth gating gap, file a separate [Task] security issue immediately and link it here. Specific resources to validate: AuditPublishingResource (no OpenAPI, custom auth header), BundlePublisherResource (Community license check), legacy BundleResource listing helpers (mixed auth patterns).
5. Backend hardening backlog
For each gap below, file a separate [Task] issue and link it here:
OpenAPI hardening for legacy resources missing @Operation: BundleResource, AuditPublishingResource, PublishQueueResource
Consolidation of legacy BundleResource endpoints into the v1 publishing surface: getunsendbundles, updatebundle, _download, _generate, sync, {bundleId}/assets
Sorting parameter for GET /v1/publishing (currently fixed order)
Webhook / callback alternative for async purge + upload operations (currently WebSocket-only)
Goal
Consolidated audit of the current Publishing Queue portlet that produces every input the FE implementation will need: feature parity matrix across the three Dojo tabs, backend API contract, target UI mapping to the new Angular design, and a backend hardening backlog.
Deliverables
Post the artifacts below as a comment on this issue, then back-link a one-line summary on epic #34734.
1. Feature parity matrix
Single table covering every feature currently shipped across all three Dojo tabs, with classification (Keep / Drop / Defer) and a short note explaining why. Group rows by the target Angular surface in the new design, so the FE task can be sized accurately:
.tgz, generate / regenerate, remote publish, per-row kebab actionsSent/FailedchipsRefresh,Upload Bundledijit.layout.TabContainer,dotcms.dojo.push.PushHandler,dojox.form.Uploader, the inlineng-eventcustom DOM bridge used to hand off "Generate / Download" to Angular2. Backend API audit
Table covering every endpoint the portlet touches, with the columns below. Source code references included so reviewers can confirm.
| HTTP | Path | Class#method | Purpose | Auth gates | License | OpenAPI | Request | Response | Known gaps |
Coverage at minimum:
GET /v1/publishing— list bundles with filter / status (com.dotcms.rest.api.v1.publishing.PublishingResource)GET /v1/publishing/{bundleId}— bundle detailPOST /v1/publishing/retry— retry bundlesPOST /v1/publishing/push/{bundleId}— push to environmentsDELETE /v1/publishing/{bundleId}— delete bundleDELETE /v1/publishing/purge— bulk purge by status (async, WebSocket completion notification)POST /v1/bundles/assets,DELETE /v1/bundles/{bundleId}/assets— bundle asset management (com.dotcms.rest.api.v1.publishing.BundleManagementResource)GET /bundle/{bundleId}/assets— list assets in bundle (legacy)GET /bundle/getunsendbundles/{params:.*}— list unsent (legacy, regex path)GET /bundle/updatebundle/{params:.*}— update name/filter (legacy)GET /bundle/_download/{bundleId}—.tar.gzstreaming download (legacy)POST /bundle/_generate— generate bundle (legacy)POST /bundle/sync,POST /bundle— bundle upload sync / async (legacy,requireLicense(true))DELETE /v1/publishqueue— delete queue elementsGET /environment,POST /environment,PUT /environment/{id},DELETE /environment/{id}— environmentsGET /v1/environments/endpoints, …GET /v1/pushpublish/filters, …3. Target UI mapping — design walkthrough
For each screen in the new design (link below), produce a short annotated description that lists: route + component name + which store action drives it + which endpoint(s) it calls + edge cases (empty state, error, in-flight). Cover at minimum:
READY TO SEND+IN PROGRESStwo-column)READY TO SENDREADY TO SEND4. Security findings
If the API audit surfaces a license, role, or inter-server-auth gating gap, file a separate
[Task]security issue immediately and link it here. Specific resources to validate:AuditPublishingResource(no OpenAPI, custom auth header),BundlePublisherResource(Community license check), legacyBundleResourcelisting helpers (mixed auth patterns).5. Backend hardening backlog
For each gap below, file a separate
[Task]issue and link it here:@Operation:BundleResource,AuditPublishingResource,PublishQueueResourceBundleResourceendpoints into the v1 publishing surface:getunsendbundles,updatebundle,_download,_generate,sync,{bundleId}/assetsGET /v1/publishing(currently fixed order)Inputs
dotCMS/src/main/webapp/html/portlet/ext/contentlet/publishing/view_publish_tool.jsp(shell),view_publish_audit_list.jsp,view_publish_queue_list.jsp,view_unpushed_bundles.jsp,view_publish_audit_detail.jsp,edit_publish_bundle.jspdotCMS/src/main/webapp/WEB-INF/portlet.xml(entrypublishing-queue, lines ~212-225)PortletIDenum:dotCMS/src/main/java/com/dotmarketing/util/PortletID.java(entryPUBLISHING_QUEUE)dotCMS/src/main/webapp/WEB-INF/messages/Language.properties(com.dotcms.repackage.javax.portlet.title.publishing-queue,publisher_Queue,publisher_Audit,publisher_Unpushed_Bundles)Definition of Done
[Task]issue and linked here