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
};
}
}