operations/projex/sprint.ts (43 lines of code) (raw):

import { z } from "zod"; import { yunxiaoRequest, buildUrl } from "../../common/utils.js"; import { SprintInfoSchema } from "../../common/types.js"; // Function implementations export async function getSprintFunc( organizationId: string, projectId: string, id: string ): Promise<z.infer<typeof SprintInfoSchema>> { const url = `/oapi/v1/projex/organizations/${organizationId}/projects/${projectId}/sprints/${id}`; const response = await yunxiaoRequest(url, { method: "GET", }); return SprintInfoSchema.parse(response); } export async function listSprintsFunc( organizationId: string, id: string, status?: string, page?: number, perPage?: number ): Promise<z.infer<typeof SprintInfoSchema>[]> { const baseUrl = `/oapi/v1/projex/organizations/${organizationId}/projects/${id}/sprints`; // Build query parameters const queryParams: Record<string, string | number | undefined> = {}; // Add optional parameters if (status !== undefined) { queryParams.status = status; } if (page !== undefined) { queryParams.page = page; } if (perPage !== undefined) { queryParams.perPage = perPage; } // Use buildUrl function to construct URL with query parameters const url = buildUrl(baseUrl, queryParams); const response = await yunxiaoRequest(url, { method: "GET", }); // Ensure response is an array if (!Array.isArray(response)) { return []; } // Parse each sprint object return response.map(sprint => SprintInfoSchema.parse(sprint)); }