87 lines
2.9 KiB
C#
87 lines
2.9 KiB
C#
using RobotNet10.CustomConfiguration.Helpers;
|
|
using RobotNet10.CustomConfiguration.Models;
|
|
using System.IO;
|
|
using System.Text.Json;
|
|
|
|
namespace RobotNet10.CustomConfiguration.Services;
|
|
|
|
/// <summary>
|
|
/// Helper methods cho quản lý metadata (load từ config files)
|
|
/// </summary>
|
|
public partial class ConfigService
|
|
{
|
|
/// <summary>
|
|
/// Load tất cả config files và trả về metadata
|
|
/// </summary>
|
|
private async Task<List<ConfigFileMetadata>> LoadAllMetadataAsync()
|
|
{
|
|
var metadataList = new List<ConfigFileMetadata>();
|
|
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get metadata by ConfigType (load từ config file)
|
|
/// </summary>
|
|
private async Task<ConfigFileMetadata?> 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
|
|
};
|
|
}
|
|
}
|
|
|