namespace zero.Persistence; public class IdGenerator { const string CHARS = "abcdefghijklmnopqrstuvwxyz0123456789"; private static Random random = new(); /// /// Create a new unique Id /// public static string Create(int length = -1) { if (length < 1) { length = 12; } return new string(Enumerable.Repeat(CHARS, length).Select(s => s[random.Next(s.Length)]).ToArray()); //if (length > 0) //{ //return Convert.ToBase64String(Guid.NewGuid().ToByteArray()) // .Replace("/", String.Empty) // .Replace("+", String.Empty) // .Replace("-", String.Empty) // .ToLowerInvariant() // .Substring(0, length); //} //return Guid.NewGuid().ToString(); } /// /// Creates a simple hash from a string /// public static string HashString(string value) { return value.GetHashCode().ToString().Replace("-", String.Empty); } /// /// Autofill IDs on an object with [GenerateId] attributes /// public static T Autofill(T model) { // find all Raven Ids List> ravenIds = ObjectTraverser.FindAttribute(model); // set unset Raven Ids foreach (ObjectTraverser.Result item in ravenIds) { string id = item.Property.GetValue(item.Parent, null) as string; if (id.IsNullOrWhiteSpace()) { id = item.Item.Length.HasValue ? Create(item.Item.Length.Value) : Create(); item.Property.SetValue(item.Parent, id); } } return model; } }