transition-handlers.ts•1.9 kB
import { JiraApiClient } from '../utils/api-client.js';
import { JiraFormatters } from '../utils/formatters.js';
export class TransitionHandlers {
  constructor(private apiClient: JiraApiClient) {}
  async handleGetTransitions(args: any) {
    try {
      const { issueKey } = args;
      if (!issueKey) {
        throw new Error('issueKey is required');
      }
      const result = await this.apiClient.get(`/issue/${issueKey}/transitions`);
      return {
        content: [
          {
            type: 'text',
            text: JiraFormatters.formatTransitions(result.transitions),
          },
        ],
      };
    } catch (error: any) {
      return {
        content: [
          {
            type: 'text',
            text: JiraFormatters.formatError(error),
          },
        ],
        isError: true,
      };
    }
  }
  async handleTransitionIssue(args: any) {
    try {
      const { issueKey, transitionId, comment } = args;
      if (!issueKey || !transitionId) {
        throw new Error('issueKey and transitionId are required');
      }
      const transitionData: any = {
        transition: {
          id: transitionId,
        },
      };
      // Add comment if provided
      if (comment) {
        transitionData.update = {
          comment: [
            {
              add: {
                body: comment,
              },
            },
          ],
        };
      }
      await this.apiClient.post(`/issue/${issueKey}/transitions`, transitionData);
      return {
        content: [
          {
            type: 'text',
            text: `✅ Issue ${issueKey} transitioned successfully!`,
          },
        ],
      };
    } catch (error: any) {
      return {
        content: [
          {
            type: 'text',
            text: JiraFormatters.formatError(error),
          },
        ],
        isError: true,
      };
    }
  }
}