Codemaru 1.0.0.0
QR 코드, 모바일 랜딩 페이지, vCard 연락처 저장과 명함 디자인을 한 화면에서 제공하는 디지털 명함 서비스입니다.
로딩중...
검색중...
일치하는것 없음
CardLandingPath.cs
이 파일의 문서화 페이지로 가기
2using System.Globalization;
3using System.Text;
4
5namespace Codemaru.Services;
6
15public static class CardLandingPath
16{
49 public static string NormalizeForTenant(string slug, CardHybridUser user)
50 {
51 var segments = Split(slug);
52 if (segments.Length == 0)
53 {
54 return $"card/{TenantSlug(user)}/me";
55 }
56
57 if (!string.Equals(segments[0], "card", StringComparison.OrdinalIgnoreCase))
58 {
59 return string.Join("/", segments.Select(Slugify));
60 }
61
62 if (segments.Length == 1)
63 {
64 return $"card/{TenantSlug(user)}/me";
65 }
66
67 if (segments.Length == 2)
68 {
69 return $"card/{TenantSlug(user)}/{Slugify(segments[1])}";
70 }
71
72 return string.Join("/", segments.Select(Slugify));
73 }
74
99 public static string TenantSlug(CardHybridUser user)
100 {
101 var idSlug = Slugify(user.Id);
102 return string.IsNullOrWhiteSpace(idSlug) ? "guest" : idSlug;
103 }
104
129 public static string[] Split(string slug) =>
130 (slug ?? string.Empty)
131 .Replace("\\", "/", StringComparison.Ordinal)
132 .Split('/', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
133 .Where(static segment => segment is not "." and not "..")
134 .ToArray();
135
160 public static string Slugify(string value)
161 {
162 if (string.IsNullOrWhiteSpace(value))
163 {
164 return string.Empty;
165 }
166
167 var builder = new StringBuilder(value.Length);
168 var previousDash = false;
169
170 foreach (var rune in value.Trim().Normalize(NormalizationForm.FormD).EnumerateRunes())
171 {
172 if (Rune.GetUnicodeCategory(rune) == UnicodeCategory.NonSpacingMark)
173 {
174 continue;
175 }
176
177 if (rune.Value is >= 'A' and <= 'Z')
178 {
179 builder.Append((char)(rune.Value + 32));
180 previousDash = false;
181 }
182 else if (rune.Value is >= 'a' and <= 'z' or >= '0' and <= '9')
183 {
184 builder.Append((char)rune.Value);
185 previousDash = false;
186 }
187 else if (!previousDash)
188 {
189 builder.Append('-');
190 previousDash = true;
191 }
192 }
193
194 return builder.ToString().Trim('-');
195 }
196}
record CardHybridUser(string Id, string Email, string DisplayName, DateTime SignedInAt)
static string[] Split(string slug)
static string Slugify(string value)
static string NormalizeForTenant(string slug, CardHybridUser user)
static string TenantSlug(CardHybridUser user)