Portfolio.Web 1.0.0.0
.NET, Blazor, WPF와 서비스 운영 경험을 프로젝트·이력·기술 스택 단위로 보여주는 개발자 포트폴리오입니다.
로딩중...
검색중...
일치하는것 없음
JsonProjectStore.cs
이 파일의 문서화 페이지로 가기
1using System.IO;
2using System.Text.Json;
3using System.Text.Json.Serialization;
5
7
17{
26 private readonly string _root;
35 private static readonly JsonSerializerOptions _json = new()
36 {
37 WriteIndented = true,
38 Converters = { new JsonStringEnumConverter() }
39 };
40
58
83 private string Dir(string slug) => Path.Combine(_root, slug, "projects");
116 private string Path_(string slug, string id) => Path.Combine(Dir(slug), $"{id}.json");
117
142 public async Task<List<ProjectItem>> GetAllAsync(string slug)
143 {
144 var dir = Dir(slug);
145 if (!Directory.Exists(dir)) return [];
146 var list = new List<ProjectItem>();
147 foreach (var f in Directory.GetFiles(dir, "*.json"))
148 {
149 try
150 {
151 var json = await File.ReadAllTextAsync(f);
152 var item = JsonSerializer.Deserialize<ProjectItem>(json, _json);
153 if (item != null) list.Add(item);
154 }
155 catch { }
156 }
157 return [.. list.OrderBy(p => p.SortOrder == 0 ? int.MaxValue : p.SortOrder)
158 .ThenByDescending(p => p.Year)];
159 }
160
193 public async Task<ProjectItem?> GetAsync(string slug, string projectId)
194 {
195 var path = Path_(slug, projectId);
196 if (!File.Exists(path)) return null;
197 var json = await File.ReadAllTextAsync(path);
198 return JsonSerializer.Deserialize<ProjectItem>(json, _json);
199 }
200
233 public async Task SaveAsync(string slug, ProjectItem item)
234 {
235 Directory.CreateDirectory(Dir(slug));
236 var json = JsonSerializer.Serialize(item, _json);
237 await File.WriteAllTextAsync(Path_(slug, item.Id), json);
238 }
239
272 public Task DeleteAsync(string slug, string projectId)
273 {
274 var path = Path_(slug, projectId);
275 if (File.Exists(path)) File.Delete(path);
276 var mediaDir = System.IO.Path.Combine(_root, slug, "media", projectId);
277 if (Directory.Exists(mediaDir)) Directory.Delete(mediaDir, true);
278 return Task.CompletedTask;
279 }
280}
string Path_(string slug, string id)
async Task< ProjectItem?> GetAsync(string slug, string projectId)
Task DeleteAsync(string slug, string projectId)
static readonly JsonSerializerOptions _json
async Task SaveAsync(string slug, ProjectItem item)
async Task< List< ProjectItem > > GetAllAsync(string slug)