Portfolio.Web 1.0.0.0
.NET, Blazor, WPF와 서비스 운영 경험을 프로젝트·이력·기술 스택 단위로 보여주는 개발자 포트폴리오입니다.
로딩중...
검색중...
일치하는것 없음
JsonPortfolioTenantStore.cs
이 파일의 문서화 페이지로 가기
1using System.IO;
2using System.Text.Json;
4
6
16{
25 private readonly string _root;
34 private static readonly JsonSerializerOptions _json = new() { WriteIndented = true };
35
53 {
55 Directory.CreateDirectory(_root);
56 }
57
82 private string ConfigPath(string slug) => Path.Combine(_root, slug, "config.json");
83
100 public async Task<List<PortfolioConfig>> GetAllAsync()
101 {
102 var list = new List<PortfolioConfig>();
103 if (!Directory.Exists(_root)) return list;
104 foreach (var dir in Directory.GetDirectories(_root))
105 {
106 var cfg = Path.Combine(dir, "config.json");
107 if (!File.Exists(cfg)) continue;
108 try
109 {
110 var json = await File.ReadAllTextAsync(cfg);
111 var obj = JsonSerializer.Deserialize<PortfolioConfig>(json);
112 if (obj != null) list.Add(obj);
113 }
114 catch { }
115 }
116 return list;
117 }
118
143 public async Task<PortfolioConfig?> GetAsync(string slug)
144 {
145 var path = ConfigPath(slug);
146 if (!File.Exists(path)) return null;
147 var json = await File.ReadAllTextAsync(path);
148 return JsonSerializer.Deserialize<PortfolioConfig>(json);
149 }
150
175 public async Task SaveAsync(PortfolioConfig config)
176 {
177 var dir = Path.Combine(_root, config.Slug);
178 Directory.CreateDirectory(Path.Combine(dir, "projects"));
179 Directory.CreateDirectory(Path.Combine(dir, "media"));
180 Directory.CreateDirectory(Path.Combine(dir, "contacts"));
181 var json = JsonSerializer.Serialize(config, _json);
182 await File.WriteAllTextAsync(ConfigPath(config.Slug), json);
183 }
184
209 public Task DeleteAsync(string slug)
210 {
211 var dir = Path.Combine(_root, slug);
212 if (Directory.Exists(dir))
213 Directory.Delete(dir, recursive: true);
214 return Task.CompletedTask;
215 }
216}
async Task< PortfolioConfig?> GetAsync(string slug)
async Task< List< PortfolioConfig > > GetAllAsync()