From 22cbaf0bcaebb664c1a1d0fb19c854c9523c5eb6 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Wed, 13 Aug 2025 09:40:30 +0300 Subject: [PATCH] Switch file to io stream in recognizer interface --- internal/adapter/recognizer/memory.go | 4 +++- internal/adapter/recognizer/yandex/recognizer.go | 7 +++---- internal/adapter/recognizer/yandex/s3.go | 12 +++--------- internal/contract/contract.go | 9 +++------ internal/service/transcribe.go | 8 +++++++- 5 files changed, 19 insertions(+), 21 deletions(-) diff --git a/internal/adapter/recognizer/memory.go b/internal/adapter/recognizer/memory.go index 25f5212..f7036cf 100644 --- a/internal/adapter/recognizer/memory.go +++ b/internal/adapter/recognizer/memory.go @@ -1,13 +1,15 @@ package recognizer import ( + "io" + "git.vakhrushev.me/av/transcriber/internal/entity" "github.com/google/uuid" ) type MemoryAudioRecognizer struct{} -func (r *MemoryAudioRecognizer) RecognizeFile(filePath string) (operationID string, err error) { +func (r *MemoryAudioRecognizer) Recognize(file io.Reader, fileName string) (operationID string, err error) { return uuid.NewString(), nil } diff --git a/internal/adapter/recognizer/yandex/recognizer.go b/internal/adapter/recognizer/yandex/recognizer.go index e711211..2185757 100644 --- a/internal/adapter/recognizer/yandex/recognizer.go +++ b/internal/adapter/recognizer/yandex/recognizer.go @@ -2,7 +2,7 @@ package yandex import ( "fmt" - "path/filepath" + "io" "git.vakhrushev.me/av/transcriber/internal/entity" ) @@ -54,10 +54,9 @@ func (s *YandexAudioRecognizerService) Close() error { return s.sttService.Close() } -func (s *YandexAudioRecognizerService) RecognizeFile(filePath string) (string, error) { - fileName := filepath.Base(filePath) +func (s *YandexAudioRecognizerService) Recognize(file io.Reader, fileName string) (string, error) { - err := s.s3Sevice.uploadFile(filePath, fileName) + err := s.s3Sevice.uploadFile(file, fileName) if err != nil { return "", err } diff --git a/internal/adapter/recognizer/yandex/s3.go b/internal/adapter/recognizer/yandex/s3.go index 042ccd4..a85ab89 100644 --- a/internal/adapter/recognizer/yandex/s3.go +++ b/internal/adapter/recognizer/yandex/s3.go @@ -3,7 +3,7 @@ package yandex import ( "context" "fmt" - "os" + "io" "strings" "github.com/aws/aws-sdk-go-v2/aws" @@ -65,14 +65,8 @@ func newYandexS3Service(cfg s3Config) (*yandexS3Service, error) { }, nil } -func (s *yandexS3Service) uploadFile(filePath, fileName string) error { - file, err := os.Open(filePath) - if err != nil { - return fmt.Errorf("failed to open file %s: %w", filePath, err) - } - defer file.Close() - - _, err = s.uploader.Upload(context.Background(), &s3.PutObjectInput{ +func (s *yandexS3Service) uploadFile(file io.Reader, fileName string) error { + _, err := s.uploader.Upload(context.Background(), &s3.PutObjectInput{ Bucket: aws.String(s.bucketName), Key: aws.String(fileName), Body: file, diff --git a/internal/contract/contract.go b/internal/contract/contract.go index 76453db..5a9b6c7 100644 --- a/internal/contract/contract.go +++ b/internal/contract/contract.go @@ -1,6 +1,8 @@ package contract import ( + "io" + "git.vakhrushev.me/av/transcriber/internal/entity" ) @@ -8,13 +10,8 @@ type AudioFileConverter interface { Convert(src, dest string) error } -type YandexS3Uploader interface { - UploadFile(filePath, fileName string) error - FileUrl(fileName string) string -} - type AudioRecognizer interface { - RecognizeFile(filePath string) (operationID string, err error) + Recognize(file io.Reader, fileName string) (operationID string, err error) GetRecognitionText(operationID string) (string, error) CheckRecognitionStatus(operationID string) (*entity.RecognitionResult, error) } diff --git a/internal/service/transcribe.go b/internal/service/transcribe.go index 57db918..14b3a7d 100644 --- a/internal/service/transcribe.go +++ b/internal/service/transcribe.go @@ -175,11 +175,17 @@ func (s *TranscribeService) FindAndRunTranscribeJob() error { filePath := filepath.Join(baseStorageDir, fileRecord.FileName) + file, err := os.Open(filePath) + if err != nil { + return err + } + defer file.Close() + destFileId := uuid.NewString() destFileRecord := fileRecord.CopyWithStorage(destFileId, entity.StorageS3) // Запускаем асинхронное распознавание - operationID, err := s.recognizer.RecognizeFile(filePath) + operationID, err := s.recognizer.Recognize(file, destFileRecord.FileName) if err != nil { return err }