Families.Web 1.0.0.0
사진, 동영상, 글, 댓글과 반응을 가족끼리만 공유하는 비공개 앨범·타임라인 서비스입니다.
로딩중...
검색중...
일치하는것 없음
FamiliesApp.Services.JsonFamilyTenantStore 클래스 참조sealed

더 자세히 ...

FamiliesApp.Services.JsonFamilyTenantStore에 대한 상속 다이어그램 :
FamiliesApp.Services.JsonFamilyTenantStore에 대한 협력 다이어그램:

Public 멤버 함수

 JsonFamilyTenantStore (FamilyOptions opts)
string GetTenantDataPath (string slug)
async Task< FamilyConfig?> GetAsync (string slug, CancellationToken ct=default)
async Task< IReadOnlyList< FamilyConfig > > GetAllAsync (CancellationToken ct=default)
async Task SaveAsync (FamilyConfig config, CancellationToken ct=default)
Task< bool > ExistsAsync (string slug, CancellationToken ct=default)
Task DeleteAsync (string slug, CancellationToken ct=default)

Private 멤버 함수

string ConfigPath (string slug)

정적 Private 멤버 함수

static string Sanitize (string slug)

Private 속성

readonly string _dataRoot

정적 Private 속성

static readonly SemaphoreSlim _gate = new(1, 1)
static readonly JsonSerializerOptions _jsonOpts

상세한 설명

Json Family Tenant Store 기능과 관련 상태를 캡슐화합니다.

JsonFamilyTenantStore.cs 파일의 16 번째 라인에서 정의되었습니다.

생성자 & 소멸자 문서화

◆ JsonFamilyTenantStore()

FamiliesApp.Services.JsonFamilyTenantStore.JsonFamilyTenantStore ( FamilyOptions opts)
inline

지정한 설정으로 JsonFamilyTenantStore 클래스의 새 인스턴스를 초기화합니다.

매개변수
optsopts에 사용할 FamilyOptions 값입니다.

JsonFamilyTenantStore.cs 파일의 68 번째 라인에서 정의되었습니다.

69 {
70 _dataRoot = opts.ResolvedDataPath;
71 Directory.CreateDirectory(_dataRoot);
72 }

다음을 참조함 : _dataRoot, FamiliesApp.Services.FamilyOptions.ResolvedDataPath.

멤버 함수 문서화

◆ ConfigPath()

string FamiliesApp.Services.JsonFamilyTenantStore.ConfigPath ( string slug)
inlineprivate

Config Path 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
반환값
Config Path 작업에서 생성한 string 결과입니다.

JsonFamilyTenantStore.cs 파일의 346 번째 라인에서 정의되었습니다.

346 =>
347 Path.Combine(GetTenantDataPath(slug), "config.json");

다음에 의해서 참조됨 : ExistsAsync(), GetAsync(), SaveAsync().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ DeleteAsync()

Task FamiliesApp.Services.JsonFamilyTenantStore.DeleteAsync ( string slug,
CancellationToken ct = default )
inline

Delete Async 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
ct취소 요청을 감시하는 토큰입니다.
반환값
Delete Async 작업에서 생성한 Task 결과입니다.

FamiliesApp.Services.IFamilyTenantStore를 구현.

JsonFamilyTenantStore.cs 파일의 314 번째 라인에서 정의되었습니다.

315 {
316 var dir = GetTenantDataPath(slug);
317 if (Directory.Exists(dir))
318 Directory.Delete(dir, recursive: true);
319 return Task.CompletedTask;
320 }

다음을 참조함 : GetTenantDataPath().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ ExistsAsync()

Task< bool > FamiliesApp.Services.JsonFamilyTenantStore.ExistsAsync ( string slug,
CancellationToken ct = default )
inline

Exists Async 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
ct취소 요청을 감시하는 토큰입니다.
반환값
Exists Async 작업에서 생성한 Task<bool> 결과입니다.

FamiliesApp.Services.IFamilyTenantStore를 구현.

JsonFamilyTenantStore.cs 파일의 279 번째 라인에서 정의되었습니다.

279 =>
280 Task.FromResult(File.Exists(ConfigPath(slug)));

다음을 참조함 : ConfigPath().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ GetAllAsync()

async Task< IReadOnlyList< FamilyConfig > > FamiliesApp.Services.JsonFamilyTenantStore.GetAllAsync ( CancellationToken ct = default)
inline

All Async 값을 가져옵니다.

매개변수
ct취소 요청을 감시하는 토큰입니다.
반환값
Get All Async 작업에서 생성한 Task<IReadOnlyList<FamilyConfig>> 결과입니다.

FamiliesApp.Services.IFamilyTenantStore를 구현.

JsonFamilyTenantStore.cs 파일의 171 번째 라인에서 정의되었습니다.

172 {
173 var list = new List<FamilyConfig>();
174 if (!Directory.Exists(_dataRoot)) return list;
175
176 foreach (var dir in Directory.GetDirectories(_dataRoot))
177 {
178 var cfg = Path.Combine(dir, "config.json");
179 if (!File.Exists(cfg)) continue;
180
181 await _gate.WaitAsync(ct).ConfigureAwait(false);
182 try
183 {
184 await using var fs = File.OpenRead(cfg);
185 var t = await JsonSerializer.DeserializeAsync<FamilyConfig>(fs, _jsonOpts, ct).ConfigureAwait(false);
186 if (t != null) list.Add(t);
187 }
188 finally { _gate.Release(); }
189 }
190 return list;
191 }

