namespace Journal.Core.Repositories; public sealed class DiskEntryFileRepository : IEntryFileRepository { public IReadOnlyList ListMarkdownFiles(string dataDirectory) { if (!Directory.Exists(dataDirectory)) return []; return [.. Directory.GetFiles(dataDirectory, "*.md").OrderBy(Path.GetFileName, StringComparer.Ordinal)]; } public string ReadFile(string filePath) => File.ReadAllText(filePath); public void WriteFile(string filePath, string content) => File.WriteAllText(filePath, content); public void AppendFile(string filePath, string content) => File.AppendAllText(filePath, content); public bool FileExists(string filePath) => File.Exists(filePath); public string GetFullPath(string filePath) => Path.GetFullPath(filePath); public string GetFileName(string filePath) => Path.GetFileName(filePath); public string GetFileNameWithoutExtension(string filePath) => Path.GetFileNameWithoutExtension(filePath); public void EnsureDirectory(string path) { var dir = Path.GetDirectoryName(path); if (!string.IsNullOrWhiteSpace(dir)) Directory.CreateDirectory(dir); } public void DeleteFile(string filePath) => File.Delete(filePath); }