WeddingPlatform.Web 1.0.0.0
지도, 갤러리, 방명록, 계좌 안내와 배경음악을 링크 하나에 담는 무료 모바일 청첩장 서비스입니다.
로딩중...
검색중...
일치하는것 없음
WeddingPlatform.Services.JsonTenantStore 클래스 참조sealed

더 자세히 ...

WeddingPlatform.Services.JsonTenantStore에 대한 상속 다이어그램 :
WeddingPlatform.Services.JsonTenantStore에 대한 협력 다이어그램:

Public 멤버 함수

 JsonTenantStore (WeddingOptions opts)
string GetTenantDataPath (string slug)
async Task< TenantConfig?> GetAsync (string slug, CancellationToken ct=default)
async Task< IReadOnlyList< TenantConfig > > GetAllAsync (CancellationToken ct=default)
async Task SaveAsync (TenantConfig 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)
static async Task< TenantConfig?> ReadTenantAsync (string path, CancellationToken ct)
static void LogLegacyLayoutModeFallback (string path, string json)
static ? string TryGetDesignLayoutMode (string json)
static bool TryGetProperty (JsonElement element, string name, out JsonElement value)
static bool IsCanonicalLayoutMode (string? value)
static void LogTenantReadError (string path, JsonException ex)

Private 속성

readonly string _dataRoot

정적 Private 속성

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

상세한 설명

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

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

생성자 & 소멸자 문서화

◆ JsonTenantStore()

WeddingPlatform.Services.JsonTenantStore.JsonTenantStore ( WeddingOptions opts)
inline

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

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

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

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

다음을 참조함 : _dataRoot, WeddingPlatform.Services.WeddingOptions.ResolvedDataPath.

멤버 함수 문서화

◆ ConfigPath()

string WeddingPlatform.Services.JsonTenantStore.ConfigPath ( string slug)
inlineprivate

Config Path 작업을 수행합니다.

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

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

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

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

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

◆ DeleteAsync()

Task WeddingPlatform.Services.JsonTenantStore.DeleteAsync ( string slug,
CancellationToken ct = default )
inline

Delete Async 작업을 수행합니다.

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

WeddingPlatform.Services.ITenantStore를 구현.

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

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

다음을 참조함 : GetTenantDataPath().

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

◆ ExistsAsync()

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

Exists Async 작업을 수행합니다.

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

WeddingPlatform.Services.ITenantStore를 구현.

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

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

다음을 참조함 : ConfigPath().

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

◆ GetAllAsync()

async Task< IReadOnlyList< TenantConfig > > WeddingPlatform.Services.JsonTenantStore.GetAllAsync ( CancellationToken ct = default)
inline

All Async 값을 가져옵니다.

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

WeddingPlatform.Services.ITenantStore를 구현.

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

172 {
173 var list = new List<TenantConfig>();
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 var t = await ReadTenantAsync(cfg, ct).ConfigureAwait(false);
185 if (t != null) list.Add(t);
186 }
187 catch (JsonException ex)
188 {
189 LogTenantReadError(cfg, ex);
190 }
191 finally { _gate.Release(); }
192 }
193 return list;
194 }

다음을 참조함 : _dataRoot, _gate, LogTenantReadError(), ReadTenantAsync().

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

◆ GetAsync()

async Task< TenantConfig?> WeddingPlatform.Services.JsonTenantStore.GetAsync ( string slug,
CancellationToken ct = default )
inline

Async 값을 가져옵니다.

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

WeddingPlatform.Services.ITenantStore를 구현.

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

135 {
136 var path = ConfigPath(slug);
137 if (!File.Exists(path)) return null;
138
139 await _gate.WaitAsync(ct).ConfigureAwait(false);
140 try
141 {
142 return await ReadTenantAsync(path, ct).ConfigureAwait(false);
143 }
144 finally { _gate.Release(); }
145 }

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

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

◆ GetTenantDataPath()

string WeddingPlatform.Services.JsonTenantStore.GetTenantDataPath ( string slug)
inline

Tenant Data Path 값을 가져옵니다.

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

WeddingPlatform.Services.ITenantStore를 구현.

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

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

다음을 참조함 : _dataRoot.

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

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

◆ IsCanonicalLayoutMode()

bool WeddingPlatform.Services.JsonTenantStore.IsCanonicalLayoutMode ( string? value)
inlinestaticprivate

Is Canonical Layout Mode 조건을 확인합니다.

매개변수
value적용할 값입니다.
반환값
Is Canonical Layout Mode 조건이 충족되면 true이고, 그렇지 않으면 false입니다.

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

573 =>
574 value is not null
575 && (string.Equals(value, "WebPage", StringComparison.Ordinal)
576 || string.Equals(value, "TabMenu", StringComparison.Ordinal)
577 || string.Equals(value, "Gallery", StringComparison.Ordinal)
578 || string.Equals(value, "Story", StringComparison.Ordinal)
579 || string.Equals(value, "Card", StringComparison.Ordinal)
580 || string.Equals(value, "PhotoBook", StringComparison.Ordinal));

