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

더 자세히 ...

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

Public 멤버 함수

 CsvGuestbookStorage (ITenantStore tenants)
async Task< IReadOnlyList< GuestbookEntry > > LoadAsync (string slug, CancellationToken ct=default)
async Task SaveAsync (string slug, IReadOnlyList< GuestbookEntry > entries, CancellationToken ct=default)

Private 멤버 함수

string CsvPath (string slug)

정적 Private 멤버 함수

static string Esc (string v)
static List< string > ParseCsvLine (string line)

Private 속성

readonly ITenantStore _tenants

정적 Private 속성

static readonly SemaphoreSlim _gate = new(1, 1)

상세한 설명

Csv Guestbook Storage 기능과 관련 상태를 캡슐화합니다.

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

생성자 & 소멸자 문서화

◆ CsvGuestbookStorage()

WeddingPlatform.Services.CsvGuestbookStorage.CsvGuestbookStorage ( ITenantStore tenants)
inline

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

매개변수
tenantstenants에 사용할 ITenantStore 값입니다.

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

53=> _tenants = tenants;

다음을 참조함 : _tenants.

멤버 함수 문서화

◆ CsvPath()

string WeddingPlatform.Services.CsvGuestbookStorage.CsvPath ( string slug)
inlineprivate

Csv Path 작업을 수행합니다.

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

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

208 =>
209 Path.Combine(_tenants.GetTenantDataPath(slug), "guestbook.csv");

다음을 참조함 : _tenants.

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

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

◆ Esc()

string WeddingPlatform.Services.CsvGuestbookStorage.Esc ( string v)
inlinestaticprivate

Esc 작업을 수행합니다.

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

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

236 {
237 if (v.Contains(',') || v.Contains('"') || v.Contains('\n'))
238 return $"\"{v.Replace("\"", "\"\"")}\"";
239 return v;
240 }

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

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

◆ LoadAsync()

async Task< IReadOnlyList< GuestbookEntry > > WeddingPlatform.Services.CsvGuestbookStorage.LoadAsync ( string slug,
CancellationToken ct = default )
inline

Async 데이터를 불러옵니다.

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

WeddingPlatform.Services.IGuestbookStorage를 구현.

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

88 {
89 var path = CsvPath(slug);
90 await _gate.WaitAsync(ct).ConfigureAwait(false);
91 try
92 {
93 var result = new List<GuestbookEntry>();
94 if (!File.Exists(path)) return result;
95
96 using var sr = new StreamReader(path, Encoding.UTF8);
97 bool first = true;
98 string? line;
99 while ((line = await sr.ReadLineAsync().ConfigureAwait(false)) != null)
100 {
101 if (string.IsNullOrWhiteSpace(line)) continue;
102 if (first && line.TrimStart().StartsWith("Name,")) { first = false; continue; }
103 first = false;
104
105 var f = ParseCsvLine(line);
106 if (f.Count < 4) continue;
107 if (!DateTime.TryParseExact(f[3], "yyyy-MM-dd HH:mm:ss",
108 CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out var when))
109 when = DateTime.Now;
110
111 result.Add(new GuestbookEntry { Name = f[0], Contact = f[1], Message = f[2], CreatedLocal = when });
112 }
113 return result;
114 }
115 finally { _gate.Release(); }
116 }

다음을 참조함 : _gate, CsvPath(), ParseCsvLine().

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

◆ ParseCsvLine()

List< string > WeddingPlatform.Services.CsvGuestbookStorage.ParseCsvLine ( string line)
inlinestaticprivate

Parse Csv Line 작업을 수행합니다.

매개변수
lineline에 사용할 string 값입니다.
반환값
Parse Csv Line 작업에서 생성한 List<string> 결과입니다.

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

267 {
268 var list = new List<string>();
269 var sb = new StringBuilder();
270 bool inQ = false;
271 for (int i = 0; i < line.Length; i++)
272 {
273 var ch = line[i];
274 if (inQ) { if (ch == '"') { if (i + 1 < line.Length && line[i + 1] == '"') { sb.Append('"'); i++; } else inQ = false; } else sb.Append(ch); }
275 else { if (ch == ',') { list.Add(sb.ToString()); sb.Clear(); } else if (ch == '"') inQ = true; else sb.Append(ch); }
276 }
277 list.Add(sb.ToString());
278 return list;
279 }

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

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

◆ SaveAsync()

async Task WeddingPlatform.Services.CsvGuestbookStorage.SaveAsync ( string slug,
IReadOnlyList< GuestbookEntry > entries,
CancellationToken ct = default )
inline

Async 데이터를 저장합니다.

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

WeddingPlatform.Services.IGuestbookStorage를 구현.

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

159 {
160 var path = CsvPath(slug);
161 Directory.CreateDirectory(Path.GetDirectoryName(path)!);
162 var tmp = path + ".tmp";
163
164 await _gate.WaitAsync(ct).ConfigureAwait(false);
165 try
166 {
167 using (var sw = new StreamWriter(tmp, false, new UTF8Encoding(false)))
168 {
169 await sw.WriteLineAsync("Name,Contact,Message,CreatedLocal").ConfigureAwait(false);
170 foreach (var e in entries)
171 {
172 ct.ThrowIfCancellationRequested();
173 await sw.WriteLineAsync(string.Join(",",
174 Esc(e.Name), Esc(e.Contact), Esc(e.Message),
175 Esc(e.CreatedLocal.ToString("yyyy-MM-dd HH:mm:ss")))).ConfigureAwait(false);
176 }
177 }
178 File.Copy(tmp, path, overwrite: true);
179 File.Delete(tmp);
180 }
181 finally { _gate.Release(); }
182 }

다음을 참조함 : _gate, CsvPath(), Esc().

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

멤버 데이터 문서화

◆ _gate

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

gate 값을 보관합니다.

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

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

◆ _tenants

readonly ITenantStore WeddingPlatform.Services.CsvGuestbookStorage._tenants
private

tenants 값을 보관합니다.

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

다음에 의해서 참조됨 : CsvGuestbookStorage(), CsvPath().


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