feat(TRUEREF-0020): add job status page with pause/resume/cancel controls

- Extend indexing_jobs schema to support 'paused' and 'cancelled' status
- Add JobQueue methods: pauseJob(), resumeJob(), cancelJob()
- Create POST /api/v1/jobs/[id]/{pause,resume,cancel} endpoints
- Implement /admin/jobs page with auto-refresh (3s polling)
- Add JobStatusBadge component with color-coded status display
- Action buttons appear contextually based on job status
- Optimistic UI updates with error handling
- All 477 existing tests pass, no regressions
This commit is contained in:
Giancarmine Salucci
2026-03-25 20:38:14 +01:00
parent 9519a66cef
commit e7a2a83cdb
8 changed files with 496 additions and 8 deletions

View File

@@ -2,7 +2,7 @@ export interface IndexingJobEntityProps {
id: string;
repository_id: string;
version_id: string | null;
status: 'queued' | 'running' | 'done' | 'failed';
status: 'queued' | 'running' | 'paused' | 'cancelled' | 'done' | 'failed';
progress: number;
total_files: number;
processed_files: number;
@@ -16,7 +16,7 @@ export class IndexingJobEntity {
id: string;
repository_id: string;
version_id: string | null;
status: 'queued' | 'running' | 'done' | 'failed';
status: 'queued' | 'running' | 'paused' | 'cancelled' | 'done' | 'failed';
progress: number;
total_files: number;
processed_files: number;
@@ -44,7 +44,7 @@ export interface IndexingJobProps {
id: string;
repositoryId: string;
versionId: string | null;
status: 'queued' | 'running' | 'done' | 'failed';
status: 'queued' | 'running' | 'paused' | 'cancelled' | 'done' | 'failed';
progress: number;
totalFiles: number;
processedFiles: number;
@@ -58,7 +58,7 @@ export class IndexingJob {
id: string;
repositoryId: string;
versionId: string | null;
status: 'queued' | 'running' | 'done' | 'failed';
status: 'queued' | 'running' | 'paused' | 'cancelled' | 'done' | 'failed';
progress: number;
totalFiles: number;
processedFiles: number;
@@ -86,7 +86,7 @@ export interface IndexingJobDtoProps {
id: string;
repositoryId: string;
versionId: string | null;
status: 'queued' | 'running' | 'done' | 'failed';
status: 'queued' | 'running' | 'paused' | 'cancelled' | 'done' | 'failed';
progress: number;
totalFiles: number;
processedFiles: number;
@@ -100,7 +100,7 @@ export class IndexingJobDto {
id: string;
repositoryId: string;
versionId: string | null;
status: 'queued' | 'running' | 'done' | 'failed';
status: 'queued' | 'running' | 'paused' | 'cancelled' | 'done' | 'failed';
progress: number;
totalFiles: number;
processedFiles: number;