using RobotNet10.CustomConfiguration.Helpers; using RobotNet10.CustomConfiguration.Models; using System.IO; using System.Text.Json; namespace RobotNet10.CustomConfiguration.Services; /// /// Helper methods cho quản lý metadata (load từ config files) /// public partial class ConfigService { /// /// Load tất cả config files và trả về metadata /// private async Task> LoadAllMetadataAsync() { var metadataList = new List(); try { // List all files in configs directory var files = await _storageManager.ListAsync(ConfigPath, recursive: false, CancellationToken.None); // Filter only .config.json files var configFiles = files.Where(f => f.EndsWith(ConfigFileExtension, StringComparison.OrdinalIgnoreCase)).ToList(); foreach (var fileName in configFiles) { try { // Extract configType from filename: {configType}.config.json var configType = fileName.Replace(ConfigFileExtension, "", StringComparison.OrdinalIgnoreCase); // Load config file to get metadata var config = await LoadConfigFileAsync(configType); if (config != null) { metadataList.Add(new ConfigFileMetadata { Id = config.Id, ConfigType = config.ConfigType, CreatedAt = config.CreatedAt, UpdatedAt = config.UpdatedAt, Description = config.Description }); } } catch (JsonException) { // Skip corrupted config files continue; } } } catch (Exception ex) when (ex is IOException or UnauthorizedAccessException) { // Storage unavailable - return what we have so far return metadataList; } return metadataList; } /// /// Get metadata by ConfigType (load từ config file) /// private async Task GetMetadataByTypeAsync(string configType) { var config = await LoadConfigFileAsync(configType); if (config == null) { return null; } return new ConfigFileMetadata { Id = config.Id, ConfigType = config.ConfigType, CreatedAt = config.CreatedAt, UpdatedAt = config.UpdatedAt, Description = config.Description }; } }