using ManagerService.Data; using System.Linq; using System.Text.RegularExpressions; namespace ManagerService.Helpers { public static class SlugHelper { /// /// Generate a URL-safe slug from a name, appending "-1", "-2", etc. until unique among Instances.WebSlug. /// public static string GenerateUniqueSlug(MyInfoMateDbContext db, string name) { var slug = name.ToLowerInvariant(); slug = Regex.Replace(slug, @"[àáâãäå]", "a"); slug = Regex.Replace(slug, @"[èéêë]", "e"); slug = Regex.Replace(slug, @"[ìíîï]", "i"); slug = Regex.Replace(slug, @"[òóôõö]", "o"); slug = Regex.Replace(slug, @"[ùúûü]", "u"); slug = Regex.Replace(slug, @"[ç]", "c"); slug = Regex.Replace(slug, @"[ñ]", "n"); slug = Regex.Replace(slug, @"[^a-z0-9\s-]", ""); slug = Regex.Replace(slug, @"[\s-]+", "-").Trim('-'); var baseSlug = slug; var counter = 1; while (db.Instances.Any(i => i.WebSlug == slug)) slug = $"{baseSlug}-{counter++}"; return slug; } } }