다음을 참조함 : _dataRoot, _gate, _jsonOpts.

◆ GetAsync()

async Task< FamilyConfig?> FamiliesApp.Services.JsonFamilyTenantStore.GetAsync ( string slug,
CancellationToken ct = default )
inline

Async 값을 가져옵니다.

매개변수
slugslug에 사용할 string 값입니다.
ct취소 요청을 감시하는 토큰입니다.
반환값
Get Async 작업에서 생성한 Task<FamilyConfig?> 결과입니다.

FamiliesApp.Services.IFamilyTenantStore를 구현.

JsonFamilyTenantStore.cs 파일의 133 번째 라인에서 정의되었습니다.

134 {
135 var path = ConfigPath(slug);
136 if (!File.Exists(path)) return null;
137
138 await _gate.WaitAsync(ct).ConfigureAwait(false);
139 try
140 {
141 await using var fs = File.OpenRead(path);
142 return await JsonSerializer.DeserializeAsync<FamilyConfig>(fs, _jsonOpts, ct).ConfigureAwait(false);
143 }
144 finally { _gate.Release(); }
145 }

다음을 참조함 : _gate, _jsonOpts, ConfigPath().

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ GetTenantDataPath()

string FamiliesApp.Services.JsonFamilyTenantStore.GetTenantDataPath ( string slug)
inline

Tenant Data Path 값을 가져옵니다.

매개변수
slugslug에 사용할 string 값입니다.
반환값
Get Tenant Data Path 작업에서 생성한 string 결과입니다.

FamiliesApp.Services.IFamilyTenantStore를 구현.

JsonFamilyTenantStore.cs 파일의 98 번째 라인에서 정의되었습니다.

98 =>
99 Path.Combine(_dataRoot, Sanitize(slug));

다음을 참조함 : _dataRoot.

다음에 의해서 참조됨 : DeleteAsync(), SaveAsync().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ Sanitize()

string FamiliesApp.Services.JsonFamilyTenantStore.Sanitize ( string slug)
inlinestaticprivate

Sanitize 작업을 수행합니다.

매개변수
slugslug에 사용할 string 값입니다.
반환값
Sanitize 작업에서 생성한 string 결과입니다.

JsonFamilyTenantStore.cs 파일의 373 번째 라인에서 정의되었습니다.

373 =>
374 string.Concat(slug.ToLowerInvariant().Split(Path.GetInvalidFileNameChars()));

◆ SaveAsync()

async Task FamiliesApp.Services.JsonFamilyTenantStore.SaveAsync ( FamilyConfig config,
CancellationToken ct = default )
inline

Async 데이터를 저장합니다.

매개변수
configconfig에 사용할 FamilyConfig 값입니다.
ct취소 요청을 감시하는 토큰입니다.
반환값
Save Async 작업에서 생성한 Task 결과입니다.

FamiliesApp.Services.IFamilyTenantStore를 구현.

JsonFamilyTenantStore.cs 파일의 225 번째 라인에서 정의되었습니다.

226 {
227 var dir = GetTenantDataPath(config.Slug);
228 Directory.CreateDirectory(dir);
229 Directory.CreateDirectory(Path.Combine(dir, "posts"));
230 Directory.CreateDirectory(Path.Combine(dir, "albums"));
231 Directory.CreateDirectory(Path.Combine(dir, "reactions"));
232 Directory.CreateDirectory(Path.Combine(dir, "media"));
233
234 var tmp = ConfigPath(config.Slug) + ".tmp";
235 await _gate.WaitAsync(ct).ConfigureAwait(false);
236 try
237 {
238 await using (var fs = File.Create(tmp))
239 await JsonSerializer.SerializeAsync(fs, config, _jsonOpts, ct).ConfigureAwait(false);
240
241 File.Copy(tmp, ConfigPath(config.Slug), overwrite: true);
242 File.Delete(tmp);
243 }
244 finally { _gate.Release(); }
245 }

다음을 참조함 : _gate, _jsonOpts, ConfigPath(), GetTenantDataPath(), FamiliesApp.Models.FamilyConfig.Slug.

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ _dataRoot

readonly string FamiliesApp.Services.JsonFamilyTenantStore._dataRoot
private

data Root 값을 보관합니다.

JsonFamilyTenantStore.cs 파일의 26 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : GetAllAsync(), GetTenantDataPath(), JsonFamilyTenantStore().

◆ _gate

readonly SemaphoreSlim FamiliesApp.Services.JsonFamilyTenantStore._gate = new(1, 1)
staticprivate

gate 값을 보관합니다.

JsonFamilyTenantStore.cs 파일의 35 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : GetAllAsync(), GetAsync(), SaveAsync().

◆ _jsonOpts

readonly JsonSerializerOptions FamiliesApp.Services.JsonFamilyTenantStore._jsonOpts
staticprivate
초기값:
= new()
{
WriteIndented = true,
PropertyNameCaseInsensitive = true,
Converters = { new JsonStringEnumConverter() }
}

json Opts 값을 보관합니다.

JsonFamilyTenantStore.cs 파일의 45 번째 라인에서 정의되었습니다.

46 {
47 WriteIndented = true,
48 PropertyNameCaseInsensitive = true,
49 Converters = { new JsonStringEnumConverter() }
50 };

다음에 의해서 참조됨 : GetAllAsync(), GetAsync(), SaveAsync().


이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: