All files / services cronJobsApi.ts

100% Statements 5/5
100% Branches 0/0
100% Functions 3/3
100% Lines 5/5

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                                                            2x 2x   32x 31x           2x  
import {api} from './api.ts';
 
// ============================================================================
// Types
// ============================================================================
 
export type CronJobStatus = 'healthy' | 'warning' | 'stale' | 'never_run';
 
export interface CronJobInfo {
	jobName: string;
	displayName: string;
	expectedFrequency: 'daily' | 'monthly';
	lastRunAt: string | null;
	lastRunFor: string | null;
	accountsAffected: number;
	totalAmount: string | null;
	status: CronJobStatus;
}
 
interface CronJobsResponse {
	success: boolean;
	data: {
		jobs: CronJobInfo[];
	};
}
 
// ============================================================================
// API Slice
// ============================================================================
 
export const cronJobsApi = api.injectEndpoints({
	endpoints: (builder) => ({
		getCronJobStatuses: builder.query<CronJobInfo[], void>({
			query: () => '/admin/cron-jobs',
			transformResponse: (response: CronJobsResponse) => response.data.jobs,
			providesTags: ['CronJobs']
		})
	})
});
 
export const {useGetCronJobStatusesQuery} = cronJobsApi;