All files / frontend/src/services/api acquisition.ts

14.58% Statements 7/48
100% Branches 0/0
0% Functions 0/3
14.58% Lines 7/48

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85                  1x                                                                                                                                       1x 1x 1x 1x 1x   1x  
/**
 * Acquisition API Service
 * 
 * Handles RF acquisition operations:
 * - Trigger acquisition tasks
 * - Check task status
 * - Get acquisition history
 */
 
import api from '@/lib/api';
import type {
    AcquisitionRequest,
    AcquisitionTaskResponse,
    AcquisitionStatusResponse,
} from './types';
 
/**
 * Trigger a new RF acquisition
 */
export async function triggerAcquisition(
    request: AcquisitionRequest
): Promise<AcquisitionTaskResponse> {
    const response = await api.post<AcquisitionTaskResponse>(
        '/api/v1/acquisition/acquire',
        request
    );
    return response.data;
}
 
/**
 * Get status of an acquisition task
 */
export async function getAcquisitionStatus(
    taskId: string
): Promise<AcquisitionStatusResponse> {
    const response = await api.get<AcquisitionStatusResponse>(
        `/api/v1/acquisition/status/${taskId}`
    );
    return response.data;
}
 
/**
 * Poll acquisition status until completion
 * 
 * @param taskId - Task ID to poll
 * @param onProgress - Callback for progress updates
 * @param pollInterval - Polling interval in ms (default: 2000)
 * @returns Final acquisition status
 */
export async function pollAcquisitionStatus(
    taskId: string,
    onProgress?: (status: AcquisitionStatusResponse) => void,
    pollInterval: number = 2000
): Promise<AcquisitionStatusResponse> {
    return new Promise((resolve, reject) => {
        const poll = async () => {
            try {
                const status = await getAcquisitionStatus(taskId);
 
                if (onProgress) {
                    onProgress(status);
                }
 
                if (status.status === 'SUCCESS' || status.status === 'FAILURE' || status.status === 'REVOKED') {
                    resolve(status);
                } else {
                    setTimeout(poll, pollInterval);
                }
            } catch (error) {
                reject(error);
            }
        };
 
        poll();
    });
}
 
const acquisitionService = {
    triggerAcquisition,
    getAcquisitionStatus,
    pollAcquisitionStatus,
};
 
export default acquisitionService;