59 lines
1.7 KiB
TypeScript
59 lines
1.7 KiB
TypeScript
import axiosClient from '../axios/axios';
|
|
import { Detection } from '@/types';
|
|
import { projectService } from './project.service';
|
|
|
|
/**
|
|
* Detection Service
|
|
*/
|
|
export const detectionService = {
|
|
/**
|
|
* Fetch all detections from completed videos
|
|
* Uses the summary endpoint to get detections for each project
|
|
*/
|
|
getAllDetections: async (): Promise<Detection[]> => {
|
|
try {
|
|
// First get all projects
|
|
const projectsResponse = await projectService.getProjects();
|
|
const projects = projectsResponse.items;
|
|
|
|
// Then fetch detections for each project
|
|
const allDetections: Detection[] = [];
|
|
|
|
for (const project of projects) {
|
|
try {
|
|
const response = await axiosClient.get<{
|
|
packages: {
|
|
[key: string]: {
|
|
chainages: {
|
|
[key: string]: {
|
|
detections: Detection[];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}>('biz/api/v1/dashboard/overview', {
|
|
params: { project_id: project.id },
|
|
});
|
|
|
|
const summary = response.data;
|
|
|
|
// Extract detections from the nested structure
|
|
for (const pkg of Object.values(summary.packages || {})) {
|
|
for (const loc of Object.values(pkg.chainages || {})) {
|
|
allDetections.push(...(loc.detections || []));
|
|
}
|
|
}
|
|
} catch (e) {
|
|
// Skip projects that fail to load
|
|
console.warn(`Failed to load detections for project ${project.id}:`, e);
|
|
}
|
|
}
|
|
|
|
return allDetections;
|
|
} catch (e) {
|
|
console.error('Failed to fetch all detections:', e);
|
|
return [];
|
|
}
|
|
},
|
|
};
|