ALwrity + Wordpress + Wix + GSC integration
This commit is contained in:
158
frontend/src/api/personaApi.ts
Normal file
158
frontend/src/api/personaApi.ts
Normal file
@@ -0,0 +1,158 @@
|
||||
/**
|
||||
* Persona API Client
|
||||
* Handles communication with the persona generation backend services.
|
||||
*/
|
||||
|
||||
import { apiClient } from './client';
|
||||
|
||||
export interface PersonaGenerationRequest {
|
||||
onboarding_data: {
|
||||
websiteAnalysis?: any;
|
||||
competitorResearch?: any;
|
||||
sitemapAnalysis?: any;
|
||||
businessData?: any;
|
||||
};
|
||||
selected_platforms: string[];
|
||||
user_preferences?: any;
|
||||
}
|
||||
|
||||
export interface PersonaGenerationResponse {
|
||||
success: boolean;
|
||||
core_persona?: any;
|
||||
platform_personas?: Record<string, any>;
|
||||
quality_metrics?: any;
|
||||
error?: string;
|
||||
}
|
||||
|
||||
export interface PersonaQualityRequest {
|
||||
core_persona: any;
|
||||
platform_personas: Record<string, any>;
|
||||
user_feedback?: any;
|
||||
}
|
||||
|
||||
export interface PersonaQualityResponse {
|
||||
success: boolean;
|
||||
quality_metrics?: any;
|
||||
recommendations?: string[];
|
||||
error?: string;
|
||||
}
|
||||
|
||||
export interface PersonaOptions {
|
||||
success: boolean;
|
||||
available_platforms: Array<{
|
||||
id: string;
|
||||
name: string;
|
||||
description: string;
|
||||
}>;
|
||||
persona_types: string[];
|
||||
quality_metrics: string[];
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate AI writing personas using the sophisticated persona system.
|
||||
*/
|
||||
export const generateWritingPersonas = async (
|
||||
request: PersonaGenerationRequest
|
||||
): Promise<PersonaGenerationResponse> => {
|
||||
try {
|
||||
const response = await apiClient.post('/api/onboarding/step4/generate-personas', request);
|
||||
return response.data;
|
||||
} catch (error: any) {
|
||||
console.error('Error generating personas:', error);
|
||||
return {
|
||||
success: false,
|
||||
error: error.response?.data?.detail || error.message || 'Failed to generate personas'
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Assess the quality of generated personas.
|
||||
*/
|
||||
export const assessPersonaQuality = async (
|
||||
request: PersonaQualityRequest
|
||||
): Promise<PersonaQualityResponse> => {
|
||||
try {
|
||||
const response = await apiClient.post('/api/onboarding/step4/assess-quality', request);
|
||||
return response.data;
|
||||
} catch (error: any) {
|
||||
console.error('Error assessing persona quality:', error);
|
||||
return {
|
||||
success: false,
|
||||
error: error.response?.data?.detail || error.message || 'Failed to assess persona quality'
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Regenerate persona with different parameters.
|
||||
*/
|
||||
export const regeneratePersona = async (
|
||||
request: PersonaGenerationRequest
|
||||
): Promise<PersonaGenerationResponse> => {
|
||||
try {
|
||||
const response = await apiClient.post('/api/onboarding/step4/regenerate-persona', request);
|
||||
return response.data;
|
||||
} catch (error: any) {
|
||||
console.error('Error regenerating persona:', error);
|
||||
return {
|
||||
success: false,
|
||||
error: error.response?.data?.detail || error.message || 'Failed to regenerate persona'
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Get available options for persona generation.
|
||||
*/
|
||||
export const getPersonaGenerationOptions = async (): Promise<PersonaOptions> => {
|
||||
try {
|
||||
const response = await apiClient.get('/api/onboarding/step4/persona-options');
|
||||
return response.data;
|
||||
} catch (error: any) {
|
||||
console.error('Error getting persona options:', error);
|
||||
return {
|
||||
success: false,
|
||||
available_platforms: [],
|
||||
persona_types: [],
|
||||
quality_metrics: []
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Utility function to prepare onboarding data for persona generation.
|
||||
*/
|
||||
export const prepareOnboardingData = (stepData: any) => {
|
||||
return {
|
||||
websiteAnalysis: stepData?.analysis || null,
|
||||
competitorResearch: {
|
||||
competitors: stepData?.competitors || [],
|
||||
researchSummary: stepData?.researchSummary || null,
|
||||
socialMediaAccounts: stepData?.socialMediaAccounts || {}
|
||||
},
|
||||
sitemapAnalysis: stepData?.sitemapAnalysis || null,
|
||||
businessData: stepData?.businessData || null
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Utility function to validate persona generation request.
|
||||
*/
|
||||
export const validatePersonaRequest = (request: PersonaGenerationRequest): string[] => {
|
||||
const errors: string[] = [];
|
||||
|
||||
if (!request.onboarding_data) {
|
||||
errors.push('Onboarding data is required');
|
||||
}
|
||||
|
||||
if (!request.selected_platforms || request.selected_platforms.length === 0) {
|
||||
errors.push('At least one platform must be selected');
|
||||
}
|
||||
|
||||
if (request.selected_platforms && request.selected_platforms.length > 5) {
|
||||
errors.push('Maximum 5 platforms can be selected');
|
||||
}
|
||||
|
||||
return errors;
|
||||
};
|
||||
Reference in New Issue
Block a user