UNPKG

@swoft/gtd-domain

Version:

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

1 lines 19.7 kB
{"version":3,"sources":["../src/client/gtd-client.ts"],"sourcesContent":["/**\n * Platform-agnostic GTD API Client\n * \n * This client can be used in any JavaScript/TypeScript environment:\n * - Next.js\n * - Vite\n * - CLI tools\n * - Node.js applications\n * - React Native\n * \n * Features type-safe API contracts and standardized error handling.\n */\n\nimport { HttpClient } from './http-client';\nimport {\n ListResponse,\n ListQueryParams,\n GTDInboxItemDTO,\n GTDProjectDTO,\n GTDNextActionDTO,\n CaptureInboxItemRequest,\n RefineInboxItemRequest,\n ClarifyInboxItemRequest,\n CreateProjectRequest,\n CreateNextActionRequest,\n AssignNextActionRequest,\n InboxQueryFilters,\n ProjectQueryFilters,\n NextActionQueryFilters,\n ProcessInboxItemRequest,\n ProcessInboxResponse,\n WeeklyReviewResponse,\n} from '../contracts';\n\nimport {\n BackendInboxListResponse,\n BackendProjectsListResponse,\n BackendCreateInboxItemRequest,\n BackendCreateInboxItemResponse,\n BackendInboxListResponseSchema,\n BackendProjectsListResponseSchema,\n isBackendSuccessResponse,\n BackendApiError,\n ApiValidationError,\n} from '../contracts/api/backend-response-types';\n\nimport {\n classifyError,\n withRetry,\n defaultErrorLogger,\n ErrorLogger,\n} from '../contracts/api/error-handling';\n\nexport interface GTDClientConfig {\n enableValidation?: boolean;\n enableRetry?: boolean;\n errorLogger?: ErrorLogger;\n}\n\nexport class GTDClient {\n private readonly config: GTDClientConfig;\n\n constructor(\n private http: HttpClient,\n private basePath = '/api/productivity/gtd',\n config: GTDClientConfig = {}\n ) {\n this.config = {\n enableValidation: true,\n enableRetry: true,\n errorLogger: defaultErrorLogger,\n ...config,\n };\n }\n\n private async executeRequest<T>(operation: () => Promise<T>): Promise<T> {\n try {\n if (this.config.enableRetry) {\n return await withRetry(operation);\n }\n return await operation();\n } catch (error) {\n const standardError = classifyError(error);\n this.config.errorLogger?.logError(standardError);\n throw standardError;\n }\n }\n\n private validateResponse<T>(data: unknown, schema: any, operationName: string): T {\n if (!this.config.enableValidation) {\n return data as T;\n }\n\n const result = schema.safeParse(data);\n if (!result.success) {\n throw new ApiValidationError(\n `Invalid response format for ${operationName}`,\n result.error.issues\n );\n }\n return result.data;\n }\n\n // Inbox Operations\n async getInboxItems(\n filters?: InboxQueryFilters & ListQueryParams\n ): Promise<ListResponse<GTDInboxItemDTO>> {\n return this.executeRequest(async () => {\n const queryParams = filters ? new URLSearchParams(\n Object.entries(filters)\n .filter(([_, value]) => value !== undefined)\n .reduce((acc, [key, value]) => ({ ...acc, [key]: String(value) }), {} as Record<string, string>)\n ).toString() : '';\n \n const url = queryParams ? `${this.basePath}/inbox?${queryParams}` : `${this.basePath}/inbox`;\n const rawResponse = await this.http.get<BackendInboxListResponse>(url, { \n headers: { 'Content-Type': 'application/json' }\n });\n \n // Validate response format\n const validatedResponse = this.validateResponse<BackendInboxListResponse>(\n rawResponse,\n BackendInboxListResponseSchema,\n 'getInboxItems'\n );\n \n // Handle error response\n if (!isBackendSuccessResponse(validatedResponse)) {\n throw BackendApiError.fromBackendError(validatedResponse);\n }\n \n const { data } = validatedResponse;\n \n // Transform to standardized format with proper typing including required fields\n return {\n items: data.items.map(item => ({\n id: item.id,\n originalContent: item.content || item.text || item.title || '',\n capturedAt: item.capturedAt,\n capturedByPersonId: item.capturedBy || 'unknown',\n processingStatus: item.status === 'processed' ? 'processed' as const : 'unprocessed' as const,\n clarification: item.clarification || undefined,\n isActionable: item.isActionable || undefined,\n // These fields are not available in backend response yet - use undefined for now\n lastRefinedAt: undefined,\n refinedByPersonId: undefined,\n })),\n pagination: {\n totalCount: data.total,\n // Add more pagination info if available\n },\n totalCount: data.total,\n };\n });\n }\n\n async getInboxItem(id: string): Promise<GTDInboxItemDTO | null> {\n const response = await this.http.get<any>(`${this.basePath}/inbox/${id}`);\n return response.item || null;\n }\n\n async captureInboxItem(request: CaptureInboxItemRequest): Promise<GTDInboxItemDTO> {\n const response = await this.http.post<any>(`${this.basePath}/inbox`, request);\n return response.item || response;\n }\n\n async refineInboxItem(id: string, request: RefineInboxItemRequest): Promise<GTDInboxItemDTO> {\n const response = await this.http.post<any>(`${this.basePath}/inbox/${id}/refine`, request);\n return response.item || response;\n }\n\n async clarifyInboxItem(id: string, request: ClarifyInboxItemRequest): Promise<GTDInboxItemDTO> {\n const response = await this.http.post<any>(`${this.basePath}/inbox/${id}/clarify`, request);\n return response.item || response;\n }\n\n async processInboxItem(id: string, request: ProcessInboxItemRequest): Promise<ProcessInboxResponse> {\n return this.http.post(`${this.basePath}/inbox/${id}/process`, request);\n }\n\n async deleteInboxItem(id: string): Promise<void> {\n await this.http.delete(`${this.basePath}/inbox/${id}`);\n }\n\n // Project Operations\n async getProjects(\n filters?: ProjectQueryFilters & ListQueryParams\n ): Promise<ListResponse<GTDProjectDTO>> {\n const queryParams = filters ? new URLSearchParams(\n Object.entries(filters)\n .filter(([_, value]) => value !== undefined)\n .reduce((acc, [key, value]) => ({ ...acc, [key]: String(value) }), {} as Record<string, string>)\n ).toString() : '';\n \n const url = queryParams ? `${this.basePath}/projects?${queryParams}` : `${this.basePath}/projects`;\n const response = await this.http.get<any>(url);\n \n // Transform backend response to standardized format\n if (response.items && response.total !== undefined) {\n return {\n items: response.items,\n pagination: {\n totalCount: response.total,\n page: response.meta?.page,\n pageSize: response.meta?.limit,\n },\n totalCount: response.total\n };\n }\n \n // Handle array response\n const items = Array.isArray(response) ? response : [];\n return {\n items,\n pagination: { totalCount: items.length },\n totalCount: items.length\n };\n }\n\n async getProject(id: string): Promise<GTDProjectDTO | null> {\n const response = await this.http.get<any>(`${this.basePath}/projects/${id}`);\n return response.item || null;\n }\n\n async createProject(request: CreateProjectRequest): Promise<GTDProjectDTO> {\n const response = await this.http.post<any>(`${this.basePath}/projects`, request);\n return response.item || response;\n }\n\n async completeProject(id: string, completedBy?: string, completionNotes?: string): Promise<GTDProjectDTO> {\n const response = await this.http.post<any>(`${this.basePath}/projects/${id}/complete`, {\n completedBy,\n completionNotes\n });\n return response.item || response;\n }\n\n async deferProject(id: string): Promise<GTDProjectDTO> {\n const response = await this.http.post<any>(`${this.basePath}/projects/${id}/defer`);\n return response.item || response;\n }\n\n async activateProject(id: string): Promise<GTDProjectDTO> {\n const response = await this.http.post<any>(`${this.basePath}/projects/${id}/activate`);\n return response.item || response;\n }\n\n async cancelProject(id: string): Promise<GTDProjectDTO> {\n const response = await this.http.post<any>(`${this.basePath}/projects/${id}/cancel`);\n return response.item || response;\n }\n\n async deleteProject(id: string): Promise<void> {\n await this.http.delete(`${this.basePath}/projects/${id}`);\n }\n\n // Next Action Operations\n async getNextActions(\n filters?: NextActionQueryFilters & ListQueryParams\n ): Promise<ListResponse<GTDNextActionDTO>> {\n const queryParams = filters ? new URLSearchParams(\n Object.entries(filters)\n .filter(([_, value]) => value !== undefined)\n .reduce((acc, [key, value]) => ({ ...acc, [key]: String(value) }), {} as Record<string, string>)\n ).toString() : '';\n \n const url = queryParams ? `${this.basePath}/actions?${queryParams}` : `${this.basePath}/actions`;\n const response = await this.http.get<any>(url);\n \n // Transform backend response to standardized format\n if (response.items && response.total !== undefined) {\n return {\n items: response.items,\n pagination: {\n totalCount: response.total,\n page: response.meta?.page,\n pageSize: response.meta?.limit,\n },\n totalCount: response.total\n };\n }\n \n // Handle array response\n const items = Array.isArray(response) ? response : [];\n return {\n items,\n pagination: { totalCount: items.length },\n totalCount: items.length\n };\n }\n\n async getNextAction(id: string): Promise<GTDNextActionDTO | null> {\n const response = await this.http.get<any>(`${this.basePath}/actions/${id}`);\n return response.item || null;\n }\n\n async createNextAction(request: CreateNextActionRequest): Promise<GTDNextActionDTO> {\n const response = await this.http.post<any>(`${this.basePath}/actions`, request);\n return response.item || response;\n }\n\n async assignNextAction(id: string, request: AssignNextActionRequest): Promise<GTDNextActionDTO> {\n const response = await this.http.post<any>(`${this.basePath}/actions/${id}/assign`, request);\n return response.item || response;\n }\n\n async unassignNextAction(id: string): Promise<GTDNextActionDTO> {\n const response = await this.http.post<any>(`${this.basePath}/actions/${id}/unassign`);\n return response.item || response;\n }\n\n async completeNextAction(id: string): Promise<GTDNextActionDTO> {\n const response = await this.http.post<any>(`${this.basePath}/actions/${id}/complete`);\n return response.item || response;\n }\n\n async deleteNextAction(id: string): Promise<void> {\n await this.http.delete(`${this.basePath}/actions/${id}`);\n }\n\n // Convenience methods that match the existing frontend API\n async getActionsByProject(projectId: string): Promise<ListResponse<GTDNextActionDTO>> {\n return this.getNextActions({ projectId });\n }\n\n async getActionsByContext(context: string): Promise<ListResponse<GTDNextActionDTO>> {\n return this.getNextActions({ context });\n }\n\n async getContexts(): Promise<ListResponse<string>> {\n const response = await this.http.get<string[]>(`${this.basePath}/contexts`);\n const contexts = Array.isArray(response) ? response : [];\n return {\n items: contexts,\n pagination: { totalCount: contexts.length },\n totalCount: contexts.length\n };\n }\n\n // Weekly Review\n async getWeeklyReview(reviewedBy: string): Promise<WeeklyReviewResponse> {\n const queryParams = new URLSearchParams({ reviewedBy }).toString();\n const response = await this.http.get<any>(`${this.basePath}/weekly-review?${queryParams}`, {\n headers: { 'Content-Type': 'application/json' }\n });\n return response.review || response;\n }\n}"],"mappings":"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","names":["GTDClient","config","http","basePath","enableValidation","enableRetry","errorLogger","defaultErrorLogger","executeRequest","operation","withRetry","error","standardError","classifyError","logError","validateResponse","data","schema","operationName","result","safeParse","success","ApiValidationError","issues","getInboxItems","filters","queryParams","URLSearchParams","Object","entries","filter","_","value","undefined","reduce","acc","key","String","toString","url","rawResponse","get","headers","validatedResponse","BackendInboxListResponseSchema","isBackendSuccessResponse","BackendApiError","fromBackendError","items","map","item","id","originalContent","content","text","title","capturedAt","capturedByPersonId","capturedBy","processingStatus","status","clarification","isActionable","lastRefinedAt","refinedByPersonId","pagination","totalCount","total","getInboxItem","response","captureInboxItem","request","post","refineInboxItem","clarifyInboxItem","processInboxItem","deleteInboxItem","delete","getProjects","page","meta","pageSize","limit","Array","isArray","length","getProject","createProject","completeProject","completedBy","completionNotes","deferProject","activateProject","cancelProject","deleteProject","getNextActions","getNextAction","createNextAction","assignNextAction","unassignNextAction","completeNextAction","deleteNextAction","getActionsByProject","projectId","getActionsByContext","context","getContexts","contexts","getWeeklyReview","reviewedBy","review"]}