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;
}
}