Primeiro Commit

This commit is contained in:
luisfepsale
2025-10-22 12:52:23 -03:00
parent 27820254e7
commit 235fb538e1
19 changed files with 2132 additions and 426 deletions
+47 -34
View File
@@ -6,6 +6,7 @@ import { Upload, Download, Trash2, FileAudio, Copy, Search } from "lucide-react"
import { ScrollArea } from "@/components/ui/scroll-area";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { useToast } from "@/hooks/use-toast";
import { transcriptionService } from "@/services/transcription";
const SUPPORTED_FORMATS = ['flac', 'm4a', 'mp3', 'mp4', 'mpeg', 'mpga', 'oga', 'ogg', 'wav', 'webm'];
const MAX_FILE_SIZE = 25 * 1024 * 1024; // 25 MB
@@ -15,6 +16,7 @@ interface TranscriptionResult {
fileName: string;
text: string;
timestamp: Date;
audioUrl?: string;
}
export const TranscriptionView = () => {
@@ -36,20 +38,12 @@ export const TranscriptionView = () => {
const file = event.target.files?.[0];
if (!file) return;
if (file.size > MAX_FILE_SIZE) {
// Valida o arquivo usando o serviço
const validation = transcriptionService.validateAudioFile(file);
if (!validation.valid) {
toast({
title: "Arquivo muito grande",
description: "O arquivo deve ter no máximo 25 MB",
variant: "destructive",
});
return;
}
const fileExtension = file.name.split('.').pop()?.toLowerCase();
if (!fileExtension || !SUPPORTED_FORMATS.includes(fileExtension)) {
toast({
title: "Formato não suportado",
description: `Formatos suportados: ${SUPPORTED_FORMATS.join(', ')}`,
title: "Arquivo inválido",
description: validation.error,
variant: "destructive",
});
return;
@@ -61,28 +55,47 @@ export const TranscriptionView = () => {
const handleTranscription = async (file: File) => {
setIsTranscribing(true);
setTimeout(() => {
const result: TranscriptionResult = {
id: Date.now().toString(),
fileName: file.name,
text: "Esta é uma transcrição de exemplo do áudio enviado. O sistema utilizará modelos de IA avançados para converter sua fala em texto com alta precisão. O áudio foi processado com sucesso e convertido para texto.",
timestamp: new Date(),
};
setTranscriptionResult(result);
const newHistory = [result, ...transcriptionHistory].slice(0, 10);
setTranscriptionHistory(newHistory);
localStorage.setItem('transcriptionHistory', JSON.stringify(newHistory));
setIsTranscribing(false);
toast({
title: "Transcrição concluída",
description: "Seu áudio foi transcrito com sucesso!",
try {
// Chama o serviço de transcrição
const response = await transcriptionService.transcribeAudio({
audioFile: file,
});
}, 2000);
// Verifica se a transcrição foi bem-sucedida
if (response.success) {
const result: TranscriptionResult = {
id: response.transcription_id,
fileName: file.name,
text: response.message,
timestamp: new Date(),
audioUrl: response.audio_url,
};
setTranscriptionResult(result);
const newHistory = [result, ...transcriptionHistory].slice(0, 10);
setTranscriptionHistory(newHistory);
localStorage.setItem('transcriptionHistory', JSON.stringify(newHistory));
toast({
title: "Transcrição concluída",
description: "Seu áudio foi transcrito com sucesso!",
});
} else {
throw new Error(response.message || 'Erro ao transcrever áudio');
}
} catch (error: any) {
console.error('Erro na transcrição:', error);
toast({
title: "Erro na transcrição",
description: error.message || "Não foi possível transcrever o áudio. Tente novamente.",
variant: "destructive",
});
} finally {
setIsTranscribing(false);
}
};
const handleDeleteTranscription = () => {