From c32b4ef0344b50c3a2720e07f8215591c2affb74 Mon Sep 17 00:00:00 2001 From: Ricardo Carneiro Date: Sat, 25 Oct 2025 22:35:27 -0300 Subject: [PATCH] feat: novas redes sociais e qrcodes. --- .claude/settings.local.json | 5 +- src/BCards.Web/Controllers/AdminController.cs | 166 +++++++++++- .../ViewModels/CreatePageViewModel.cs | 8 + .../ViewModels/ManagePageViewModel.cs | 8 + src/BCards.Web/Views/Admin/ManagePage.cshtml | 134 +++++++++- src/BCards.Web/Views/UserPage/Display.cshtml | 244 +++++++++++++++++- 6 files changed, 551 insertions(+), 14 deletions(-) diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 49a4a0f..95948cd 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -27,8 +27,9 @@ "Bash(./clean-build.sh:*)", "Bash(git add:*)", "Bash(scp:*)", - "Bash(ssh:*)" + "Bash(ssh:*)", + "Bash(cat:*)" ] }, "enableAllProjectMcpServers": false -} \ No newline at end of file +} diff --git a/src/BCards.Web/Controllers/AdminController.cs b/src/BCards.Web/Controllers/AdminController.cs index 1889d66..dd6182b 100644 --- a/src/BCards.Web/Controllers/AdminController.cs +++ b/src/BCards.Web/Controllers/AdminController.cs @@ -551,6 +551,54 @@ public class AdminController : Controller }); } + if (!string.IsNullOrEmpty(model.TiktokUrl)) + { + socialLinks.Add(new LinkItem + { + Title = "TikTok", + Url = model.TiktokUrl, + Icon = "fab fa-tiktok", + IsActive = true, + Order = userPage.Links.Count + socialLinks.Count + }); + } + + if (!string.IsNullOrEmpty(model.PinterestUrl)) + { + socialLinks.Add(new LinkItem + { + Title = "Pinterest", + Url = model.PinterestUrl, + Icon = "fab fa-pinterest", + IsActive = true, + Order = userPage.Links.Count + socialLinks.Count + }); + } + + if (!string.IsNullOrEmpty(model.DiscordUrl)) + { + socialLinks.Add(new LinkItem + { + Title = "Discord", + Url = model.DiscordUrl, + Icon = "fab fa-discord", + IsActive = true, + Order = userPage.Links.Count + socialLinks.Count + }); + } + + if (!string.IsNullOrEmpty(model.KawaiUrl)) + { + socialLinks.Add(new LinkItem + { + Title = "Kawai", + Url = model.KawaiUrl, + Icon = "fas fa-heart", + IsActive = true, + Order = userPage.Links.Count + socialLinks.Count + }); + } + userPage.Links.AddRange(socialLinks); await _userPageService.CreatePageAsync(userPage); @@ -822,6 +870,54 @@ public class AdminController : Controller }); } + if (!string.IsNullOrEmpty(model.TiktokUrl)) + { + socialLinks.Add(new LinkItem + { + Title = "TikTok", + Url = model.TiktokUrl, + Icon = "fab fa-tiktok", + IsActive = true, + Order = currentOrder++ + }); + } + + if (!string.IsNullOrEmpty(model.PinterestUrl)) + { + socialLinks.Add(new LinkItem + { + Title = "Pinterest", + Url = model.PinterestUrl, + Icon = "fab fa-pinterest", + IsActive = true, + Order = currentOrder++ + }); + } + + if (!string.IsNullOrEmpty(model.DiscordUrl)) + { + socialLinks.Add(new LinkItem + { + Title = "Discord", + Url = model.DiscordUrl, + Icon = "fab fa-discord", + IsActive = true, + Order = currentOrder++ + }); + } + + if (!string.IsNullOrEmpty(model.KawaiUrl)) + { + socialLinks.Add(new LinkItem + { + Title = "Kawai", + Url = model.KawaiUrl, + Icon = "fas fa-heart", + IsActive = true, + Order = currentOrder++ + }); + } + userPage.Links.AddRange(socialLinks); return userPage; } @@ -932,6 +1028,54 @@ public class AdminController : Controller }); } + if (!string.IsNullOrEmpty(model.TiktokUrl)) + { + socialLinks.Add(new LinkItem + { + Title = "TikTok", + Url = model.TiktokUrl, + Icon = "fab fa-tiktok", + IsActive = true, + Order = currentOrder++ + }); + } + + if (!string.IsNullOrEmpty(model.PinterestUrl)) + { + socialLinks.Add(new LinkItem + { + Title = "Pinterest", + Url = model.PinterestUrl, + Icon = "fab fa-pinterest", + IsActive = true, + Order = currentOrder++ + }); + } + + if (!string.IsNullOrEmpty(model.DiscordUrl)) + { + socialLinks.Add(new LinkItem + { + Title = "Discord", + Url = model.DiscordUrl, + Icon = "fab fa-discord", + IsActive = true, + Order = currentOrder++ + }); + } + + if (!string.IsNullOrEmpty(model.KawaiUrl)) + { + socialLinks.Add(new LinkItem + { + Title = "Kawai", + Url = model.KawaiUrl, + Icon = "fas fa-heart", + IsActive = true, + Order = currentOrder++ + }); + } + page.Links.AddRange(socialLinks); } @@ -1159,15 +1303,27 @@ public class AdminController : Controller // Tratar espaço em branco como campo vazio para redes sociais if (string.IsNullOrWhiteSpace(model.WhatsAppNumber) || model.WhatsAppNumber.Trim().Length <= 1) model.WhatsAppNumber = string.Empty; - + if (string.IsNullOrWhiteSpace(model.FacebookUrl) || model.FacebookUrl.Trim().Length <= 1) model.FacebookUrl = string.Empty; - + if (string.IsNullOrWhiteSpace(model.InstagramUrl) || model.InstagramUrl.Trim().Length <= 1) model.InstagramUrl = string.Empty; - + if (string.IsNullOrWhiteSpace(model.TwitterUrl) || model.TwitterUrl.Trim().Length <= 1) model.TwitterUrl = string.Empty; + + if (string.IsNullOrWhiteSpace(model.TiktokUrl) || model.TiktokUrl.Trim().Length <= 1) + model.TiktokUrl = string.Empty; + + if (string.IsNullOrWhiteSpace(model.PinterestUrl) || model.PinterestUrl.Trim().Length <= 1) + model.PinterestUrl = string.Empty; + + if (string.IsNullOrWhiteSpace(model.DiscordUrl) || model.DiscordUrl.Trim().Length <= 1) + model.DiscordUrl = string.Empty; + + if (string.IsNullOrWhiteSpace(model.KawaiUrl) || model.KawaiUrl.Trim().Length <= 1) + model.KawaiUrl = string.Empty; } // Endpoint para validar impacto de downgrade @@ -1246,6 +1402,10 @@ public class AdminController : Controller modelState.Remove(x => x.FacebookUrl); modelState.Remove(x => x.TwitterUrl); modelState.Remove(x => x.WhatsAppNumber); + modelState.Remove(x => x.TiktokUrl); + modelState.Remove(x => x.PinterestUrl); + modelState.Remove(x => x.DiscordUrl); + modelState.Remove(x => x.KawaiUrl); // Remover validação de 'Description' para links do tipo 'Normal' if (model.Links != null) diff --git a/src/BCards.Web/ViewModels/CreatePageViewModel.cs b/src/BCards.Web/ViewModels/CreatePageViewModel.cs index 968c767..183a273 100644 --- a/src/BCards.Web/ViewModels/CreatePageViewModel.cs +++ b/src/BCards.Web/ViewModels/CreatePageViewModel.cs @@ -28,6 +28,14 @@ public class CreatePageViewModel public string InstagramUrl { get; set; } = string.Empty; + public string TiktokUrl { get; set; } = string.Empty; + + public string PinterestUrl { get; set; } = string.Empty; + + public string DiscordUrl { get; set; } = string.Empty; + + public string KawaiUrl { get; set; } = string.Empty; + public List Links { get; set; } = new(); public string Slug { get; set; } = string.Empty; diff --git a/src/BCards.Web/ViewModels/ManagePageViewModel.cs b/src/BCards.Web/ViewModels/ManagePageViewModel.cs index 1cb29c0..5e4188f 100644 --- a/src/BCards.Web/ViewModels/ManagePageViewModel.cs +++ b/src/BCards.Web/ViewModels/ManagePageViewModel.cs @@ -34,6 +34,14 @@ public class ManagePageViewModel public string InstagramUrl { get; set; } = string.Empty; + public string TiktokUrl { get; set; } = string.Empty; + + public string PinterestUrl { get; set; } = string.Empty; + + public string DiscordUrl { get; set; } = string.Empty; + + public string KawaiUrl { get; set; } = string.Empty; + public List Links { get; set; } = new(); // Profile image fields diff --git a/src/BCards.Web/Views/Admin/ManagePage.cshtml b/src/BCards.Web/Views/Admin/ManagePage.cshtml index dade940..29f2690 100644 --- a/src/BCards.Web/Views/Admin/ManagePage.cshtml +++ b/src/BCards.Web/Views/Admin/ManagePage.cshtml @@ -249,7 +249,11 @@ "facebook", "whatsapp", "twitter", - "instagram" + "instagram", + "tiktok", + "pinterest", + "discord", + "kawai" }; var match = myList.FirstOrDefault(stringToCheck => !string.IsNullOrEmpty(Model.Links[i].Icon) && @@ -382,10 +386,18 @@ var twitter = Model.Links.Where(x => !string.IsNullOrEmpty(x.Icon) && x.Icon.Contains("twitter")).FirstOrDefault(); var whatsapp = Model.Links.Where(x => !string.IsNullOrEmpty(x.Icon) && x.Icon.Contains("whatsapp")).FirstOrDefault(); var instagram = Model.Links.Where(x => !string.IsNullOrEmpty(x.Icon) && x.Icon.Contains("instagram")).FirstOrDefault(); + var tiktok = Model.Links.Where(x => !string.IsNullOrEmpty(x.Icon) && x.Icon.Contains("tiktok")).FirstOrDefault(); + var pinterest = Model.Links.Where(x => !string.IsNullOrEmpty(x.Icon) && x.Icon.Contains("pinterest")).FirstOrDefault(); + var discord = Model.Links.Where(x => !string.IsNullOrEmpty(x.Icon) && x.Icon.Contains("discord")).FirstOrDefault(); + var kawai = Model.Links.Where(x => !string.IsNullOrEmpty(x.Icon) && x.Icon.Contains("kawai")).FirstOrDefault(); var facebookUrl = facebook !=null ? facebook.Url.Replace("https://facebook.com/","").Replace("https://www.facebook.com/","").Replace("https://fb.com/","") : ""; var twitterUrl = twitter !=null ? twitter.Url.Replace("https://x.com/","").Replace("https://twitter.com/","").Replace("https://www.twitter.com/","") : ""; var whatsappUrl = whatsapp !=null ? whatsapp.Url.Replace("https://wa.me/","").Replace("whatsapp://","") : ""; var instagramUrl = instagram !=null ? instagram.Url.Replace("https://instagram.com/","").Replace("https://www.instagram.com/","") : ""; + var tiktokUrl = tiktok !=null ? tiktok.Url.Replace("https://tiktok.com/@@","").Replace("https://www.tiktok.com/@@","").Replace("https://vm.tiktok.com/","") : ""; + var pinterestUrl = pinterest !=null ? pinterest.Url.Replace("https://pinterest.com/","").Replace("https://www.pinterest.com/","").Replace("https://pin.it/","") : ""; + var discordUrl = discord !=null ? discord.Url.Replace("https://discord.gg/","").Replace("https://discord.com/invite/","") : ""; + var kawaiUrl = kawai !=null ? kawai.Url.Replace("https://kawai.com/","").Replace("https://www.kawai.com/","") : ""; }
@@ -490,7 +502,93 @@
- + +
+
+ +
+
+ + +
+ + + +
+ + +
+
+ + +
+ + + +
+
+ +
+ +
+
+ + +
+ + + +
+ + +
+
+ + +
+ + + +
+
+
+
+ +
+ + +
+
+

Escaneie para compartilhar esta página

+ +
+
+