import 'server-only' import { prisma } from '@/lib/prisma' import { resolveActiveSprint } from '@/lib/active-sprint' import { sprintStatusToApi, type SprintStatusApi } from '@/lib/task-status' export type SprintSwitcherItem = { id: string code: string sprint_goal: string status: SprintStatusApi } export interface SprintSwitcherData { sprintItems: SprintSwitcherItem[] buildingSprintIds: string[] activeSprintItem: SprintSwitcherItem | null } export async function getSprintSwitcherData( productId: string, opts?: { activeSprintId?: string | null; userId?: string }, ): Promise { const allSprints = await prisma.sprint.findMany({ where: { product_id: productId }, orderBy: { created_at: 'desc' }, select: { id: true, code: true, sprint_goal: true, status: true }, }) let buildingSprintIds: string[] = [] if (allSprints.length > 0) { const runs = await prisma.sprintRun.findMany({ where: { sprint_id: { in: allSprints.map(s => s.id) }, status: { in: ['QUEUED', 'RUNNING'] }, }, select: { sprint_id: true }, }) buildingSprintIds = Array.from(new Set(runs.map(r => r.sprint_id))) } const sprintItems: SprintSwitcherItem[] = allSprints.map(s => ({ id: s.id, code: s.code, sprint_goal: s.sprint_goal, status: sprintStatusToApi(s.status), })) let activeSprintItem: SprintSwitcherItem | null = null if (opts?.activeSprintId !== undefined) { activeSprintItem = opts.activeSprintId ? sprintItems.find(s => s.id === opts.activeSprintId) ?? null : null } else if (opts?.userId) { const resolved = await resolveActiveSprint(productId, opts.userId) activeSprintItem = resolved ? sprintItems.find(s => s.id === resolved.id) ?? null : null } return { sprintItems, buildingSprintIds, activeSprintItem } }