scrum4me-mcp/src/status.ts
Madhura68 f5a630c143 feat(ST-704): status mappers and shared error helpers
- src/status.ts: bidirectional Task/Story status mappers — DB stays
  UPPER_SNAKE, MCP tools expose lowercase (matches REST API contract)
- src/errors.ts: formatZodError, toolError, toolJson and the
  withToolErrors() wrapper so each tool turns thrown exceptions
  (PermissionDenied, ZodError, generic) into structured MCP errors

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 23:02:05 +02:00

49 lines
1.3 KiB
TypeScript

import type { TaskStatus, StoryStatus } from '@prisma/client'
const TASK_DB_TO_API = {
TO_DO: 'todo',
IN_PROGRESS: 'in_progress',
REVIEW: 'review',
DONE: 'done',
} as const satisfies Record<TaskStatus, string>
const TASK_API_TO_DB: Record<string, TaskStatus> = {
todo: 'TO_DO',
in_progress: 'IN_PROGRESS',
review: 'REVIEW',
done: 'DONE',
}
const STORY_DB_TO_API = {
OPEN: 'open',
IN_SPRINT: 'in_sprint',
DONE: 'done',
} as const satisfies Record<StoryStatus, string>
const STORY_API_TO_DB: Record<string, StoryStatus> = {
open: 'OPEN',
in_sprint: 'IN_SPRINT',
done: 'DONE',
}
export type TaskStatusApi = (typeof TASK_DB_TO_API)[TaskStatus]
export type StoryStatusApi = (typeof STORY_DB_TO_API)[StoryStatus]
export function taskStatusToApi(s: TaskStatus): TaskStatusApi {
return TASK_DB_TO_API[s]
}
export function taskStatusFromApi(s: string): TaskStatus | null {
return TASK_API_TO_DB[s.toLowerCase()] ?? null
}
export function storyStatusToApi(s: StoryStatus): StoryStatusApi {
return STORY_DB_TO_API[s]
}
export function storyStatusFromApi(s: string): StoryStatus | null {
return STORY_API_TO_DB[s.toLowerCase()] ?? null
}
export const TASK_STATUS_API_VALUES = Object.values(TASK_DB_TO_API)
export const STORY_STATUS_API_VALUES = Object.values(STORY_DB_TO_API)