다음에 의해서 참조됨 : LogLegacyLayoutModeFallback().

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

◆ LogLegacyLayoutModeFallback()

void WeddingPlatform.Services.JsonTenantStore.LogLegacyLayoutModeFallback ( string path,
string json )
inlinestaticprivate

Log Legacy Layout Mode Fallback 작업을 수행합니다.

매개변수
pathpath에 사용할 string 값입니다.
jsonjson에 사용할 string 값입니다.

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

441 {
442 var raw = TryGetDesignLayoutMode(json);
443 if (raw is null || IsCanonicalLayoutMode(raw)) return;
444
445 Console.Error.WriteLine($"[JsonTenantStore] Legacy DesignSettings.LayoutMode '{raw}' in '{path}' was loaded with compatibility fallback.");
446 }

다음을 참조함 : IsCanonicalLayoutMode(), TryGetDesignLayoutMode().

다음에 의해서 참조됨 : ReadTenantAsync().

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

◆ LogTenantReadError()

void WeddingPlatform.Services.JsonTenantStore.LogTenantReadError ( string path,
JsonException ex )
inlinestaticprivate

Log Tenant Read Error 작업을 수행합니다.

매개변수
pathpath에 사용할 string 값입니다.
exex에 사용할 JsonException 값입니다.

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

607 {
608 Console.Error.WriteLine($"[JsonTenantStore] Skipped invalid tenant JSON '{path}': {ex.Message}");
609 }

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

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

◆ ReadTenantAsync()

async Task< TenantConfig?> WeddingPlatform.Services.JsonTenantStore.ReadTenantAsync ( string path,
CancellationToken ct )
inlinestaticprivate

Tenant Async 데이터를 읽습니다.

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

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

410 {
411 var json = await File.ReadAllTextAsync(path, ct).ConfigureAwait(false);
412 LogLegacyLayoutModeFallback(path, json);
413 return JsonSerializer.Deserialize<TenantConfig>(json, _jsonOpts);
414 }

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

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

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

◆ Sanitize()

string WeddingPlatform.Services.JsonTenantStore.Sanitize ( string slug)
inlinestaticprivate

Sanitize 작업을 수행합니다.

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

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

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

◆ SaveAsync()

async Task WeddingPlatform.Services.JsonTenantStore.SaveAsync ( TenantConfig config,
CancellationToken ct = default )
inline

Async 데이터를 저장합니다.

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

WeddingPlatform.Services.ITenantStore를 구현.

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

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

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

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

◆ TryGetDesignLayoutMode()

? string WeddingPlatform.Services.JsonTenantStore.TryGetDesignLayoutMode ( string json)
inlinestaticprivate

Get Design Layout Mode 작업을 시도하고 성공 여부를 반환합니다.

매개변수
jsonjson에 사용할 string 값입니다.
반환값
Try Get Design Layout Mode 작업에서 생성한 string? 결과입니다.

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

473 {
474 try
475 {
476 using var doc = JsonDocument.Parse(json);
477 if (!TryGetProperty(doc.RootElement, "DesignSettings", out var design)) return null;
478 if (!TryGetProperty(design, "LayoutMode", out var layout)) return null;
479
480 return layout.ValueKind switch
481 {
482 JsonValueKind.String => layout.GetString(),
483 JsonValueKind.Null => "",
484 JsonValueKind.Number => layout.GetRawText(),
485 _ => layout.GetRawText(),
486 };
487 }
488 catch (JsonException)
489 {
490 return null;
491 }
492 }

다음을 참조함 : TryGetProperty().

다음에 의해서 참조됨 : LogLegacyLayoutModeFallback().

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

◆ TryGetProperty()

bool WeddingPlatform.Services.JsonTenantStore.TryGetProperty ( JsonElement element,
string name,
out JsonElement value )
inlinestaticprivate

Get Property 작업을 시도하고 성공 여부를 반환합니다.

매개변수
elementelement에 사용할 JsonElement 값입니다.
namename에 사용할 string 값입니다.
value적용할 값입니다.
반환값
Try Get Property 조건이 충족되면 true이고, 그렇지 않으면 false입니다.

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

535 {
536 foreach (var property in element.EnumerateObject())
537 {
538 if (string.Equals(property.Name, name, StringComparison.OrdinalIgnoreCase))
539 {
540 value = property.Value;
541 return true;
542 }
543 }
544
545 value = default;
546 return false;
547 }

다음에 의해서 참조됨 : TryGetDesignLayoutMode().

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

멤버 데이터 문서화

◆ _dataRoot

readonly string WeddingPlatform.Services.JsonTenantStore._dataRoot
private

data Root 값을 보관합니다.

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

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

◆ _gate

readonly SemaphoreSlim WeddingPlatform.Services.JsonTenantStore._gate = new(1, 1)
staticprivate

gate 값을 보관합니다.

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

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

◆ _jsonOpts

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

json Opts 값을 보관합니다.

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

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

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


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