Files
ALwrity/frontend/src/services/strategyMonitoringApi.ts
2025-08-28 11:11:55 +05:30

260 lines
9.6 KiB
TypeScript

import { apiClient, aiApiClient } from '../api/client';
import { useState } from 'react';
export interface MonitoringTask {
component: string;
title: string;
description: string;
assignee: 'ALwrity' | 'Human';
frequency: string;
metric: string;
measurementMethod: string;
successCriteria: string;
alertThreshold: string;
actionableInsights: string;
}
export interface MonitoringComponent {
name: string;
icon: string;
tasks: MonitoringTask[];
}
export interface MonitoringPlan {
totalTasks: number;
alwrityTasks: number;
humanTasks: number;
metricsCount: number;
monitoringTasks: MonitoringTask[];
monitoringSchedule?: any;
successMetrics?: any;
metadata?: any;
}
export const strategyMonitoringApi = {
/**
* Generate monitoring plan for a strategy
*/
async generateMonitoringPlan(strategyId: number): Promise<{ success: boolean; data: MonitoringPlan; message: string }> {
try {
const response = await apiClient.post(`/api/content-planning/strategy/${strategyId}/generate-monitoring-plan`);
return response.data;
} catch (error: any) {
console.error('Error generating monitoring plan:', error);
throw new Error(error.response?.data?.detail || 'Failed to generate monitoring plan');
}
},
/**
* Activate strategy with monitoring plan
*/
async activateStrategyWithMonitoring(strategyId: number, monitoringPlan: MonitoringPlan): Promise<{ success: boolean; message: string; strategy_id: number }> {
try {
const response = await apiClient.post(`/api/content-planning/strategy/${strategyId}/activate-with-monitoring`, monitoringPlan);
return response.data;
} catch (error: any) {
console.error('Error activating strategy with monitoring:', error);
throw new Error(error.response?.data?.detail || 'Failed to activate strategy with monitoring');
}
},
/**
* Get monitoring plan for a strategy
*/
async getMonitoringPlan(strategyId: number): Promise<{ success: boolean; data: any }> {
try {
const response = await apiClient.get(`/api/content-planning/strategy/${strategyId}/monitoring-plan`);
return response.data;
} catch (error: any) {
console.error('Error getting monitoring plan:', error);
throw new Error(error.response?.data?.detail || 'Failed to get monitoring plan');
}
},
/**
* Update monitoring plan
*/
async updateMonitoringPlan(strategyId: number, monitoringPlan: Partial<MonitoringPlan>): Promise<{ success: boolean; message: string }> {
try {
const response = await apiClient.put(`/api/content-planning/strategy/${strategyId}/monitoring-plan`, monitoringPlan);
return response.data;
} catch (error: any) {
console.error('Error updating monitoring plan:', error);
throw new Error(error.response?.data?.detail || 'Failed to update monitoring plan');
}
},
/**
* Get performance history for a strategy
*/
async getPerformanceHistory(strategyId: number, days: number = 30): Promise<{ success: boolean; data: any }> {
try {
const response = await apiClient.get(`/content-planning/strategy/${strategyId}/performance-history?days=${days}`);
return response.data;
} catch (error: any) {
console.error('Error getting performance history:', error);
throw new Error(error.response?.data?.detail || 'Failed to get performance history');
}
},
/**
* Deactivate a strategy
*/
async deactivateStrategy(strategyId: number, userId: number = 1): Promise<{ success: boolean; message: string }> {
try {
const response = await apiClient.post(`/api/content-planning/strategy/${strategyId}/deactivate`, { user_id: userId });
return response.data;
} catch (error: any) {
console.error('Error deactivating strategy:', error);
throw new Error(error.response?.data?.detail || 'Failed to deactivate strategy');
}
},
/**
* Pause a strategy
*/
async pauseStrategy(strategyId: number, userId: number = 1): Promise<{ success: boolean; message: string }> {
try {
const response = await apiClient.post(`/api/content-planning/strategy/${strategyId}/pause`, { user_id: userId });
return response.data;
} catch (error: any) {
console.error('Error pausing strategy:', error);
throw new Error(error.response?.data?.detail || 'Failed to pause strategy');
}
},
/**
* Resume a strategy
*/
async resumeStrategy(strategyId: number, userId: number = 1): Promise<{ success: boolean; message: string }> {
try {
const response = await apiClient.post(`/api/content-planning/strategy/${strategyId}/resume`, { user_id: userId });
return response.data;
} catch (error: any) {
console.error('Error resuming strategy:', error);
throw new Error(error.response?.data?.detail || 'Failed to resume strategy');
}
},
/**
* Get performance metrics for a strategy
*/
async getPerformanceMetrics(strategyId: number): Promise<{ success: boolean; data: any; message: string }> {
try {
const response = await apiClient.get(`/api/content-planning/strategy/${strategyId}/performance-metrics`);
return response.data;
} catch (error: any) {
console.error('Error getting performance metrics:', error);
throw new Error(error.response?.data?.detail || 'Failed to get performance metrics');
}
},
/**
* Get trend data for a strategy
*/
async getTrendData(strategyId: number, timeRange: string = '30d'): Promise<{ success: boolean; data: any; message: string }> {
try {
const response = await aiApiClient.get(`/api/content-planning/strategy/${strategyId}/trend-data?time_range=${timeRange}`);
return response.data;
} catch (error: any) {
console.error('Error getting trend data:', error);
throw new Error(error.response?.data?.detail || 'Failed to get trend data');
}
},
// New API calls for transparency data
async getTransparencyData(strategyId: number): Promise<{ success: boolean; data: any; message: string }> {
try {
const response = await apiClient.get(`/api/content-planning/strategy/${strategyId}/transparency-data`);
return response.data;
} catch (error: any) {
console.error('Error fetching transparency data:', error);
throw new Error(error.response?.data?.detail || 'Failed to fetch transparency data');
}
},
async getMonitoringTasks(strategyId: number): Promise<{ success: boolean; data: any; message: string }> {
try {
const response = await apiClient.get(`/api/content-planning/strategy/${strategyId}/monitoring-tasks`);
return response.data;
} catch (error: any) {
console.error('Error fetching monitoring tasks:', error);
throw new Error(error.response?.data?.detail || 'Failed to fetch monitoring tasks');
}
},
async getDataFreshness(strategyId: number): Promise<{ success: boolean; data: any; message: string }> {
try {
const response = await apiClient.get(`/api/content-planning/strategy/${strategyId}/data-freshness`);
return response.data;
} catch (error: any) {
console.error('Error fetching data freshness:', error);
throw new Error(error.response?.data?.detail || 'Failed to fetch data freshness');
}
},
// Quality Analysis API methods
async getQualityAnalysis(strategyId: number): Promise<{ success: boolean; data: any; message: string }> {
try {
const response = await aiApiClient.post(`/api/content-planning/quality-analysis/${strategyId}/analyze`);
return response.data;
} catch (error: any) {
console.error('Error fetching quality analysis:', error);
throw new Error(error.response?.data?.detail || 'Failed to fetch quality analysis');
}
},
async getQualityMetrics(strategyId: number): Promise<{ success: boolean; data: any; message: string }> {
try {
const response = await apiClient.get(`/api/content-planning/quality-analysis/${strategyId}/metrics`);
return response.data;
} catch (error: any) {
console.error('Error fetching quality metrics:', error);
throw new Error(error.response?.data?.detail || 'Failed to fetch quality metrics');
}
},
async getQualityRecommendations(strategyId: number): Promise<{ success: boolean; data: any; message: string }> {
try {
const response = await apiClient.get(`/api/content-planning/quality-analysis/${strategyId}/recommendations`);
return response.data;
} catch (error: any) {
console.error('Error fetching quality recommendations:', error);
throw new Error(error.response?.data?.detail || 'Failed to fetch quality recommendations');
}
},
async getQualityDashboard(strategyId: number): Promise<{ success: boolean; data: any; message: string }> {
try {
const response = await apiClient.get(`/api/content-planning/quality-analysis/${strategyId}/dashboard`);
return response.data;
} catch (error: any) {
console.error('Error fetching quality dashboard:', error);
throw new Error(error.response?.data?.detail || 'Failed to fetch quality dashboard');
}
}
};
// Hook for monitoring plan generation
export const useMonitoringPlanGeneration = () => {
const [isGenerating, setIsGenerating] = useState(false);
const [error, setError] = useState<string | null>(null);
const generatePlan = async (strategyId: number): Promise<MonitoringPlan> => {
setIsGenerating(true);
setError(null);
try {
const response = await strategyMonitoringApi.generateMonitoringPlan(strategyId);
return response.data;
} catch (err: any) {
setError(err.message);
throw err;
} finally {
setIsGenerating(false);
}
};
return { generatePlan, isGenerating, error };
};