Skip to content
Extraits de code Groupes Projets
Valider fea8fb9f rédigé par zakariaeyahya's avatar zakariaeyahya
Parcourir les fichiers

add configuration des audios et image et doc in boo

parent 3e12c857
Branches
Étiquettes
1 requête de fusion!94Resolve IA-439 "Feauture/"
......@@ -13,6 +13,9 @@ export const configEndpoints = {
reset: (assistantId: string) => `${configPrefix}/${assistantId}/response-config/reset`,
exists: (assistantId: string) => `${configPrefix}/${assistantId}/response-config/exists`,
initialize: (assistantId: string) => `${configPrefix}/${assistantId}/response-config/initialize`,
togglePdf: (assistantId: string) => `${configPrefix}/${assistantId}/response-config/pdf-support/toggle`,
pdfFormats: (assistantId: string) => `${configPrefix}/${assistantId}/response-config/pdf-formats`,
delete: (assistantId: string) => `${configPrefix}/${assistantId}/response-config`
},
detailLevel: {
......
......@@ -2,17 +2,18 @@ import { create } from 'zustand';
import axiosInstance from 'src/utils/axios';
import { configEndpoints } from 'src/shared/api/endpoints/assistant-config';
import type {
AssistantResponseConfigDTO,
UpdateResponseConfigRequest,
ApiResponse
import type {
AssistantResponseConfigDTO,
UpdateResponseConfigRequest,
ApiResponse
} from 'src/types/assistant-config';
export interface AssistantResponseConfigStore {
// State
responseConfig: AssistantResponseConfigDTO | null;
loading: boolean;
error: string | null;
// Actions
getResponseConfig: (assistantId: string) => Promise<void>;
updateResponseConfig: (assistantId: string, request: UpdateResponseConfigRequest) => Promise<void>;
......@@ -22,6 +23,8 @@ export interface AssistantResponseConfigStore {
updateAudioFormats: (assistantId: string, formats: string[]) => Promise<void>;
toggleVoiceTranscription: (assistantId: string, enabled: boolean) => Promise<void>;
toggleImageSupport: (assistantId: string, enabled: boolean) => Promise<void>;
togglePdfSupport: (assistantId: string, enabled: boolean) => Promise<void>;
updatePdfFormats: (assistantId: string, formats: string[]) => Promise<void>;
resetToDefaults: (assistantId: string) => Promise<void>;
clearError: () => void;
clearConfig: () => void;
......@@ -40,58 +43,59 @@ export const useAssistantResponseConfigStore = create<AssistantResponseConfigSto
// ============================================================================
getResponseConfig: async (assistantId: string) => {
set({ loading: true, error: null });
try {
const response = await axiosInstance.get<ApiResponse<AssistantResponseConfigDTO>>(
configEndpoints.responseConfig.get(assistantId)
);
if (response.data.success) {
set({
responseConfig: response.data.data,
loading: false
set({
responseConfig: response.data.data,
loading: false
});
} else {
set({
error: response.data.message || 'Erreur lors de la récupération',
loading: false
set({
error: response.data.message || 'Erreur lors de la récupération',
loading: false
});
}
} catch (error: any) {
set({
error: error.message || 'Erreur de connexion',
loading: false
set({
error: error.message || 'Erreur de connexion',
loading: false
});
}
},
// ============================================================================
// MISE À JOUR COMPLÈTE
// ============================================================================
updateResponseConfig: async (assistantId: string, request: UpdateResponseConfigRequest) => {
set({ loading: true, error: null });
try {
const response = await axiosInstance.put<ApiResponse<AssistantResponseConfigDTO>>(
configEndpoints.responseConfig.update(assistantId),
request
);
if (response.data.success) {
set({
responseConfig: response.data.data,
loading: false
set({
responseConfig: response.data.data,
loading: false
});
// FORCER un rafraîchissement pour s'assurer
await get().getResponseConfig(assistantId);
} else {
set({
error: response.data.message || 'Erreur lors de la mise à jour',
loading: false
set({
error: response.data.message || 'Erreur lors de la mise à jour',
loading: false
});
}
} catch (error: any) {
set({
error: error.message || 'Erreur de connexion',
loading: false
console.error('Erreur updateResponseConfig:', error);
set({
error: error.response?.data?.message || error.message || 'Erreur de connexion',
loading: false
});
}
},
......@@ -101,76 +105,76 @@ export const useAssistantResponseConfigStore = create<AssistantResponseConfigSto
// ============================================================================
updateMotivationalPhrases: async (assistantId: string, phrases: string[]) => {
set({ loading: true, error: null });
try {
const response = await axiosInstance.put<ApiResponse<string>>(
configEndpoints.responseConfig.motivationalPhrases(assistantId),
phrases
);
if (response.data.success) {
// Rafraîchir la configuration
await get().getResponseConfig(assistantId);
} else {
set({
error: response.data.message || 'Erreur lors de la mise à jour des phrases',
loading: false
set({
error: response.data.message || 'Erreur lors de la mise à jour des phrases',
loading: false
});
}
} catch (error: any) {
set({
error: error.message || 'Erreur de connexion',
loading: false
set({
error: error.message || 'Erreur de connexion',
loading: false
});
}
},
addMotivationalPhrase: async (assistantId: string, phrase: string) => {
set({ loading: true, error: null });
try {
const response = await axiosInstance.post<ApiResponse<string>>(
`${configEndpoints.responseConfig.motivationalPhrases(assistantId)}?phrase=${encodeURIComponent(phrase)}`
);
if (response.data.success) {
// Rafraîchir la configuration
await get().getResponseConfig(assistantId);
} else {
set({
error: response.data.message || 'Erreur lors de l\'ajout de la phrase',
loading: false
set({
error: response.data.message || 'Erreur lors de l\'ajout de la phrase',
loading: false
});
}
} catch (error: any) {
set({
error: error.message || 'Erreur de connexion',
loading: false
set({
error: error.message || 'Erreur de connexion',
loading: false
});
}
},
removeMotivationalPhrase: async (assistantId: string, phrase: string) => {
set({ loading: true, error: null });
try {
const response = await axiosInstance.delete<ApiResponse<string>>(
`${configEndpoints.responseConfig.motivationalPhrases(assistantId)}?phrase=${encodeURIComponent(phrase)}`
);
if (response.data.success) {
// Rafraîchir la configuration
await get().getResponseConfig(assistantId);
} else {
set({
error: response.data.message || 'Erreur lors de la suppression de la phrase',
loading: false
set({
error: response.data.message || 'Erreur lors de la suppression de la phrase',
loading: false
});
}
} catch (error: any) {
set({
error: error.message || 'Erreur de connexion',
loading: false
set({
error: error.message || 'Erreur de connexion',
loading: false
});
}
},
......@@ -180,26 +184,26 @@ export const useAssistantResponseConfigStore = create<AssistantResponseConfigSto
// ============================================================================
updateAudioFormats: async (assistantId: string, formats: string[]) => {
set({ loading: true, error: null });
try {
const response = await axiosInstance.put<ApiResponse<string>>(
configEndpoints.responseConfig.audioFormats(assistantId),
formats
);
if (response.data.success) {
// Rafraîchir la configuration
await get().getResponseConfig(assistantId);
} else {
set({
error: response.data.message || 'Erreur lors de la mise à jour des formats audio',
loading: false
set({
error: response.data.message || 'Erreur lors de la mise à jour des formats audio',
loading: false
});
}
} catch (error: any) {
set({
error: error.message || 'Erreur de connexion',
loading: false
set({
error: error.message || 'Erreur de connexion',
loading: false
});
}
},
......@@ -209,50 +213,104 @@ export const useAssistantResponseConfigStore = create<AssistantResponseConfigSto
// ============================================================================
toggleVoiceTranscription: async (assistantId: string, enabled: boolean) => {
set({ loading: true, error: null });
try {
const response = await axiosInstance.post<ApiResponse<string>>(
`${configEndpoints.responseConfig.toggleVoice(assistantId)}?enabled=${enabled}`
);
if (response.data.success) {
// Rafraîchir la configuration
await get().getResponseConfig(assistantId);
} else {
set({
error: response.data.message || 'Erreur lors du basculement de la transcription',
loading: false
set({
error: response.data.message || 'Erreur lors du basculement de la transcription',
loading: false
});
}
} catch (error: any) {
set({
error: error.message || 'Erreur de connexion',
loading: false
set({
error: error.message || 'Erreur de connexion',
loading: false
});
}
},
toggleImageSupport: async (assistantId: string, enabled: boolean) => {
set({ loading: true, error: null });
try {
const response = await axiosInstance.post<ApiResponse<string>>(
`${configEndpoints.responseConfig.toggleImage(assistantId)}?enabled=${enabled}`
);
if (response.data.success) {
// Rafraîchir la configuration
await get().getResponseConfig(assistantId);
} else {
set({
error: response.data.message || 'Erreur lors du basculement du support d\'images',
loading: false
set({
error: response.data.message || 'Erreur lors du basculement du support d\'images',
loading: false
});
}
} catch (error: any) {
set({
error: error.message || 'Erreur de connexion',
loading: false
set({
error: error.message || 'Erreur de connexion',
loading: false
});
}
},
// ============================================================================
// GESTION DU SUPPORT PDF
// ============================================================================
togglePdfSupport: async (assistantId: string, enabled: boolean) => {
set({ loading: true, error: null });
try {
const response = await axiosInstance.post<ApiResponse<string>>(
`${configEndpoints.responseConfig.togglePdf(assistantId)}?enabled=${enabled}`
);
if (response.data.success) {
// Rafraîchir la configuration
await get().getResponseConfig(assistantId);
} else {
set({
error: response.data.message || 'Erreur lors du basculement du support PDF',
loading: false
});
}
} catch (error: any) {
set({
error: error.message || 'Erreur de connexion',
loading: false
});
}
},
updatePdfFormats: async (assistantId: string, formats: string[]) => {
set({ loading: true, error: null });
try {
const response = await axiosInstance.put<ApiResponse<string>>(
configEndpoints.responseConfig.pdfFormats(assistantId),
formats
);
if (response.data.success) {
// Rafraîchir la configuration
await get().getResponseConfig(assistantId);
} else {
set({
error: response.data.message || 'Erreur lors de la mise à jour des formats PDF',
loading: false
});
}
} catch (error: any) {
set({
error: error.message || 'Erreur de connexion',
loading: false
});
}
},
......@@ -262,25 +320,25 @@ export const useAssistantResponseConfigStore = create<AssistantResponseConfigSto
// ============================================================================
resetToDefaults: async (assistantId: string) => {
set({ loading: true, error: null });
try {
const response = await axiosInstance.post<ApiResponse<string>>(
configEndpoints.responseConfig.reset(assistantId)
);
if (response.data.success) {
// Rafraîchir la configuration
await get().getResponseConfig(assistantId);
} else {
set({
error: response.data.message || 'Erreur lors de la réinitialisation',
loading: false
set({
error: response.data.message || 'Erreur lors de la réinitialisation',
loading: false
});
}
} catch (error: any) {
set({
error: error.message || 'Erreur de connexion',
loading: false
set({
error: error.message || 'Erreur de connexion',
loading: false
});
}
},
......@@ -295,4 +353,4 @@ export const useAssistantResponseConfigStore = create<AssistantResponseConfigSto
clearConfig: () => {
set({ responseConfig: null, error: null });
}
}));
\ No newline at end of file
}));
export type ResponseType = "TEXT" | "AUDIO" | "IMAGE";
export type ResponseType = "TEXT" | "AUDIO";
export type InputType = "TEXT" | "AUDIO" | "IMAGE" | "PDF"; // ✅ MAJUSCULES pour backend
export interface AssistantResponseConfigDTO {
assistantId: number;
responseTypes: ResponseType[];
inputTypes: InputType[];
welcomeMessage: string;
motivationalPhrases: string[];
helpPhrases: string[];
......@@ -10,16 +12,21 @@ export interface AssistantResponseConfigDTO {
voiceTranscription: boolean;
imageSupport: boolean;
imageFormats: string[];
pdfSupport: boolean;
pdfFormats: string[];
}
export interface UpdateResponseConfigRequest {
responseTypes: ResponseType[];
inputTypes: InputType[];
welcomeMessage: string;
motivationalPhrases: string[];
audioFormats: string[];
voiceTranscription: boolean;
imageSupport: boolean;
imageFormats: string[];
pdfSupport: boolean;
pdfFormats: string[];
}
export interface ApiResponse<T> {
......
// Create a new file named types.ts in the same directory as AIAssistantCustomizationService.ts
export interface IAIAssistantCustomizationSettings {
responseType: ("text" | "audio" | "image")[]; // Changed to array for multiple selections
inputType: "text" | "audio" | "image"; // Entrées utilisateur possibles
responseType: ("text" | "audio")[]; // Changed to array for multiple selections
inputType: "text" | "audio" | "image"| "pdf" ; // Entrées utilisateur possibles
welcomeMessage: string; // Message d'accueil personnalisé
motivationalPhrases: string[]; // Liste de phrases de motivation
helpPhrases: string[]; // Liste de phrases d'aide
......
0% ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter