diff --git a/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.CreateAgent.cs b/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.CreateAgent.cs index b942d7ea..93f6d30e 100644 --- a/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.CreateAgent.cs +++ b/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.CreateAgent.cs @@ -62,13 +62,6 @@ public partial class AgentService return agentRecord; } - private JsonSerializerOptions _options = new JsonSerializerOptions - { - PropertyNameCaseInsensitive = true, - PropertyNamingPolicy = JsonNamingPolicy.CamelCase, - WriteIndented = true - }; - private Agent FetchAgentInfoFromFile(string agentName, string filePath) { foreach (var dir in Directory.GetDirectories(filePath)) diff --git a/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.cs b/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.cs index 6e686bab..37d45601 100644 --- a/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.cs +++ b/src/Infrastructure/BotSharp.Core/Agents/Services/AgentService.cs @@ -10,6 +10,7 @@ public partial class AgentService : IAgentService private readonly ILogger _logger; private readonly IUserIdentity _user; private readonly AgentSettings _settings; + private readonly JsonSerializerOptions _options; public AgentService(IServiceProvider services, ILogger logger, @@ -20,6 +21,12 @@ public partial class AgentService : IAgentService _logger = logger; _user = user; _settings = settings; + _options = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + WriteIndented = true + }; } public string GetDataDir() diff --git a/src/Infrastructure/BotSharp.Core/Routing/Services/RoutingService.Create.cs b/src/Infrastructure/BotSharp.Core/Routing/Services/RoutingService.Create.cs new file mode 100644 index 00000000..21d0f7e5 --- /dev/null +++ b/src/Infrastructure/BotSharp.Core/Routing/Services/RoutingService.Create.cs @@ -0,0 +1,66 @@ +using BotSharp.Abstraction.Repositories; +using BotSharp.Abstraction.Routing.Models; +using System.IO; + +namespace BotSharp.Core.Routing.Services; + +public partial class RoutingService +{ + public async Task> CreateRoutingItems(List routingItems) + { + var db = _services.GetRequiredService(); + var items = FetchRoutingItemsFromFile(); + + if (items.IsNullOrEmpty()) + { + items = routingItems?.ToList() ?? new List(); + } + + var savedItems = db.CreateRoutingItems(items); + return await Task.FromResult(savedItems.ToList()); + } + + public async Task> CreateRoutingProfiles(List routingProfiles) + { + var db = _services.GetRequiredService(); + var profiles = FetchRoutingProfilesFromFile(); + + if (profiles.IsNullOrEmpty()) + { + profiles = routingProfiles?.ToList() ?? new List(); + } + + var savedProfiles = db.CreateRoutingProfiles(profiles); + return await Task.FromResult(savedProfiles.ToList()); + } + + private List FetchRoutingItemsFromFile() + { + var routingItems = new List(); + var dbSettings = _services.GetRequiredService(); + var agentSettings = _services.GetRequiredService(); + var filePath = Path.Combine(dbSettings.FileRepository, agentSettings.DataDir, "route.json"); + + if (File.Exists(filePath)) + { + routingItems = JsonSerializer.Deserialize>(File.ReadAllText(filePath), _options); + } + + return routingItems ?? new List(); + } + + private List FetchRoutingProfilesFromFile() + { + var routingProfiles = new List(); + var dbSettings = _services.GetRequiredService(); + var agentSettings = _services.GetRequiredService(); + var filePath = Path.Combine(dbSettings.FileRepository, agentSettings.DataDir, "routing-profile.json"); + + if (File.Exists(filePath)) + { + routingProfiles = JsonSerializer.Deserialize>(File.ReadAllText(filePath), _options); + } + + return routingProfiles ?? new List(); + } +} diff --git a/src/Infrastructure/BotSharp.Core/Routing/Services/RoutingService.Delete.cs b/src/Infrastructure/BotSharp.Core/Routing/Services/RoutingService.Delete.cs new file mode 100644 index 00000000..b61c3e91 --- /dev/null +++ b/src/Infrastructure/BotSharp.Core/Routing/Services/RoutingService.Delete.cs @@ -0,0 +1,20 @@ +using BotSharp.Abstraction.Repositories; + +namespace BotSharp.Core.Routing.Services; + +public partial class RoutingService +{ + public async Task DeleteRoutingItems() + { + var db = _services.GetRequiredService(); + db.DeleteRoutingItems(); + await Task.CompletedTask; + } + + public async Task DeleteRoutingProfiles() + { + var db = _services.GetRequiredService(); + db.DeleteRoutingProfiles(); + await Task.CompletedTask; + } +} diff --git a/src/Infrastructure/BotSharp.Core/Routing/Services/RoutingService.cs b/src/Infrastructure/BotSharp.Core/Routing/Services/RoutingService.cs index 70a74a87..dc34cc17 100644 --- a/src/Infrastructure/BotSharp.Core/Routing/Services/RoutingService.cs +++ b/src/Infrastructure/BotSharp.Core/Routing/Services/RoutingService.cs @@ -1,45 +1,23 @@ using BotSharp.Abstraction.Repositories; -using BotSharp.Abstraction.Repositories.Records; using BotSharp.Abstraction.Routing; using BotSharp.Abstraction.Routing.Models; +using System.IO; namespace BotSharp.Core.Routing.Services; -public class RoutingService : IRoutingService +public partial class RoutingService : IRoutingService { private readonly IServiceProvider _services; + private readonly JsonSerializerOptions _options; public RoutingService(IServiceProvider service) { _services = service; - } - public async Task> CreateRoutingItems(List routingItems) - { - var db = _services.GetRequiredService(); - var items = routingItems?.ToList() ?? new List(); - var savedItems = db.CreateRoutingItems(items); - return await Task.FromResult(savedItems.ToList()); - } - - public async Task> CreateRoutingProfiles(List routingProfiles) - { - var db = _services.GetRequiredService(); - var profiles = routingProfiles?.ToList() ?? new List(); - var savedProfiles = db.CreateRoutingProfiles(profiles); - return await Task.FromResult(savedProfiles.ToList()); - } - - public async Task DeleteRoutingItems() - { - var db = _services.GetRequiredService(); - db.DeleteRoutingItems(); - await Task.CompletedTask; - } - - public async Task DeleteRoutingProfiles() - { - var db = _services.GetRequiredService(); - db.DeleteRoutingProfiles(); - await Task.CompletedTask; + _options = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + WriteIndented = true + }; } }