Portfolio.Web
1.0.0.0
.NET, Blazor, WPF와 서비스 운영 경험을 프로젝트·이력·기술 스택 단위로 보여주는 개발자 포트폴리오입니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
JsonProjectStore.cs
이 파일의 문서화 페이지로 가기
1
using
System.IO;
2
using
System.Text.Json;
3
using
System.Text.Json.Serialization;
4
using
PortfolioApp.Models
;
5
6
namespace
PortfolioApp.Services
;
7
16
public
class
JsonProjectStore
:
IProjectStore
17
{
26
private
readonly
string
_root
;
35
private
static
readonly JsonSerializerOptions
_json
=
new
()
36
{
37
WriteIndented =
true
,
38
Converters = {
new
JsonStringEnumConverter() }
39
};
40
57
public
JsonProjectStore
(
PortfolioOptions
opts) =>
_root
= opts.
ResolvedDataPath
;
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
}
PortfolioApp.Models
Definition
ContactMessage.cs:1
PortfolioApp.Services
Definition
GhostAccountCleanupService.cs:4
PortfolioApp.Models.ProjectItem
Definition
ProjectItem.cs:53
PortfolioApp.Models.ProjectItem.Id
string Id
Definition
ProjectItem.cs:62
PortfolioApp.Services.IProjectStore
Definition
IProjectStore.cs:14
PortfolioApp.Services.JsonProjectStore.Path_
string Path_(string slug, string id)
Definition
JsonProjectStore.cs:116
PortfolioApp.Services.JsonProjectStore.GetAsync
async Task< ProjectItem?> GetAsync(string slug, string projectId)
Definition
JsonProjectStore.cs:193
PortfolioApp.Services.JsonProjectStore.JsonProjectStore
JsonProjectStore(PortfolioOptions opts)
Definition
JsonProjectStore.cs:57
PortfolioApp.Services.JsonProjectStore.DeleteAsync
Task DeleteAsync(string slug, string projectId)
Definition
JsonProjectStore.cs:272
PortfolioApp.Services.JsonProjectStore._json
static readonly JsonSerializerOptions _json
Definition
JsonProjectStore.cs:35
PortfolioApp.Services.JsonProjectStore.SaveAsync
async Task SaveAsync(string slug, ProjectItem item)
Definition
JsonProjectStore.cs:233
PortfolioApp.Services.JsonProjectStore.GetAllAsync
async Task< List< ProjectItem > > GetAllAsync(string slug)
Definition
JsonProjectStore.cs:142
PortfolioApp.Services.JsonProjectStore._root
readonly string _root
Definition
JsonProjectStore.cs:26
PortfolioApp.Services.JsonProjectStore.Dir
string Dir(string slug)
Definition
JsonProjectStore.cs:83
PortfolioApp.Services.PortfolioOptions
Definition
PortfolioOptions.cs:15
PortfolioApp.Services.PortfolioOptions.ResolvedDataPath
string ResolvedDataPath
Definition
PortfolioOptions.cs:43
Services
JsonProjectStore.cs
다음에 의해 생성됨 :
1.17.0