55 lines · 1.7 KB · TypeScript
RawDownload
/** * HTTP route handlers for Project Operations. * * Routes: * - GET /api/projects - List all projects * - GET /api/repository-groups - List projects grouped by git repository * - GET /api/worktrees/:id/sessions - List sessions for a worktree */ import { createLogger } from '@shared/utils/logger'; import { validateProjectId } from '../ipc/guards'; import type { HttpServices } from './index';import type { FastifyInstance } from 'fastify'; const logger = createLogger('HTTP:projects'); export function registerProjectRoutes(app: FastifyInstance, services: HttpServices): void {  app.get('/api/projects', async () => {    try {      const projects = await services.projectScanner.scan();      return projects;    } catch (error) {      logger.error('Error in GET /api/projects:', error);      return [];    }  });   app.get('/api/repository-groups', async () => {    try {      const groups = await services.projectScanner.scanWithWorktreeGrouping();      return groups;    } catch (error) {      logger.error('Error in GET /api/repository-groups:', error);      return [];    }  });   app.get<{ Params: { id: string } }>('/api/worktrees/:id/sessions', async (request) => {    try {      const validated = validateProjectId(request.params.id);      if (!validated.valid) {        logger.error(`GET /api/worktrees/:id/sessions rejected: ${validated.error ?? 'unknown'}`);        return [];      }       const sessions = await services.projectScanner.listWorktreeSessions(validated.value!);      return sessions;    } catch (error) {      logger.error(`Error in GET /api/worktrees/${request.params.id}/sessions:`, error);      return [];    }  });}