UNPKG

@swoft/gtd-domain

Version:

Getting Things Done (GTD) productivity system - consolidated domain implementation

588 lines (586 loc) 14.7 kB
import { ApiValidationError, BackendApiError, BackendErrorResponseSchema, BackendInboxItemSchema, BackendInboxListResponseSchema, BackendProjectSchema, BackendProjectsListResponseSchema, BackendSuccessResponseSchema, ConsoleErrorLogger, DEFAULT_RETRY_CONFIG, ErrorType, classifyError, defaultErrorLogger, getUserFriendlyMessage, isBackendErrorResponse, isBackendSuccessResponse, shouldRetry, withRetry } from "../chunk-GQ5XH56W.mjs"; import { __name } from "../chunk-PAWJFY3S.mjs"; // src/contracts/api/types.ts import { z } from "zod"; var ListResponseSchema = /* @__PURE__ */ __name((itemSchema) => z.object({ items: z.array(itemSchema), pagination: z.object({ totalCount: z.number(), page: z.number().optional(), pageSize: z.number().optional(), hasMore: z.boolean().optional() }), totalCount: z.number() }), "ListResponseSchema"); // src/bounded-contexts/api-contracts/contracts/GtdApiContractV2.ts import { makeApi } from "@zodios/core"; import { z as z2 } from "zod"; var GTDInboxItemDTOSchema = z2.object({ id: z2.string(), originalContent: z2.string(), capturedAt: z2.string().datetime(), capturedByPersonId: z2.string(), clarification: z2.string().optional(), isActionable: z2.boolean().optional(), processingStatus: z2.enum([ "unprocessed", "processed" ]), lastRefinedAt: z2.string().datetime().optional(), refinedByPersonId: z2.string().optional() // Domain field name }); var GTDProjectProgressSchema = z2.object({ projectId: z2.string(), totalActions: z2.number(), completedActions: z2.number(), assignedActions: z2.number(), availableActions: z2.number(), completionPercentage: z2.number() }); var GTDNextActionDTOSchema = z2.object({ id: z2.string(), description: z2.string(), context: z2.string(), energyRequired: z2.enum([ "low", "medium", "high" ]), estimatedMinutes: z2.number(), createdBy: z2.string(), createdAt: z2.string().datetime(), projectId: z2.string().optional(), // Assignment fields assignedTo: z2.string().optional(), roleType: z2.string().optional(), assignedAt: z2.string().datetime().optional(), // Completion completedAt: z2.string().datetime().optional(), status: z2.enum([ "available", "assigned", "completed" ]) // Computed property in domain }); var GTDProjectDTOSchema = z2.object({ id: z2.string(), name: z2.string(), desiredOutcome: z2.string(), createdBy: z2.string(), createdAt: z2.string().datetime(), area: z2.string().optional(), reviewDate: z2.string().datetime().optional(), status: z2.enum([ "active", "someday-maybe", "completed", "cancelled" ]), completedAt: z2.string().datetime().optional(), nextActionIds: z2.array(z2.string()), progress: GTDProjectProgressSchema.optional() // Computed at application layer }); var CaptureInboxItemRequestSchema = z2.object({ content: z2.string(), capturedByPersonId: z2.string(), source: z2.string().optional() // For tracking capture source (e.g., 'mcp', 'web', 'email') }); var RefineInboxItemRequestSchema = z2.object({ refinedContent: z2.string(), refinedByPersonId: z2.string() }); var ClarifyInboxItemRequestSchema = z2.object({ clarification: z2.string(), isActionable: z2.boolean(), clarifiedByPersonId: z2.string() }); var CreateProjectRequestSchema = z2.object({ name: z2.string(), desiredOutcome: z2.string(), createdBy: z2.string(), area: z2.string().optional(), reviewDate: z2.string().datetime().optional() }); var CreateNextActionRequestSchema = z2.object({ description: z2.string(), context: z2.string(), energyRequired: z2.enum([ "low", "medium", "high" ]), estimatedMinutes: z2.number(), createdBy: z2.string(), projectId: z2.string().optional() }); var AssignNextActionRequestSchema = z2.object({ partyId: z2.string(), roleType: z2.string() }); var ListResponseSchema2 = /* @__PURE__ */ __name((itemSchema) => z2.object({ success: z2.boolean(), items: z2.array(itemSchema), total: z2.number(), meta: z2.object({ limit: z2.number(), offset: z2.number(), filters: z2.record(z2.string()).optional() }).optional() }), "ListResponseSchema"); var ItemResponseSchema = /* @__PURE__ */ __name((itemSchema) => z2.object({ success: z2.boolean(), item: itemSchema.nullable() }), "ItemResponseSchema"); var SuccessResponseSchema = z2.object({ success: z2.boolean(), message: z2.string().optional() }); var GtdApiContractV2 = makeApi([ // Inbox operations { method: "get", path: "/api/gtd/inbox", alias: "listInboxItems", parameters: [ { name: "processingStatus", type: "Query", schema: z2.enum([ "unprocessed", "processed" ]).optional() }, { name: "capturedByPersonId", type: "Query", schema: z2.string().optional() }, { name: "limit", type: "Query", schema: z2.number().optional() }, { name: "offset", type: "Query", schema: z2.number().optional() } ], response: ListResponseSchema2(GTDInboxItemDTOSchema) }, { method: "get", path: "/api/gtd/inbox/:id", alias: "getInboxItem", response: ItemResponseSchema(GTDInboxItemDTOSchema) }, { method: "post", path: "/api/gtd/inbox/capture", alias: "captureInboxItem", parameters: [ { name: "body", type: "Body", schema: CaptureInboxItemRequestSchema } ], response: ItemResponseSchema(GTDInboxItemDTOSchema) }, { method: "post", path: "/api/gtd/inbox/:id/refine", alias: "refineInboxItem", parameters: [ { name: "body", type: "Body", schema: RefineInboxItemRequestSchema } ], response: ItemResponseSchema(GTDInboxItemDTOSchema) }, { method: "post", path: "/api/gtd/inbox/:id/clarify", alias: "clarifyInboxItem", parameters: [ { name: "body", type: "Body", schema: ClarifyInboxItemRequestSchema } ], response: ItemResponseSchema(GTDInboxItemDTOSchema) }, { method: "delete", path: "/api/gtd/inbox/:id", alias: "deleteInboxItem", response: SuccessResponseSchema }, // Project operations { method: "get", path: "/api/gtd/projects", alias: "listProjects", parameters: [ { name: "status", type: "Query", schema: z2.enum([ "active", "someday-maybe", "completed", "cancelled" ]).optional() }, { name: "area", type: "Query", schema: z2.string().optional() }, { name: "createdBy", type: "Query", schema: z2.string().optional() }, { name: "needsAttention", type: "Query", schema: z2.boolean().optional() }, { name: "limit", type: "Query", schema: z2.number().optional() }, { name: "offset", type: "Query", schema: z2.number().optional() } ], response: ListResponseSchema2(GTDProjectDTOSchema) }, { method: "get", path: "/api/gtd/projects/:id", alias: "getProject", response: ItemResponseSchema(GTDProjectDTOSchema) }, { method: "post", path: "/api/gtd/projects", alias: "createProject", parameters: [ { name: "body", type: "Body", schema: CreateProjectRequestSchema } ], response: ItemResponseSchema(GTDProjectDTOSchema) }, { method: "post", path: "/api/gtd/projects/:id/complete", alias: "completeProject", parameters: [ { name: "body", type: "Body", schema: z2.object({ completedBy: z2.string().optional(), completionNotes: z2.string().optional() }) } ], response: ItemResponseSchema(GTDProjectDTOSchema) }, { method: "post", path: "/api/gtd/projects/:id/defer", alias: "deferProject", response: ItemResponseSchema(GTDProjectDTOSchema) }, { method: "post", path: "/api/gtd/projects/:id/activate", alias: "activateProject", response: ItemResponseSchema(GTDProjectDTOSchema) }, { method: "post", path: "/api/gtd/projects/:id/cancel", alias: "cancelProject", response: ItemResponseSchema(GTDProjectDTOSchema) }, { method: "delete", path: "/api/gtd/projects/:id", alias: "deleteProject", response: SuccessResponseSchema }, // Next Actions { method: "get", path: "/api/gtd/actions", alias: "listNextActions", parameters: [ { name: "context", type: "Query", schema: z2.string().optional() }, { name: "energyRequired", type: "Query", schema: z2.enum([ "low", "medium", "high" ]).optional() }, { name: "projectId", type: "Query", schema: z2.string().optional() }, { name: "status", type: "Query", schema: z2.enum([ "available", "assigned", "completed" ]).optional() }, { name: "assignedTo", type: "Query", schema: z2.string().optional() }, { name: "createdBy", type: "Query", schema: z2.string().optional() }, { name: "limit", type: "Query", schema: z2.number().optional() }, { name: "offset", type: "Query", schema: z2.number().optional() } ], response: ListResponseSchema2(GTDNextActionDTOSchema) }, { method: "get", path: "/api/gtd/actions/:id", alias: "getNextAction", response: ItemResponseSchema(GTDNextActionDTOSchema) }, { method: "post", path: "/api/gtd/actions", alias: "createNextAction", parameters: [ { name: "body", type: "Body", schema: CreateNextActionRequestSchema } ], response: ItemResponseSchema(GTDNextActionDTOSchema) }, { method: "post", path: "/api/gtd/actions/:id/assign", alias: "assignNextAction", parameters: [ { name: "body", type: "Body", schema: AssignNextActionRequestSchema } ], response: ItemResponseSchema(GTDNextActionDTOSchema) }, { method: "post", path: "/api/gtd/actions/:id/unassign", alias: "unassignNextAction", response: ItemResponseSchema(GTDNextActionDTOSchema) }, { method: "post", path: "/api/gtd/actions/:id/complete", alias: "completeNextAction", response: ItemResponseSchema(GTDNextActionDTOSchema) }, { method: "delete", path: "/api/gtd/actions/:id", alias: "deleteNextAction", response: SuccessResponseSchema }, // Weekly Review { method: "get", path: "/api/gtd/weekly-review", alias: "getWeeklyReview", parameters: [ { name: "reviewedBy", type: "Query", schema: z2.string() } // Person performing the review ], response: z2.object({ success: z2.boolean(), review: z2.object({ reviewDate: z2.string().datetime(), reviewedBy: z2.string(), // Inbox status unprocessedInboxItems: z2.number(), totalInboxItems: z2.number(), // Project health activeProjects: z2.number(), projectsNeedingAttention: z2.array(GTDProjectDTOSchema), somedayMaybeProjects: z2.number(), completedProjectsThisWeek: z2.number(), // Next actions overview availableActions: z2.number(), assignedActions: z2.number(), completedActionsThisWeek: z2.number(), actionsByContext: z2.record(z2.string(), z2.number()), actionsByEnergy: z2.object({ low: z2.number(), medium: z2.number(), high: z2.number() }), // Review recommendations recommendations: z2.array(z2.string()) // e.g., ["Process 5 inbox items", "Review stalled Project X"] }) }) }, // GTD Processing - Convert inbox item to project/action { method: "post", path: "/api/gtd/inbox/:id/process", alias: "processInboxItem", parameters: [ { name: "body", type: "Body", schema: z2.object({ clarification: z2.string(), isActionable: z2.boolean(), processedBy: z2.string(), // If actionable and multi-step (project) createProject: z2.object({ name: z2.string(), desiredOutcome: z2.string(), area: z2.string().optional(), firstAction: z2.object({ description: z2.string(), context: z2.string(), energyRequired: z2.enum([ "low", "medium", "high" ]), estimatedMinutes: z2.number() }) }).optional(), // If actionable and single-step (next action) createAction: z2.object({ description: z2.string(), context: z2.string(), energyRequired: z2.enum([ "low", "medium", "high" ]), estimatedMinutes: z2.number() }).optional(), // If not actionable moveToReference: z2.boolean().optional(), moveToSomedayMaybe: z2.boolean().optional(), trash: z2.boolean().optional() }) } ], response: z2.object({ success: z2.boolean(), processedItem: GTDInboxItemDTOSchema, createdProject: GTDProjectDTOSchema.optional(), createdAction: GTDNextActionDTOSchema.optional() }) } ]); export { ApiValidationError, AssignNextActionRequestSchema, BackendApiError, BackendErrorResponseSchema, BackendInboxItemSchema, BackendInboxListResponseSchema, BackendProjectSchema, BackendProjectsListResponseSchema, BackendSuccessResponseSchema, CaptureInboxItemRequestSchema, ClarifyInboxItemRequestSchema, ConsoleErrorLogger, CreateNextActionRequestSchema, CreateProjectRequestSchema, DEFAULT_RETRY_CONFIG, ErrorType, GTDInboxItemDTOSchema, GTDNextActionDTOSchema, GTDProjectDTOSchema, GTDProjectProgressSchema, GtdApiContractV2, ListResponseSchema, RefineInboxItemRequestSchema, classifyError, defaultErrorLogger, getUserFriendlyMessage, isBackendErrorResponse, isBackendSuccessResponse, shouldRetry, withRetry }; //# sourceMappingURL=index.mjs.map