var useCase = new GenerateSqlQueryUseCase(chatClient);// Simple query generationvar result = await useCase.ExecuteAsync( description: "Get all active users created in the last 30 days");if (result.IsSuccess){ Console.WriteLine(result.Data); // Output: // SELECT * FROM Users // WHERE IsActive = 1 // AND CreatedDate >= DATEADD(day, -30, GETDATE())}// With schema contextvar schema = @"Tables:- Users (Id, Username, Email, IsActive, CreatedDate)- Orders (Id, UserId, OrderDate, TotalAmount)";var result2 = await useCase.ExecuteAsync( description: "Get users with their total order amount", schema: schema);if (result2.IsSuccess){ Console.WriteLine(result2.Data); // Output: // SELECT u.Id, u.Username, u.Email, // SUM(o.TotalAmount) as TotalOrders // FROM Users u // LEFT JOIN Orders o ON u.Id = o.UserId // GROUP BY u.Id, u.Username, u.Email}// Stored procedure call with parametersvar netParams = @"int userIdDateTime startDateDateTime endDate";var result3 = await useCase.ExecuteAsync( description: "Call stored procedure to get user orders in date range", schema: schema, netParams: netParams);
var useCase = new SendChatMessageUseCase(chatClient);// Simple questionvar result = await useCase.ExecuteAsync( userMessage: "What is the SOLID principle?");if (result.IsSuccess){ Console.WriteLine(result.Data);}// Question with code contextvar code = @"public class UserService{ private readonly DbContext _db; public User GetUser(int id) { return _db.Users.Find(id); }}";var result2 = await useCase.ExecuteAsync( userMessage: "How can I improve this code?", context: $"Here's my current code:\n{code}");if (result2.IsSuccess){ Console.WriteLine(result2.Data); // AI will provide suggestions based on the code context}// Architecture question with project contextvar projectContext = @"Project: E-commerce APIArchitecture: Clean ArchitectureLayers: Domain, Application, Infrastructure, APIDatabase: PostgreSQL";var result3 = await useCase.ExecuteAsync( userMessage: "Should I put validation in the Domain or Application layer?", context: projectContext);
The AI client is configured during dependency injection:
// Example configuration in DI containerservices.AddSingleton<IChatClient>(provider =>{ var settings = provider.GetRequiredService<UserSettings>(); return settings.AiProvider switch { "OpenAI" => new OpenAiChatClient(settings.OpenAiApiKey), "Claude" => new ClaudeChatClient(settings.ClaudeApiKey), "Gemini" => new GeminiChatClient(settings.GeminiApiKey), _ => throw new InvalidOperationException("No AI provider configured") };});