import type { Schemas } from '../api/taskstream-api'; /* * Compact views for listings: what the model needs to reason, without ids * and nested objects it rarely uses (full detail through the get_* tools). */ type Issue = Schemas['IssueDto']; type Project = Schemas['ProjectDto']; type Release = Schemas['ReleaseDto']; type Sprint = Schemas['SprintDto']; export const issueLine = (issue: Issue) => ({ key: issue.key, title: issue.title, type: issue.type, status: issue.status, statusCategory: issue.statusCategory, priority: issue.priority, area: issue.area, assignee: issue.assignee?.name ?? null, release: issue.release?.name ?? null, sprint: issue.sprint?.name ?? null, parent: issue.parent?.key ?? null, /** Open tickets it waits for. */ blockedBy: issue.blockedBy.map((b) => b.key), votes: issue.votes, storyPoints: issue.storyPoints, dueDate: issue.dueDate, customFields: issue.customFields, labels: issue.labels, updatedAt: issue.updatedAt, }); export const projectLine = (project: Project) => ({ key: project.key, name: project.name, description: project.description, isPublic: project.isPublic, owner: project.owner.name, members: project.members.length, updatedAt: project.updatedAt, }); /** Statuses, types and areas by id: what create/update/move tools accept. */ export const projectSettings = (project: Project) => ({ statuses: project.settings.statuses.map((s) => ({ id: s.id, name: s.name, category: s.category, requiresReason: s.requiresReason, archived: s.archived, })), issueTypes: project.settings.issueTypes.map((t) => ({ id: t.id, name: t.name, archived: t.archived, })), areas: project.settings.areas.map((a) => ({ id: a.id, name: a.name, archived: a.archived, })), }); export const releaseLine = (release: Release) => ({ id: release.id, name: release.name, status: release.status, targetDate: release.targetDate, releasedAt: release.releasedAt, }); export const sprintLine = (sprint: Sprint) => ({ id: sprint.id, name: sprint.name, goal: sprint.goal, status: sprint.status, startDate: sprint.startDate, endDate: sprint.endDate, });