using DramaLing.Api.Models.DTOs; using DramaLing.Api.Models.Entities; using DramaLing.Api.Services.AI.Gemini; namespace DramaLing.Api.Services; public interface IGeminiService { Task AnalyzeSentenceAsync(string inputText, AnalysisOptions options); Task GenerateImageDescriptionAsync(Flashcard flashcard, GenerationOptionsDto options); } /// /// Gemini 服務 Facade,統一管理句子分析和圖片描述生成功能 /// public class GeminiService : IGeminiService { private readonly ISentenceAnalyzer _sentenceAnalyzer; private readonly IImageDescriptionGenerator _imageDescriptionGenerator; private readonly ILogger _logger; public GeminiService( ISentenceAnalyzer sentenceAnalyzer, IImageDescriptionGenerator imageDescriptionGenerator, ILogger logger) { _sentenceAnalyzer = sentenceAnalyzer ?? throw new ArgumentNullException(nameof(sentenceAnalyzer)); _imageDescriptionGenerator = imageDescriptionGenerator ?? throw new ArgumentNullException(nameof(imageDescriptionGenerator)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _logger.LogInformation("GeminiService Facade initialized successfully"); } public async Task AnalyzeSentenceAsync(string inputText, AnalysisOptions options) { return await _sentenceAnalyzer.AnalyzeSentenceAsync(inputText, options); } public async Task GenerateImageDescriptionAsync(Flashcard flashcard, GenerationOptionsDto options) { return await _imageDescriptionGenerator.GenerateImageDescriptionAsync(flashcard, options); } }