@webiny/api-headless-cms-scheduler 6.0.0 → 6.1.0-beta.0
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/context.js +10 -4
- package/context.js.map +1 -1
- package/exports/api/cms/scheduler.d.ts +2 -0
- package/exports/api/cms/scheduler.js +4 -0
- package/exports/api/cms/scheduler.js.map +1 -0
- package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.d.ts +3 -3
- package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.js +8 -5
- package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnEntryDeleteEventHandler.js.map +1 -1
- package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.d.ts +3 -3
- package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.js +7 -6
- package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnPublishEventHandler.js.map +1 -1
- package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.d.ts +3 -3
- package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.js +6 -5
- package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnRevisionDeleteEventHandler.js.map +1 -1
- package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.d.ts +3 -3
- package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.js +7 -6
- package/features/CancelScheduledActionOnEntryChange/CancelScheduledActionOnUnpublishEventHandler.js.map +1 -1
- package/features/NamespaceHandler/NamespaceHandler.d.ts +15 -0
- package/features/NamespaceHandler/NamespaceHandler.js +50 -0
- package/features/NamespaceHandler/NamespaceHandler.js.map +1 -0
- package/features/{ScheduleEntryAction/actionHandlers → PublishActionHandler}/PublishEntryActionHandler.d.ts +4 -4
- package/features/{ScheduleEntryAction/actionHandlers → PublishActionHandler}/PublishEntryActionHandler.js +7 -2
- package/features/PublishActionHandler/PublishEntryActionHandler.js.map +1 -0
- package/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.d.ts +15 -0
- package/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js +51 -0
- package/features/SchedulePublishEntryUseCase/SchedulePublishEntryUseCase.js.map +1 -0
- package/features/SchedulePublishEntryUseCase/abstractions.d.ts +23 -0
- package/features/SchedulePublishEntryUseCase/abstractions.js +5 -0
- package/features/SchedulePublishEntryUseCase/abstractions.js.map +1 -0
- package/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.d.ts +15 -0
- package/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js +51 -0
- package/features/ScheduleUnpublishEntryUseCase/ScheduleUnpublishEntryUseCase.js.map +1 -0
- package/features/ScheduleUnpublishEntryUseCase/abstractions.d.ts +23 -0
- package/features/ScheduleUnpublishEntryUseCase/abstractions.js +5 -0
- package/features/ScheduleUnpublishEntryUseCase/abstractions.js.map +1 -0
- package/features/{ScheduleEntryAction/actionHandlers → UnpublishActionHandler}/UnpublishEntryActionHandler.d.ts +6 -5
- package/features/{ScheduleEntryAction/actionHandlers → UnpublishActionHandler}/UnpublishEntryActionHandler.js +7 -2
- package/features/UnpublishActionHandler/UnpublishEntryActionHandler.js.map +1 -0
- package/index.d.ts +2 -6
- package/index.js +1 -7
- package/index.js.map +1 -1
- package/package.json +16 -18
- package/types.d.ts +4 -0
- package/types.js +3 -0
- package/types.js.map +1 -0
- package/utils/namespace.d.ts +4 -0
- package/utils/namespace.js +12 -0
- package/utils/namespace.js.map +1 -0
- package/features/CancelScheduledEntryAction/CancelScheduledEntryActionUseCase.d.ts +0 -15
- package/features/CancelScheduledEntryAction/CancelScheduledEntryActionUseCase.js +0 -25
- package/features/CancelScheduledEntryAction/CancelScheduledEntryActionUseCase.js.map +0 -1
- package/features/CancelScheduledEntryAction/abstractions.d.ts +0 -22
- package/features/CancelScheduledEntryAction/abstractions.js +0 -11
- package/features/CancelScheduledEntryAction/abstractions.js.map +0 -1
- package/features/CancelScheduledEntryAction/feature.d.ts +0 -6
- package/features/CancelScheduledEntryAction/feature.js +0 -16
- package/features/CancelScheduledEntryAction/feature.js.map +0 -1
- package/features/CancelScheduledEntryAction/index.d.ts +0 -1
- package/features/CancelScheduledEntryAction/index.js +0 -3
- package/features/CancelScheduledEntryAction/index.js.map +0 -1
- package/features/ScheduleEntryAction/ScheduleEntryActionUseCase.d.ts +0 -27
- package/features/ScheduleEntryAction/ScheduleEntryActionUseCase.js +0 -83
- package/features/ScheduleEntryAction/ScheduleEntryActionUseCase.js.map +0 -1
- package/features/ScheduleEntryAction/abstractions.d.ts +0 -45
- package/features/ScheduleEntryAction/abstractions.js +0 -15
- package/features/ScheduleEntryAction/abstractions.js.map +0 -1
- package/features/ScheduleEntryAction/actionHandlers/PublishEntryActionHandler.js.map +0 -1
- package/features/ScheduleEntryAction/actionHandlers/UnpublishEntryActionHandler.js.map +0 -1
- package/features/ScheduleEntryAction/feature.d.ts +0 -7
- package/features/ScheduleEntryAction/feature.js +0 -21
- package/features/ScheduleEntryAction/feature.js.map +0 -1
- package/features/ScheduleEntryAction/index.d.ts +0 -1
- package/features/ScheduleEntryAction/index.js +0 -3
- package/features/ScheduleEntryAction/index.js.map +0 -1
- package/graphql/ActionMapper.d.ts +0 -15
- package/graphql/ActionMapper.js +0 -18
- package/graphql/ActionMapper.js.map +0 -1
- package/graphql/dates.d.ts +0 -6
- package/graphql/dates.js +0 -9
- package/graphql/dates.js.map +0 -1
- package/graphql/index.d.ts +0 -3
- package/graphql/index.js +0 -246
- package/graphql/index.js.map +0 -1
- package/graphql/schema.d.ts +0 -162
- package/graphql/schema.js +0 -83
- package/graphql/schema.js.map +0 -1
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { Result } from "@webiny/feature/api";
|
|
2
|
-
import { ScheduleEntryActionUseCase as UseCaseAbstraction } from "./abstractions.js";
|
|
3
|
-
import { ScheduleActionUseCase } from "@webiny/api-scheduler";
|
|
4
|
-
import { RunActionUseCase } from "@webiny/api-scheduler";
|
|
5
|
-
import { GetModelUseCase } from "@webiny/api-headless-cms/features/contentModel/GetModel/index.js";
|
|
6
|
-
import { GetEntryByIdUseCase } from "@webiny/api-headless-cms/features/contentEntry/GetEntryById/index.js";
|
|
7
|
-
/**
|
|
8
|
-
* Schedules a CMS entry action (publish or unpublish)
|
|
9
|
-
*
|
|
10
|
-
* Flow:
|
|
11
|
-
* 1. If immediately=true, use RunAction for immediate execution
|
|
12
|
-
* 2. Otherwise, fetch entry to get title metadata
|
|
13
|
-
* 3. Use ScheduleAction with entry title in payload
|
|
14
|
-
*/
|
|
15
|
-
class ScheduleEntryActionUseCaseImpl {
|
|
16
|
-
constructor(scheduleActionUseCase, runActionUseCase, getModelUseCase, getEntryByIdUseCase) {
|
|
17
|
-
this.scheduleActionUseCase = scheduleActionUseCase;
|
|
18
|
-
this.runActionUseCase = runActionUseCase;
|
|
19
|
-
this.getModelUseCase = getModelUseCase;
|
|
20
|
-
this.getEntryByIdUseCase = getEntryByIdUseCase;
|
|
21
|
-
}
|
|
22
|
-
async execute(input) {
|
|
23
|
-
const namespace = `Cms/Entry/${input.modelId}`;
|
|
24
|
-
|
|
25
|
-
// Handle immediate execution
|
|
26
|
-
if (input.immediately) {
|
|
27
|
-
const result = await this.runActionUseCase.execute({
|
|
28
|
-
namespace,
|
|
29
|
-
actionType: input.actionType,
|
|
30
|
-
targetId: input.targetId,
|
|
31
|
-
payload: {
|
|
32
|
-
modelId: input.modelId
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
if (result.isFail()) {
|
|
36
|
-
return Result.fail(result.error);
|
|
37
|
-
}
|
|
38
|
-
return Result.ok(result.value);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// Validate scheduleFor is provided for future scheduling
|
|
42
|
-
if (!input.scheduleFor) {
|
|
43
|
-
throw new Error("scheduleFor is required when immediately is not true");
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// Fetch the target model
|
|
47
|
-
const modelResult = await this.getModelUseCase.execute(input.modelId);
|
|
48
|
-
if (modelResult.isFail()) {
|
|
49
|
-
return Result.fail(modelResult.error);
|
|
50
|
-
}
|
|
51
|
-
const model = modelResult.value;
|
|
52
|
-
|
|
53
|
-
// Fetch entry to get title
|
|
54
|
-
const entryResult = await this.getEntryByIdUseCase.execute(model, input.targetId);
|
|
55
|
-
if (entryResult.isFail()) {
|
|
56
|
-
return Result.fail(entryResult.error);
|
|
57
|
-
}
|
|
58
|
-
const entry = entryResult.value;
|
|
59
|
-
const title = entry.values[model.titleFieldId] || "Unknown entry title";
|
|
60
|
-
|
|
61
|
-
// Schedule with title metadata
|
|
62
|
-
const scheduleResult = await this.scheduleActionUseCase.execute({
|
|
63
|
-
namespace,
|
|
64
|
-
actionType: input.actionType,
|
|
65
|
-
targetId: input.targetId,
|
|
66
|
-
title,
|
|
67
|
-
scheduleFor: input.scheduleFor,
|
|
68
|
-
payload: {
|
|
69
|
-
modelId: input.modelId
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
if (scheduleResult.isFail()) {
|
|
73
|
-
return Result.fail(scheduleResult.error);
|
|
74
|
-
}
|
|
75
|
-
return Result.ok(scheduleResult.value);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
export const ScheduleEntryActionUseCase = UseCaseAbstraction.createImplementation({
|
|
79
|
-
implementation: ScheduleEntryActionUseCaseImpl,
|
|
80
|
-
dependencies: [ScheduleActionUseCase, RunActionUseCase, GetModelUseCase, GetEntryByIdUseCase]
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
//# sourceMappingURL=ScheduleEntryActionUseCase.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["Result","ScheduleEntryActionUseCase","UseCaseAbstraction","ScheduleActionUseCase","RunActionUseCase","GetModelUseCase","GetEntryByIdUseCase","ScheduleEntryActionUseCaseImpl","constructor","scheduleActionUseCase","runActionUseCase","getModelUseCase","getEntryByIdUseCase","execute","input","namespace","modelId","immediately","result","actionType","targetId","payload","isFail","fail","error","ok","value","scheduleFor","Error","modelResult","model","entryResult","entry","title","values","titleFieldId","scheduleResult","createImplementation","implementation","dependencies"],"sources":["ScheduleEntryActionUseCase.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport {\n type IScheduleActionPayload,\n ScheduleEntryActionUseCase as UseCaseAbstraction\n} from \"./abstractions.js\";\nimport type { IScheduledAction } from \"@webiny/api-scheduler\";\nimport { ScheduleActionUseCase } from \"@webiny/api-scheduler\";\nimport { RunActionUseCase } from \"@webiny/api-scheduler\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel/index.js\";\nimport { GetEntryByIdUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetEntryById/index.js\";\nimport type { ModelNotFoundError } from \"@webiny/api-headless-cms/domain/contentModel/errors.js\";\nimport type { EntryNotFoundError } from \"@webiny/api-headless-cms/domain/contentEntry/errors.js\";\n\n/**\n * Schedules a CMS entry action (publish or unpublish)\n *\n * Flow:\n * 1. If immediately=true, use RunAction for immediate execution\n * 2. Otherwise, fetch entry to get title metadata\n * 3. Use ScheduleAction with entry title in payload\n */\nclass ScheduleEntryActionUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(\n private scheduleActionUseCase: ScheduleActionUseCase.Interface,\n private runActionUseCase: RunActionUseCase.Interface,\n private getModelUseCase: GetModelUseCase.Interface,\n private getEntryByIdUseCase: GetEntryByIdUseCase.Interface\n ) {}\n\n async execute(\n input: UseCaseAbstraction.Input\n ): Promise<Result<IScheduledAction<IScheduleActionPayload>, UseCaseAbstraction.Error>> {\n const namespace = `Cms/Entry/${input.modelId}`;\n\n // Handle immediate execution\n if (input.immediately) {\n const result = await this.runActionUseCase.execute<IScheduleActionPayload>({\n namespace,\n actionType: input.actionType,\n targetId: input.targetId,\n payload: {\n modelId: input.modelId\n }\n });\n\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n return Result.ok(result.value);\n }\n\n // Validate scheduleFor is provided for future scheduling\n if (!input.scheduleFor) {\n throw new Error(\"scheduleFor is required when immediately is not true\");\n }\n\n // Fetch the target model\n const modelResult = await this.getModelUseCase.execute(input.modelId);\n if (modelResult.isFail()) {\n return Result.fail(modelResult.error as ModelNotFoundError);\n }\n\n const model = modelResult.value;\n\n // Fetch entry to get title\n const entryResult = await this.getEntryByIdUseCase.execute(model, input.targetId);\n if (entryResult.isFail()) {\n return Result.fail(entryResult.error as EntryNotFoundError);\n }\n\n const entry = entryResult.value;\n const title = entry.values[model.titleFieldId] || \"Unknown entry title\";\n\n // Schedule with title metadata\n const scheduleResult = await this.scheduleActionUseCase.execute<IScheduleActionPayload>({\n namespace,\n actionType: input.actionType,\n targetId: input.targetId,\n title,\n scheduleFor: input.scheduleFor,\n payload: {\n modelId: input.modelId\n }\n });\n\n if (scheduleResult.isFail()) {\n return Result.fail(scheduleResult.error);\n }\n\n return Result.ok(scheduleResult.value);\n }\n}\n\nexport const ScheduleEntryActionUseCase = UseCaseAbstraction.createImplementation({\n implementation: ScheduleEntryActionUseCaseImpl,\n dependencies: [ScheduleActionUseCase, RunActionUseCase, GetModelUseCase, GetEntryByIdUseCase]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { Result } from "@webiny/feature/api";
|
|
2
|
-
import type { IScheduledAction } from "@webiny/api-scheduler";
|
|
3
|
-
import { InvalidScheduleDateError, ScheduledActionPersistenceError, SchedulerServiceError } from "@webiny/api-scheduler/domain/errors.js";
|
|
4
|
-
import type { ModelNotFoundError } from "@webiny/api-headless-cms/domain/contentModel/errors.js";
|
|
5
|
-
import type { EntryNotFoundError } from "@webiny/api-headless-cms/domain/contentEntry/errors.js";
|
|
6
|
-
/**
|
|
7
|
-
* ScheduleEntryActionUseCase - Schedule a CMS entry action (publish/unpublish)
|
|
8
|
-
*
|
|
9
|
-
* This is a convenience use case for scheduling CMS entry actions.
|
|
10
|
-
* It handles:
|
|
11
|
-
* - Immediate execution (via RunAction)
|
|
12
|
-
* - Future scheduling (via ScheduleAction)
|
|
13
|
-
* - Fetching entry title for schedule metadata
|
|
14
|
-
*/
|
|
15
|
-
export type ScheduleEntryActionType = "Publish" | "Unpublish";
|
|
16
|
-
export interface IScheduleActionPayload {
|
|
17
|
-
modelId: string;
|
|
18
|
-
}
|
|
19
|
-
export interface IScheduleActionWithPayload extends IScheduledAction<IScheduleActionPayload> {
|
|
20
|
-
}
|
|
21
|
-
export interface IScheduleEntryActionInput {
|
|
22
|
-
modelId: string;
|
|
23
|
-
targetId: string;
|
|
24
|
-
actionType: ScheduleEntryActionType;
|
|
25
|
-
immediately?: boolean;
|
|
26
|
-
scheduleFor?: string;
|
|
27
|
-
}
|
|
28
|
-
export interface IScheduleEntryActionErrors {
|
|
29
|
-
persistence: ScheduledActionPersistenceError;
|
|
30
|
-
invalidDate: InvalidScheduleDateError;
|
|
31
|
-
schedulerService: SchedulerServiceError;
|
|
32
|
-
modelNotFound: ModelNotFoundError;
|
|
33
|
-
entryNotFound: EntryNotFoundError;
|
|
34
|
-
}
|
|
35
|
-
type ScheduleEntryActionError = IScheduleEntryActionErrors[keyof IScheduleEntryActionErrors];
|
|
36
|
-
export interface IScheduleEntryActionUseCase {
|
|
37
|
-
execute(input: IScheduleEntryActionInput): Promise<Result<IScheduledAction<IScheduleActionPayload>, ScheduleEntryActionError>>;
|
|
38
|
-
}
|
|
39
|
-
export declare const ScheduleEntryActionUseCase: import("@webiny/di").Abstraction<IScheduleEntryActionUseCase>;
|
|
40
|
-
export declare namespace ScheduleEntryActionUseCase {
|
|
41
|
-
type Interface = IScheduleEntryActionUseCase;
|
|
42
|
-
type Input = IScheduleEntryActionInput;
|
|
43
|
-
type Error = ScheduleEntryActionError;
|
|
44
|
-
}
|
|
45
|
-
export {};
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* ScheduleEntryActionUseCase - Schedule a CMS entry action (publish/unpublish)
|
|
5
|
-
*
|
|
6
|
-
* This is a convenience use case for scheduling CMS entry actions.
|
|
7
|
-
* It handles:
|
|
8
|
-
* - Immediate execution (via RunAction)
|
|
9
|
-
* - Future scheduling (via ScheduleAction)
|
|
10
|
-
* - Fetching entry title for schedule metadata
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
export const ScheduleEntryActionUseCase = createAbstraction("ScheduleEntryActionUseCase");
|
|
14
|
-
|
|
15
|
-
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","ScheduleEntryActionUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction, Result } from \"@webiny/feature/api\";\nimport type { IScheduledAction } from \"@webiny/api-scheduler\";\nimport {\n InvalidScheduleDateError,\n ScheduledActionPersistenceError,\n SchedulerServiceError\n} from \"@webiny/api-scheduler/domain/errors.js\";\nimport type { ModelNotFoundError } from \"@webiny/api-headless-cms/domain/contentModel/errors.js\";\nimport type { EntryNotFoundError } from \"@webiny/api-headless-cms/domain/contentEntry/errors.js\";\n\n/**\n * ScheduleEntryActionUseCase - Schedule a CMS entry action (publish/unpublish)\n *\n * This is a convenience use case for scheduling CMS entry actions.\n * It handles:\n * - Immediate execution (via RunAction)\n * - Future scheduling (via ScheduleAction)\n * - Fetching entry title for schedule metadata\n */\n\nexport type ScheduleEntryActionType = \"Publish\" | \"Unpublish\";\n\nexport interface IScheduleActionPayload {\n modelId: string;\n}\n\nexport interface IScheduleActionWithPayload extends IScheduledAction<IScheduleActionPayload> {}\n\nexport interface IScheduleEntryActionInput {\n modelId: string;\n targetId: string;\n actionType: ScheduleEntryActionType;\n immediately?: boolean;\n scheduleFor?: string;\n}\n\nexport interface IScheduleEntryActionErrors {\n persistence: ScheduledActionPersistenceError;\n invalidDate: InvalidScheduleDateError;\n schedulerService: SchedulerServiceError;\n modelNotFound: ModelNotFoundError;\n entryNotFound: EntryNotFoundError;\n}\n\ntype ScheduleEntryActionError = IScheduleEntryActionErrors[keyof IScheduleEntryActionErrors];\n\nexport interface IScheduleEntryActionUseCase {\n execute(\n input: IScheduleEntryActionInput\n ): Promise<Result<IScheduledAction<IScheduleActionPayload>, ScheduleEntryActionError>>;\n}\n\nexport const ScheduleEntryActionUseCase = createAbstraction<IScheduleEntryActionUseCase>(\n \"ScheduleEntryActionUseCase\"\n);\n\nexport namespace ScheduleEntryActionUseCase {\n export type Interface = IScheduleEntryActionUseCase;\n export type Input = IScheduleEntryActionInput;\n export type Error = ScheduleEntryActionError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAgB,qBAAqB;;AAU/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAkCA,OAAO,MAAMC,0BAA0B,GAAGD,iBAAiB,CACvD,4BACJ,CAAC","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["ScheduledActionHandler","GetModelUseCase","GetEntryByIdUseCase","GetPublishedEntriesByIdsUseCase","PublishEntryUseCase","UnpublishEntryUseCase","RepublishEntryUseCase","IdentityContext","PublishEntryActionHandlerImpl","constructor","getModelUseCase","getEntryByIdUseCase","getPublishedEntriesByIdsUseCase","publishEntryUseCase","unpublishEntryUseCase","republishEntryUseCase","identityContext","canHandle","namespace","actionType","startsWith","handle","action","payload","modelId","modelResult","execute","isFail","console","error","identity","getIdentity","Error","model","value","targetEntryResult","targetId","targetEntry","publishedEntriesResult","id","publishedTargetEntry","publishResult","republishResult","unpublishResult","PublishEntryActionHandler","createImplementation","implementation","dependencies"],"sources":["PublishEntryActionHandler.ts"],"sourcesContent":["import { ScheduledActionHandler } from \"@webiny/api-scheduler\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel\";\nimport { GetEntryByIdUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetEntryById\";\nimport { GetPublishedEntriesByIdsUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetPublishedEntriesByIds\";\nimport { PublishEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/PublishEntry\";\nimport { UnpublishEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/UnpublishEntry\";\nimport { RepublishEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/RepublishEntry\";\nimport type { IScheduleActionWithPayload } from \"~/features/ScheduleEntryAction/index.js\";\nimport { IdentityContext } from \"@webiny/api-core/features/security/IdentityContext/index.js\";\n\n/**\n * Handler for publishing CMS entries\n *\n * Handles the \"Publish\" action for CMS entries with namespace pattern: Cms/Entry/{modelId}\n *\n * Publishing logic:\n * 1. If entry is not published -> publish it\n * 2. If the same revision is already published -> republish it\n * 3. If a different revision is published -> unpublish old, publish new\n */\nclass PublishEntryActionHandlerImpl implements ScheduledActionHandler.Interface {\n constructor(\n private getModelUseCase: GetModelUseCase.Interface,\n private getEntryByIdUseCase: GetEntryByIdUseCase.Interface,\n private getPublishedEntriesByIdsUseCase: GetPublishedEntriesByIdsUseCase.Interface,\n private publishEntryUseCase: PublishEntryUseCase.Interface,\n private unpublishEntryUseCase: UnpublishEntryUseCase.Interface,\n private republishEntryUseCase: RepublishEntryUseCase.Interface,\n private identityContext: IdentityContext.Interface\n ) {}\n\n public canHandle(namespace: string, actionType: string): boolean {\n return namespace.startsWith(\"Cms/Entry/\") && actionType === \"Publish\";\n }\n\n public async handle(action: IScheduleActionWithPayload): Promise<void> {\n const { payload } = action;\n\n const modelId = payload.modelId as string;\n\n // Fetch the model\n const modelResult = await this.getModelUseCase.execute(modelId);\n if (modelResult.isFail()) {\n console.error(\n `Failed to get model \"${modelId}\" for scheduled publish action:`,\n modelResult.error,\n {\n identity: this.identityContext.getIdentity()\n }\n );\n throw new Error(`Model not found: ${modelId}`);\n }\n\n const model = modelResult.value;\n\n // Fetch the target entry\n const targetEntryResult =\n await this.getEntryByIdUseCase.execute<IScheduleActionWithPayload>(\n model,\n action.targetId\n );\n if (targetEntryResult.isFail()) {\n console.error(\n `Failed to get entry \"${action.targetId}\" for scheduled publish action:`,\n targetEntryResult.error\n );\n throw new Error(`Entry not found: ${action.targetId}`);\n }\n\n const targetEntry = targetEntryResult.value;\n\n // Get published entries\n const publishedEntriesResult =\n await this.getPublishedEntriesByIdsUseCase.execute<IScheduleActionWithPayload>(model, [\n targetEntry.id\n ]);\n\n if (publishedEntriesResult.isFail()) {\n console.error(\n `Failed to get published entries for \"${targetEntry.id}\":`,\n publishedEntriesResult.error\n );\n throw new Error(`Failed to check published entries`);\n }\n\n const [publishedTargetEntry] = publishedEntriesResult.value;\n\n /**\n * Scenario 1: Entry has no published revision -> publish it\n */\n if (!publishedTargetEntry) {\n const publishResult =\n await this.publishEntryUseCase.execute<IScheduleActionWithPayload>(\n model,\n targetEntry.id\n );\n if (publishResult.isFail()) {\n console.error(`Failed to publish entry \"${action.targetId}\":`, publishResult.error);\n throw new Error(`Failed to publish entry: ${action.targetId}`);\n }\n return;\n }\n\n /**\n * Scenario 2: Target entry is already published (same revision) -> republish it\n */\n if (publishedTargetEntry.id === targetEntry.id) {\n const republishResult = await this.republishEntryUseCase.execute(model, targetEntry.id);\n if (republishResult.isFail()) {\n console.error(\n `Failed to republish entry \"${action.targetId}\":`,\n republishResult.error\n );\n throw new Error(`Failed to republish entry: ${action.targetId}`);\n }\n return;\n }\n\n /**\n * Scenario 3: A different revision is published -> unpublish old, publish new\n */\n const unpublishResult =\n await this.unpublishEntryUseCase.execute<IScheduleActionWithPayload>(\n model,\n publishedTargetEntry.id\n );\n if (unpublishResult.isFail()) {\n console.error(\n `Failed to unpublish old revision \"${publishedTargetEntry.id}\":`,\n unpublishResult.error\n );\n throw new Error(`Failed to unpublish old revision: ${publishedTargetEntry.id}`);\n }\n\n const publishResult = await this.publishEntryUseCase.execute<IScheduleActionWithPayload>(\n model,\n targetEntry.id\n );\n if (publishResult.isFail()) {\n console.error(`Failed to publish entry \"${action.targetId}\":`, publishResult.error);\n throw new Error(`Failed to publish entry: ${action.targetId}`);\n }\n }\n}\n\nexport const PublishEntryActionHandler = ScheduledActionHandler.createImplementation({\n implementation: PublishEntryActionHandlerImpl,\n dependencies: [\n GetModelUseCase,\n GetEntryByIdUseCase,\n GetPublishedEntriesByIdsUseCase,\n PublishEntryUseCase,\n UnpublishEntryUseCase,\n RepublishEntryUseCase,\n IdentityContext\n ]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["ScheduledActionHandler","GetModelUseCase","GetEntryByIdUseCase","GetPublishedEntriesByIdsUseCase","UnpublishEntryUseCase","UnpublishEntryActionHandlerImpl","constructor","getModelUseCase","getEntryByIdUseCase","getPublishedEntriesByIdsUseCase","unpublishEntryUseCase","canHandle","namespace","actionType","startsWith","handle","action","payload","modelId","modelResult","execute","isFail","console","error","Error","model","value","targetEntryResult","targetId","targetEntry","publishedEntriesResult","id","publishedTargetEntry","warn","unpublishResult","UnpublishEntryActionHandler","createImplementation","implementation","dependencies"],"sources":["UnpublishEntryActionHandler.ts"],"sourcesContent":["import { ScheduledActionHandler } from \"@webiny/api-scheduler\";\nimport { GetModelUseCase } from \"@webiny/api-headless-cms/features/contentModel/GetModel\";\nimport { GetEntryByIdUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetEntryById\";\nimport { GetPublishedEntriesByIdsUseCase } from \"@webiny/api-headless-cms/features/contentEntry/GetPublishedEntriesByIds\";\nimport { UnpublishEntryUseCase } from \"@webiny/api-headless-cms/features/contentEntry/UnpublishEntry\";\nimport type { IScheduleActionWithPayload } from \"~/features/ScheduleEntryAction/index.js\";\n\n/**\n * Handler for unpublishing CMS entries\n *\n * Handles the \"Unpublish\" action for CMS entries with namespace pattern: Cms/Entry/{modelId}\n *\n * Unpublishing logic:\n * 1. If entry is not published -> nothing to do (warn)\n * 2. If target entry is published (same revision) -> unpublish it\n * 3. If a different revision is published -> unpublish it anyway\n */\nclass UnpublishEntryActionHandlerImpl implements ScheduledActionHandler.Interface {\n constructor(\n private getModelUseCase: GetModelUseCase.Interface,\n private getEntryByIdUseCase: GetEntryByIdUseCase.Interface,\n private getPublishedEntriesByIdsUseCase: GetPublishedEntriesByIdsUseCase.Interface,\n private unpublishEntryUseCase: UnpublishEntryUseCase.Interface\n ) {}\n\n canHandle(namespace: string, actionType: string): boolean {\n return namespace.startsWith(\"Cms/Entry/\") && actionType === \"Unpublish\";\n }\n\n async handle(action: IScheduleActionWithPayload): Promise<void> {\n const { payload } = action;\n\n const modelId = payload.modelId as string;\n\n // Fetch the model\n const modelResult = await this.getModelUseCase.execute(modelId);\n if (modelResult.isFail()) {\n console.error(\n `Failed to get model \"${modelId}\" for scheduled unpublish action:`,\n modelResult.error\n );\n throw new Error(`Model not found: ${modelId}`);\n }\n\n const model = modelResult.value;\n\n // Fetch the target entry\n const targetEntryResult =\n await this.getEntryByIdUseCase.execute<IScheduleActionWithPayload>(\n model,\n action.targetId\n );\n if (targetEntryResult.isFail()) {\n console.error(\n `Failed to get entry \"${action.targetId}\" for scheduled unpublish action:`,\n targetEntryResult.error\n );\n throw new Error(`Entry not found: ${action.targetId}`);\n }\n\n const targetEntry = targetEntryResult.value;\n\n // Get published entries\n const publishedEntriesResult =\n await this.getPublishedEntriesByIdsUseCase.execute<IScheduleActionWithPayload>(model, [\n targetEntry.id\n ]);\n\n if (publishedEntriesResult.isFail()) {\n console.error(\n `Failed to get published entries for \"${targetEntry.id}\":`,\n publishedEntriesResult.error\n );\n throw new Error(`Failed to check published entries`);\n }\n\n const [publishedTargetEntry] = publishedEntriesResult.value;\n\n /**\n * Scenario 1: Entry is not published -> nothing to do\n */\n if (!publishedTargetEntry) {\n console.warn(`Entry \"${action.targetId}\" is not published, nothing to unpublish.`);\n return;\n }\n\n /**\n * Scenario 2: Target entry is published (same revision) -> unpublish it\n */\n if (publishedTargetEntry.id === action.targetId) {\n const unpublishResult =\n await this.unpublishEntryUseCase.execute<IScheduleActionWithPayload>(\n model,\n action.targetId\n );\n if (unpublishResult.isFail()) {\n console.error(\n `Failed to unpublish entry \"${action.targetId}\":`,\n unpublishResult.error\n );\n throw new Error(`Failed to unpublish entry: ${action.targetId}`);\n }\n return;\n }\n\n /**\n * Scenario 3: A different revision is published -> unpublish it anyway\n * TODO: Determine if we really want to unpublish an entry which does not match the target ID\n */\n const unpublishResult =\n await this.unpublishEntryUseCase.execute<IScheduleActionWithPayload>(\n model,\n publishedTargetEntry.id\n );\n if (unpublishResult.isFail()) {\n console.error(\n `Failed to unpublish published revision \"${publishedTargetEntry.id}\":`,\n unpublishResult.error\n );\n throw new Error(`Failed to unpublish entry: ${publishedTargetEntry.id}`);\n }\n }\n}\n\nexport const UnpublishEntryActionHandler = ScheduledActionHandler.createImplementation({\n implementation: UnpublishEntryActionHandlerImpl,\n dependencies: [\n GetModelUseCase,\n GetEntryByIdUseCase,\n GetPublishedEntriesByIdsUseCase,\n UnpublishEntryUseCase\n ]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ScheduleEntryAction Feature
|
|
3
|
-
*
|
|
4
|
-
* Provides the ability to schedule CMS entry actions (publish/unpublish).
|
|
5
|
-
* Handles both immediate execution and future scheduling.
|
|
6
|
-
*/
|
|
7
|
-
export declare const ScheduleEntryActionFeature: import("@webiny/feature/api/createFeature.js").FeatureDefinition<unknown>;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { createFeature } from "@webiny/feature/api";
|
|
2
|
-
import { ScheduleEntryActionUseCase } from "./ScheduleEntryActionUseCase.js";
|
|
3
|
-
import { PublishEntryActionHandler } from "./actionHandlers/PublishEntryActionHandler.js";
|
|
4
|
-
import { UnpublishEntryActionHandler } from "./actionHandlers/UnpublishEntryActionHandler.js";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* ScheduleEntryAction Feature
|
|
8
|
-
*
|
|
9
|
-
* Provides the ability to schedule CMS entry actions (publish/unpublish).
|
|
10
|
-
* Handles both immediate execution and future scheduling.
|
|
11
|
-
*/
|
|
12
|
-
export const ScheduleEntryActionFeature = createFeature({
|
|
13
|
-
name: "ScheduleEntryAction",
|
|
14
|
-
register(container) {
|
|
15
|
-
container.register(ScheduleEntryActionUseCase);
|
|
16
|
-
container.register(PublishEntryActionHandler);
|
|
17
|
-
container.register(UnpublishEntryActionHandler);
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
//# sourceMappingURL=feature.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["createFeature","ScheduleEntryActionUseCase","PublishEntryActionHandler","UnpublishEntryActionHandler","ScheduleEntryActionFeature","name","register","container"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { ScheduleEntryActionUseCase } from \"./ScheduleEntryActionUseCase.js\";\nimport { PublishEntryActionHandler } from \"./actionHandlers/PublishEntryActionHandler.js\";\nimport { UnpublishEntryActionHandler } from \"./actionHandlers/UnpublishEntryActionHandler.js\";\n\n/**\n * ScheduleEntryAction Feature\n *\n * Provides the ability to schedule CMS entry actions (publish/unpublish).\n * Handles both immediate execution and future scheduling.\n */\nexport const ScheduleEntryActionFeature = createFeature({\n name: \"ScheduleEntryAction\",\n register(container) {\n container.register(ScheduleEntryActionUseCase);\n container.register(PublishEntryActionHandler);\n container.register(UnpublishEntryActionHandler);\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,0BAA0B;AACnC,SAASC,yBAAyB;AAClC,SAASC,2BAA2B;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,0BAA0B,GAAGJ,aAAa,CAAC;EACpDK,IAAI,EAAE,qBAAqB;EAC3BC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACL,0BAA0B,CAAC;IAC9CM,SAAS,CAACD,QAAQ,CAACJ,yBAAyB,CAAC;IAC7CK,SAAS,CAACD,QAAQ,CAACH,2BAA2B,CAAC;EACnD;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./abstractions.js";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./abstractions.js\";\n"],"mappings":"AAAA","ignoreList":[]}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { IScheduleActionWithPayload } from "../features/ScheduleEntryAction/index.js";
|
|
2
|
-
export declare class ActionMapper {
|
|
3
|
-
static fromScheduledAction(action: IScheduleActionWithPayload): {
|
|
4
|
-
id: string;
|
|
5
|
-
targetId: string;
|
|
6
|
-
model: {
|
|
7
|
-
modelId: string;
|
|
8
|
-
};
|
|
9
|
-
scheduledBy: import("@webiny/api-scheduler/shared/abstractions").Identity;
|
|
10
|
-
publishOn: string | null;
|
|
11
|
-
unpublishOn: string | null;
|
|
12
|
-
type: string;
|
|
13
|
-
title: string | undefined;
|
|
14
|
-
};
|
|
15
|
-
}
|
package/graphql/ActionMapper.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export class ActionMapper {
|
|
2
|
-
static fromScheduledAction(action) {
|
|
3
|
-
return {
|
|
4
|
-
id: action.id,
|
|
5
|
-
targetId: action.targetId,
|
|
6
|
-
model: {
|
|
7
|
-
modelId: action.payload?.modelId
|
|
8
|
-
},
|
|
9
|
-
scheduledBy: action.scheduledBy,
|
|
10
|
-
publishOn: action.actionType === "Publish" ? action.scheduledFor : null,
|
|
11
|
-
unpublishOn: action.actionType === "Unpublish" ? action.scheduledFor : null,
|
|
12
|
-
type: action.actionType.toLowerCase(),
|
|
13
|
-
title: action.title
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
//# sourceMappingURL=ActionMapper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["ActionMapper","fromScheduledAction","action","id","targetId","model","modelId","payload","scheduledBy","publishOn","actionType","scheduledFor","unpublishOn","type","toLowerCase","title"],"sources":["ActionMapper.ts"],"sourcesContent":["import type { IScheduleActionWithPayload } from \"~/features/ScheduleEntryAction/index.js\";\n\nexport class ActionMapper {\n static fromScheduledAction(action: IScheduleActionWithPayload) {\n return {\n id: action.id,\n targetId: action.targetId,\n model: {\n modelId: action.payload?.modelId\n },\n scheduledBy: action.scheduledBy,\n publishOn: action.actionType === \"Publish\" ? action.scheduledFor : null,\n unpublishOn: action.actionType === \"Unpublish\" ? action.scheduledFor : null,\n type: action.actionType.toLowerCase(),\n title: action.title\n };\n }\n}\n"],"mappings":"AAEA,OAAO,MAAMA,YAAY,CAAC;EACtB,OAAOC,mBAAmBA,CAACC,MAAkC,EAAE;IAC3D,OAAO;MACHC,EAAE,EAAED,MAAM,CAACC,EAAE;MACbC,QAAQ,EAAEF,MAAM,CAACE,QAAQ;MACzBC,KAAK,EAAE;QACHC,OAAO,EAAEJ,MAAM,CAACK,OAAO,EAAED;MAC7B,CAAC;MACDE,WAAW,EAAEN,MAAM,CAACM,WAAW;MAC/BC,SAAS,EAAEP,MAAM,CAACQ,UAAU,KAAK,SAAS,GAAGR,MAAM,CAACS,YAAY,GAAG,IAAI;MACvEC,WAAW,EAAEV,MAAM,CAACQ,UAAU,KAAK,WAAW,GAAGR,MAAM,CAACS,YAAY,GAAG,IAAI;MAC3EE,IAAI,EAAEX,MAAM,CAACQ,UAAU,CAACI,WAAW,CAAC,CAAC;MACrCC,KAAK,EAAEb,MAAM,CAACa;IAClB,CAAC;EACL;AACJ","ignoreList":[]}
|
package/graphql/dates.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export type DateISOString = `${number}-${number}-${number}T${number}:${number}:${number}.${number}Z`;
|
|
2
|
-
/**
|
|
3
|
-
* We can safely cast the result of `toISOString()` to `DateISOString` type,
|
|
4
|
-
* We need this to ensure that no malformed date strings are used in the scheduler.
|
|
5
|
-
*/
|
|
6
|
-
export declare const dateToISOString: (value: Date) => DateISOString;
|
package/graphql/dates.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* We can safely cast the result of `toISOString()` to `DateISOString` type,
|
|
3
|
-
* We need this to ensure that no malformed date strings are used in the scheduler.
|
|
4
|
-
*/
|
|
5
|
-
export const dateToISOString = value => {
|
|
6
|
-
return value.toISOString();
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
//# sourceMappingURL=dates.js.map
|
package/graphql/dates.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["dateToISOString","value","toISOString"],"sources":["dates.ts"],"sourcesContent":["export type DateISOString =\n `${number}-${number}-${number}T${number}:${number}:${number}.${number}Z`;\n\n/**\n * We can safely cast the result of `toISOString()` to `DateISOString` type,\n * We need this to ensure that no malformed date strings are used in the scheduler.\n */\nexport const dateToISOString = (value: Date): DateISOString => {\n return value.toISOString() as DateISOString;\n};\n"],"mappings":"AAGA;AACA;AACA;AACA;AACA,OAAO,MAAMA,eAAe,GAAIC,KAAW,IAAoB;EAC3D,OAAOA,KAAK,CAACC,WAAW,CAAC,CAAC;AAC9B,CAAC","ignoreList":[]}
|
package/graphql/index.d.ts
DELETED
package/graphql/index.js
DELETED
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
import { CmsGraphQLSchemaPlugin } from "@webiny/api-headless-cms/plugins/index.js";
|
|
2
|
-
import { ErrorResponse, ListErrorResponse, ListResponse, Response } from "@webiny/handler-graphql";
|
|
3
|
-
import { cancelScheduleSchema, createScheduleSchema, getScheduleSchema, listScheduleSchema, updateScheduleSchema } from "./schema.js";
|
|
4
|
-
import { createZodError } from "@webiny/utils";
|
|
5
|
-
import { ListScheduledActionsUseCase } from "@webiny/api-scheduler/features/ListScheduledActions";
|
|
6
|
-
import { ScheduleEntryActionUseCase } from "../features/ScheduleEntryAction/index.js";
|
|
7
|
-
import { CancelScheduledEntryActionUseCase } from "../features/CancelScheduledEntryAction/index.js";
|
|
8
|
-
import { ActionMapper } from "./ActionMapper.js";
|
|
9
|
-
const typeMap = {
|
|
10
|
-
publish: "Publish",
|
|
11
|
-
unpublish: "Unpublish"
|
|
12
|
-
};
|
|
13
|
-
const resolve = async cb => {
|
|
14
|
-
try {
|
|
15
|
-
const result = await cb();
|
|
16
|
-
return new Response(result);
|
|
17
|
-
} catch (ex) {
|
|
18
|
-
return new ErrorResponse(ex);
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
const resolveList = async cb => {
|
|
22
|
-
try {
|
|
23
|
-
const result = await cb();
|
|
24
|
-
return new ListResponse(result.data, result.meta);
|
|
25
|
-
} catch (ex) {
|
|
26
|
-
return new ListErrorResponse(ex);
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
export const createSchedulerGraphQL = () => {
|
|
30
|
-
return new CmsGraphQLSchemaPlugin({
|
|
31
|
-
typeDefs: /* GraphQL */`
|
|
32
|
-
enum CmsScheduleRecordType {
|
|
33
|
-
publish
|
|
34
|
-
unpublish
|
|
35
|
-
}
|
|
36
|
-
type CmsScheduleRecord {
|
|
37
|
-
id: String!
|
|
38
|
-
targetId: String!
|
|
39
|
-
model: CmsContentModel!
|
|
40
|
-
scheduledBy: CmsIdentity!
|
|
41
|
-
publishOn: DateTime
|
|
42
|
-
unpublishOn: DateTime
|
|
43
|
-
type: CmsScheduleRecordType!
|
|
44
|
-
title: String!
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
type CmsGetScheduleResponse {
|
|
48
|
-
data: CmsScheduleRecord
|
|
49
|
-
error: CmsError
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
type CmsListSchedulesResponse {
|
|
53
|
-
data: [CmsScheduleRecord!]
|
|
54
|
-
error: CmsError
|
|
55
|
-
meta: CmsListMeta
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
type CmsCreateScheduleResponse {
|
|
59
|
-
data: CmsScheduleRecord
|
|
60
|
-
error: CmsError
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
type CmsUpdateScheduleResponse {
|
|
64
|
-
data: CmsScheduleRecord
|
|
65
|
-
error: CmsError
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
type CmsCancelScheduleResponse {
|
|
69
|
-
data: Boolean
|
|
70
|
-
error: CmsError
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
input CmsListSchedulesWhereInput {
|
|
74
|
-
targetId: ID
|
|
75
|
-
title_contains: String
|
|
76
|
-
title_not_contains: String
|
|
77
|
-
type: CmsScheduleRecordType
|
|
78
|
-
scheduledBy: ID
|
|
79
|
-
scheduledFor: DateTime
|
|
80
|
-
scheduledFor_gte: DateTime
|
|
81
|
-
scheduledFor_lte: DateTime
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
enum CmsListSchedulesSorter {
|
|
85
|
-
title_ASC
|
|
86
|
-
title_DESC
|
|
87
|
-
scheduledFor_ASC
|
|
88
|
-
scheduledFor_DESC
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
extend type Query {
|
|
92
|
-
getCmsSchedule(modelId: String!, id: ID!): CmsGetScheduleResponse!
|
|
93
|
-
listCmsSchedules(
|
|
94
|
-
modelId: String!
|
|
95
|
-
where: CmsListSchedulesWhereInput
|
|
96
|
-
sort: [CmsListSchedulesSorter!]
|
|
97
|
-
limit: Int
|
|
98
|
-
after: String
|
|
99
|
-
): CmsListSchedulesResponse!
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
extend type Mutation {
|
|
103
|
-
createCmsSchedule(
|
|
104
|
-
modelId: String!
|
|
105
|
-
id: ID!
|
|
106
|
-
immediately: Boolean
|
|
107
|
-
scheduleFor: DateTime
|
|
108
|
-
type: CmsScheduleRecordType!
|
|
109
|
-
): CmsCreateScheduleResponse!
|
|
110
|
-
updateCmsSchedule(
|
|
111
|
-
modelId: String!
|
|
112
|
-
id: ID!
|
|
113
|
-
immediately: Boolean
|
|
114
|
-
scheduleFor: DateTime
|
|
115
|
-
type: CmsScheduleRecordType!
|
|
116
|
-
): CmsUpdateScheduleResponse!
|
|
117
|
-
cancelCmsSchedule(modelId: String!, id: ID!): CmsCancelScheduleResponse!
|
|
118
|
-
}
|
|
119
|
-
`,
|
|
120
|
-
resolvers: {
|
|
121
|
-
Query: {
|
|
122
|
-
async getCmsSchedule(_, args, context) {
|
|
123
|
-
return resolve(async () => {
|
|
124
|
-
const validated = await getScheduleSchema.safeParseAsync(args);
|
|
125
|
-
if (validated.error) {
|
|
126
|
-
throw createZodError(validated.error);
|
|
127
|
-
}
|
|
128
|
-
const listActions = context.container.resolve(ListScheduledActionsUseCase);
|
|
129
|
-
const actions = await listActions.execute({
|
|
130
|
-
where: {
|
|
131
|
-
namespace: `Cms/Entry/${args.modelId}`,
|
|
132
|
-
targetId: args.id
|
|
133
|
-
}
|
|
134
|
-
});
|
|
135
|
-
if (actions.isFail()) {
|
|
136
|
-
return new ErrorResponse({
|
|
137
|
-
code: actions.error.code,
|
|
138
|
-
message: actions.error.message
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
const {
|
|
142
|
-
items
|
|
143
|
-
} = actions.value;
|
|
144
|
-
if (!items.length) {
|
|
145
|
-
return null;
|
|
146
|
-
}
|
|
147
|
-
return ActionMapper.fromScheduledAction(items[0]);
|
|
148
|
-
});
|
|
149
|
-
},
|
|
150
|
-
async listCmsSchedules(_, args, context) {
|
|
151
|
-
return resolveList(async () => {
|
|
152
|
-
const validated = await listScheduleSchema.safeParseAsync(args);
|
|
153
|
-
if (validated.error) {
|
|
154
|
-
throw createZodError(validated.error);
|
|
155
|
-
}
|
|
156
|
-
const listActions = context.container.resolve(ListScheduledActionsUseCase);
|
|
157
|
-
const {
|
|
158
|
-
type,
|
|
159
|
-
...where
|
|
160
|
-
} = validated.data.where ?? {};
|
|
161
|
-
if (type) {
|
|
162
|
-
// @ts-expect-error
|
|
163
|
-
where["actionType"] = typeMap[type];
|
|
164
|
-
}
|
|
165
|
-
const actions = await listActions.execute({
|
|
166
|
-
where: {
|
|
167
|
-
...where,
|
|
168
|
-
namespace: `Cms/Entry/${args.modelId}`
|
|
169
|
-
},
|
|
170
|
-
sort: validated.data.sort,
|
|
171
|
-
limit: validated.data.limit,
|
|
172
|
-
after: validated.data.after
|
|
173
|
-
});
|
|
174
|
-
if (actions.isFail()) {
|
|
175
|
-
throw actions.error;
|
|
176
|
-
}
|
|
177
|
-
return {
|
|
178
|
-
data: actions.value.items.map(item => ActionMapper.fromScheduledAction(item)),
|
|
179
|
-
meta: actions.value.meta
|
|
180
|
-
};
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
},
|
|
184
|
-
Mutation: {
|
|
185
|
-
async createCmsSchedule(_, args, context) {
|
|
186
|
-
return resolve(async () => {
|
|
187
|
-
const validated = await createScheduleSchema.safeParseAsync(args);
|
|
188
|
-
if (validated.error) {
|
|
189
|
-
throw createZodError(validated.error);
|
|
190
|
-
}
|
|
191
|
-
const data = validated.data;
|
|
192
|
-
const scheduleEntry = context.container.resolve(ScheduleEntryActionUseCase);
|
|
193
|
-
const result = await scheduleEntry.execute({
|
|
194
|
-
modelId: data.modelId,
|
|
195
|
-
targetId: data.id,
|
|
196
|
-
scheduleFor: data.scheduleFor?.toISOString(),
|
|
197
|
-
immediately: data.immediately,
|
|
198
|
-
actionType: typeMap[data.type]
|
|
199
|
-
});
|
|
200
|
-
if (result.isFail()) {
|
|
201
|
-
throw result.error;
|
|
202
|
-
}
|
|
203
|
-
return ActionMapper.fromScheduledAction(result.value);
|
|
204
|
-
});
|
|
205
|
-
},
|
|
206
|
-
async updateCmsSchedule(_, args, context) {
|
|
207
|
-
return resolve(async () => {
|
|
208
|
-
const validated = await updateScheduleSchema.safeParseAsync(args);
|
|
209
|
-
if (validated.error) {
|
|
210
|
-
throw createZodError(validated.error);
|
|
211
|
-
}
|
|
212
|
-
const data = validated.data;
|
|
213
|
-
const scheduleEntry = context.container.resolve(ScheduleEntryActionUseCase);
|
|
214
|
-
const result = await scheduleEntry.execute({
|
|
215
|
-
modelId: data.modelId,
|
|
216
|
-
targetId: data.id,
|
|
217
|
-
scheduleFor: data.scheduleFor?.toISOString(),
|
|
218
|
-
immediately: data.immediately,
|
|
219
|
-
actionType: typeMap[data.type]
|
|
220
|
-
});
|
|
221
|
-
if (result.isFail()) {
|
|
222
|
-
throw result.error;
|
|
223
|
-
}
|
|
224
|
-
return ActionMapper.fromScheduledAction(result.value);
|
|
225
|
-
});
|
|
226
|
-
},
|
|
227
|
-
async cancelCmsSchedule(_, args, context) {
|
|
228
|
-
return resolve(async () => {
|
|
229
|
-
const validated = await cancelScheduleSchema.safeParseAsync(args);
|
|
230
|
-
if (validated.error) {
|
|
231
|
-
throw createZodError(validated.error);
|
|
232
|
-
}
|
|
233
|
-
const cancelEntryAction = context.container.resolve(CancelScheduledEntryActionUseCase);
|
|
234
|
-
const res = await cancelEntryAction.execute(validated.data.id);
|
|
235
|
-
if (res.isFail()) {
|
|
236
|
-
throw res.error;
|
|
237
|
-
}
|
|
238
|
-
return true;
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
});
|
|
244
|
-
};
|
|
245
|
-
|
|
246
|
-
//# sourceMappingURL=index.js.map
|
package/graphql/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["CmsGraphQLSchemaPlugin","ErrorResponse","ListErrorResponse","ListResponse","Response","cancelScheduleSchema","createScheduleSchema","getScheduleSchema","listScheduleSchema","updateScheduleSchema","createZodError","ListScheduledActionsUseCase","ScheduleEntryActionUseCase","CancelScheduledEntryActionUseCase","ActionMapper","typeMap","publish","unpublish","resolve","cb","result","ex","resolveList","data","meta","createSchedulerGraphQL","typeDefs","resolvers","Query","getCmsSchedule","_","args","context","validated","safeParseAsync","error","listActions","container","actions","execute","where","namespace","modelId","targetId","id","isFail","code","message","items","value","length","fromScheduledAction","listCmsSchedules","type","sort","limit","after","map","item","Mutation","createCmsSchedule","scheduleEntry","scheduleFor","toISOString","immediately","actionType","updateCmsSchedule","cancelCmsSchedule","cancelEntryAction","res"],"sources":["index.ts"],"sourcesContent":["import { CmsGraphQLSchemaPlugin } from \"@webiny/api-headless-cms/plugins/index.js\";\nimport { ErrorResponse, ListErrorResponse, ListResponse, Response } from \"@webiny/handler-graphql\";\nimport type { CmsContext, CmsEntryMeta } from \"@webiny/api-headless-cms/types/index.js\";\nimport {\n cancelScheduleSchema,\n createScheduleSchema,\n getScheduleSchema,\n listScheduleSchema,\n updateScheduleSchema\n} from \"~/graphql/schema.js\";\nimport { createZodError } from \"@webiny/utils\";\nimport { ListScheduledActionsUseCase } from \"@webiny/api-scheduler/features/ListScheduledActions\";\nimport {\n type IScheduleActionPayload,\n ScheduleEntryActionUseCase\n} from \"~/features/ScheduleEntryAction/index.js\";\nimport { CancelScheduledEntryActionUseCase } from \"~/features/CancelScheduledEntryAction/index.js\";\nimport { ActionMapper } from \"~/graphql/ActionMapper.js\";\n\nconst typeMap = {\n publish: \"Publish\",\n unpublish: \"Unpublish\"\n} as const;\n\nconst resolve = async (cb: () => Promise<unknown>) => {\n try {\n const result = await cb();\n\n return new Response(result);\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n};\n\ninterface IResolveListCallableResponse {\n data: unknown[];\n meta: CmsEntryMeta;\n}\n\nconst resolveList = async (cb: () => Promise<IResolveListCallableResponse>) => {\n try {\n const result = await cb();\n\n return new ListResponse(result.data, result.meta);\n } catch (ex) {\n return new ListErrorResponse(ex);\n }\n};\n\nexport const createSchedulerGraphQL = () => {\n return new CmsGraphQLSchemaPlugin<CmsContext>({\n typeDefs: /* GraphQL */ `\n enum CmsScheduleRecordType {\n publish\n unpublish\n }\n type CmsScheduleRecord {\n id: String!\n targetId: String!\n model: CmsContentModel!\n scheduledBy: CmsIdentity!\n publishOn: DateTime\n unpublishOn: DateTime\n type: CmsScheduleRecordType!\n title: String!\n }\n\n type CmsGetScheduleResponse {\n data: CmsScheduleRecord\n error: CmsError\n }\n\n type CmsListSchedulesResponse {\n data: [CmsScheduleRecord!]\n error: CmsError\n meta: CmsListMeta\n }\n\n type CmsCreateScheduleResponse {\n data: CmsScheduleRecord\n error: CmsError\n }\n\n type CmsUpdateScheduleResponse {\n data: CmsScheduleRecord\n error: CmsError\n }\n\n type CmsCancelScheduleResponse {\n data: Boolean\n error: CmsError\n }\n\n input CmsListSchedulesWhereInput {\n targetId: ID\n title_contains: String\n title_not_contains: String\n type: CmsScheduleRecordType\n scheduledBy: ID\n scheduledFor: DateTime\n scheduledFor_gte: DateTime\n scheduledFor_lte: DateTime\n }\n\n enum CmsListSchedulesSorter {\n title_ASC\n title_DESC\n scheduledFor_ASC\n scheduledFor_DESC\n }\n\n extend type Query {\n getCmsSchedule(modelId: String!, id: ID!): CmsGetScheduleResponse!\n listCmsSchedules(\n modelId: String!\n where: CmsListSchedulesWhereInput\n sort: [CmsListSchedulesSorter!]\n limit: Int\n after: String\n ): CmsListSchedulesResponse!\n }\n\n extend type Mutation {\n createCmsSchedule(\n modelId: String!\n id: ID!\n immediately: Boolean\n scheduleFor: DateTime\n type: CmsScheduleRecordType!\n ): CmsCreateScheduleResponse!\n updateCmsSchedule(\n modelId: String!\n id: ID!\n immediately: Boolean\n scheduleFor: DateTime\n type: CmsScheduleRecordType!\n ): CmsUpdateScheduleResponse!\n cancelCmsSchedule(modelId: String!, id: ID!): CmsCancelScheduleResponse!\n }\n `,\n resolvers: {\n Query: {\n async getCmsSchedule(_, args, context) {\n return resolve(async () => {\n const validated = await getScheduleSchema.safeParseAsync(args);\n if (validated.error) {\n throw createZodError(validated.error);\n }\n\n const listActions = context.container.resolve(ListScheduledActionsUseCase);\n\n const actions = await listActions.execute<IScheduleActionPayload>({\n where: { namespace: `Cms/Entry/${args.modelId}`, targetId: args.id }\n });\n\n if (actions.isFail()) {\n return new ErrorResponse({\n code: actions.error.code,\n message: actions.error.message\n });\n }\n\n const { items } = actions.value;\n\n if (!items.length) {\n return null;\n }\n\n return ActionMapper.fromScheduledAction(items[0]);\n });\n },\n async listCmsSchedules(_, args, context) {\n return resolveList(async () => {\n const validated = await listScheduleSchema.safeParseAsync(args);\n if (validated.error) {\n throw createZodError(validated.error);\n }\n\n const listActions = context.container.resolve(ListScheduledActionsUseCase);\n\n const { type, ...where } = validated.data.where ?? {};\n\n if (type) {\n // @ts-expect-error\n where[\"actionType\"] = typeMap[type];\n }\n\n const actions = await listActions.execute<IScheduleActionPayload>({\n where: { ...where, namespace: `Cms/Entry/${args.modelId}` },\n sort: validated.data.sort,\n limit: validated.data.limit,\n after: validated.data.after\n });\n\n if (actions.isFail()) {\n throw actions.error;\n }\n\n return {\n data: actions.value.items.map(item =>\n ActionMapper.fromScheduledAction(item)\n ),\n meta: actions.value.meta\n };\n });\n }\n },\n Mutation: {\n async createCmsSchedule(_, args, context) {\n return resolve(async () => {\n const validated = await createScheduleSchema.safeParseAsync(args);\n if (validated.error) {\n throw createZodError(validated.error);\n }\n\n const data = validated.data;\n\n const scheduleEntry = context.container.resolve(ScheduleEntryActionUseCase);\n const result = await scheduleEntry.execute({\n modelId: data.modelId,\n targetId: data.id,\n scheduleFor: data.scheduleFor?.toISOString(),\n immediately: data.immediately,\n actionType: typeMap[data.type]\n });\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return ActionMapper.fromScheduledAction(result.value);\n });\n },\n async updateCmsSchedule(_, args, context) {\n return resolve(async () => {\n const validated = await updateScheduleSchema.safeParseAsync(args);\n if (validated.error) {\n throw createZodError(validated.error);\n }\n\n const data = validated.data;\n\n const scheduleEntry = context.container.resolve(ScheduleEntryActionUseCase);\n const result = await scheduleEntry.execute({\n modelId: data.modelId,\n targetId: data.id,\n scheduleFor: data.scheduleFor?.toISOString(),\n immediately: data.immediately,\n actionType: typeMap[data.type]\n });\n\n if (result.isFail()) {\n throw result.error;\n }\n\n return ActionMapper.fromScheduledAction(result.value);\n });\n },\n async cancelCmsSchedule(_, args, context) {\n return resolve(async () => {\n const validated = await cancelScheduleSchema.safeParseAsync(args);\n if (validated.error) {\n throw createZodError(validated.error);\n }\n\n const cancelEntryAction = context.container.resolve(\n CancelScheduledEntryActionUseCase\n );\n\n const res = await cancelEntryAction.execute(validated.data.id);\n\n if (res.isFail()) {\n throw res.error;\n }\n\n return true;\n });\n }\n }\n }\n });\n};\n"],"mappings":"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","ignoreList":[]}
|