WeddingPlatform.Web 1.0.0.0
지도, 갤러리, 방명록, 계좌 안내와 배경음악을 링크 하나에 담는 무료 모바일 청첩장 서비스입니다.
로딩중...
검색중...
일치하는것 없음
WeddingGuestbookViewModel.cs
이 파일의 문서화 페이지로 가기
3
5
14public sealed class WeddingGuestbookViewModel
15{
24 private readonly IGuestbookStorage _storage;
33 private List<GuestbookEntry> _entries = new();
34
52
61 public string Name { get; set; } = "";
70 public string Contact { get; set; } = "";
79 public string Message { get; set; } = "";
80
89 private static readonly string[] DefaultMessages =
90 [
91 "💖 두 분의 앞날에 사랑과 행복이 가득하시길 바랍니다 ✨",
92 "🎉 결혼을 진심으로 축하드립니다! 영원히 함께하세요 💍",
93 "🌸 오늘의 약속이 평생의 기쁨으로 이어지길 바랍니다 💕",
94 "🕊️ 늘 서로를 아끼고 존중하며 행복한 가정을 꾸리시길 🙏",
95 "🌈 두 분의 미래가 언제나 밝고 빛나길 바랍니다 ✨"
96 ];
97
107 {
108 if (string.IsNullOrEmpty(Message))
109 Message = DefaultMessages[Random.Shared.Next(DefaultMessages.Length)];
110 }
111
119 public string LastStatus { get; private set; } = "";
128 public bool IsSaving { get; private set; }
129
138 public IReadOnlyList<GuestbookEntryView> EntriesView =>
139 _entries.OrderByDescending(e => e.CreatedLocal)
140 .Select(e => new GuestbookEntryView { Name = e.Name, Message = e.Message, CreatedLocal = e.CreatedLocal })
141 .ToList();
142
175 public async Task InitializeAsync(string slug, CancellationToken ct = default)
176 {
177 try
178 {
179 var list = await _storage.LoadAsync(slug, ct).ConfigureAwait(false);
180 _entries = list.ToList();
181 LastStatus = "";
182 }
183 catch { LastStatus = "방명록 데이터를 불러오는 중 오류가 발생했어요."; }
184 }
185
218 public async Task AddEntryAsync(string slug, CancellationToken ct = default)
219 {
220 if (IsSaving) return;
221 if (string.IsNullOrWhiteSpace(Name)) { LastStatus = "이름을 입력해주세요."; return; }
222 if (string.IsNullOrWhiteSpace(Message)) { LastStatus = "메시지를 입력해주세요."; return; }
223
224 var entry = new GuestbookEntry
225 {
226 Name = Name.Trim(),
227 Contact = Contact.Trim(),
228 Message = Message.Trim(),
229 CreatedLocal = DateTime.Now
230 };
231
232 IsSaving = true;
233 try
234 {
235 var updated = new List<GuestbookEntry> { entry };
236 updated.AddRange(_entries);
237 await _storage.SaveAsync(slug, updated, ct).ConfigureAwait(false);
238 _entries = updated;
239 Name = ""; Contact = ""; Message = "";
240 LastStatus = "저장되었습니다. 감사합니다 🙏";
241 }
242 catch { LastStatus = "저장 중 오류가 발생했어요."; }
243 finally { IsSaving = false; }
244 }
245
278 public async Task ReloadAsync(string slug, CancellationToken ct = default)
279 {
280 try
281 {
282 var list = await _storage.LoadAsync(slug, ct).ConfigureAwait(false);
283 _entries = list.ToList();
284 LastStatus = "새로고침 완료";
285 }
286 catch { LastStatus = "새로고침 중 오류가 발생했어요."; }
287 }
288}
async Task AddEntryAsync(string slug, CancellationToken ct=default)
async Task ReloadAsync(string slug, CancellationToken ct=default)
async Task InitializeAsync(string slug, CancellationToken ct=default)