This commit is contained in:
2020-06-05 20:44:59 +00:00
parent e56e3720ca
commit c621f4e952

View File

@@ -14,6 +14,14 @@ namespace AyaNova.Util
public class Seeder
{
public int SeededUserCount = 0;
public Faker Fake;
public Seeder()
{
Fake = new Faker();
}
public static class Level
{
public enum SeedLevel { NotValid, SmallOneManShopTrialDataSet, MediumLocalServiceCompanyTrialDataSet, LargeCorporateMultiRegionalTrialDataSet, HugeForLoadTest };
@@ -39,8 +47,6 @@ namespace AyaNova.Util
}
}
public int SeededUserCount = 0;
//////////////////////////////////////////////////////
@@ -467,10 +473,10 @@ namespace AyaNova.Util
private string[] TagSet = new[] { "red", "orange", "yellow", "green", "blue", "indigo", "violet", "brown", "black", "white", "silver", "gold", "fuchsia", "jade", "mauve", "purple", "quince", "xanthic", "zebra", "zone0", "zone1", "zone2", "zone3", "zone4", "zone5", "zone6", "zone7", "zone8", "zone9" };
private List<string> RandomTags(Faker f)
private List<string> RandomTags()
{
var t = f.PickRandom(TagSet, f.Random.Int(1, 5));//pick up to 5 tags to apply
var t = Fake.PickRandom(TagSet, Fake.Random.Int(1, 5));//pick up to 5 tags to apply
return new List<string>(t);
}
@@ -552,7 +558,7 @@ namespace AyaNova.Util
if (translationId == 0)
translationId = ServerBootConfig.AYANOVA_DEFAULT_TRANSLATION_ID;
Faker Fake = new Faker();
for (int x = 0; x < count; x++)
{
@@ -581,7 +587,7 @@ namespace AyaNova.Util
//TODO: After have USER and HEADOFFICE and VENDOR, if usertype is subcontractor or client or headoffice it needs to set a corresponding user's parent org record id to go with it
//use provided tags or generate them
if (tags == null)
u.Tags = RandomTags(Fake);
u.Tags = RandomTags();
else
u.Tags = tags;
//Children and relations
@@ -741,10 +747,7 @@ namespace AyaNova.Util
{
//this is 4 times slower than doing it inside the loop below
//seems counterintuitive but maybe it's to do with the db context not being refreshed?
var f = new Bogus.Faker();//todo: this *can't* be right, I'm seeding 20k widgets in some cases
//RANDOM ROLES
Array values = Enum.GetValues(typeof(UserType));
Random random = new Random();
@@ -754,26 +757,26 @@ namespace AyaNova.Util
for (int x = 0; x < count; x++)
{
Widget o = new Widget();
o.Name = Uniquify(f.Commerce.ProductName());
o.Name = Uniquify(Fake.Commerce.ProductName());
o.Active = true;
DateTime dtSeed = f.Date.Between(seedStartWindow, seedEndWindow).ToUniversalTime();
DateTime dtSeed = Fake.Date.Between(seedStartWindow, seedEndWindow).ToUniversalTime();
o.StartDate = dtSeed;
o.EndDate = dtSeed.AddMinutes(60).ToUniversalTime();
o.DollarAmount = Convert.ToDecimal(f.Commerce.Price());
o.DollarAmount = Convert.ToDecimal(Fake.Commerce.Price());
//Random but valid enum
UserType randomUserType = (UserType)values.GetValue(random.Next(values.Length));
o.UserType = randomUserType;
o.Notes = f.Lorem.Sentence(null, 5);
o.Tags = RandomTags(f);
o.UserId = f.Random.Int(1, SeededUserCount);
o.Notes = Fake.Lorem.Sentence(null, 5);
o.Tags = RandomTags();
o.UserId = Fake.Random.Int(1, SeededUserCount);
//RANDOM CUSTOM FIELD DATA
var c1 = DateUtil.UniversalISO8661Format(f.Date.Between(DateTime.Now.AddYears(-1), DateTime.Now.AddYears(1)));
var c2 = f.Lorem.Sentence(null, 5);
var c3 = f.Random.Int(1, 99999999);
var c4 = f.Random.Bool().ToString().ToLowerInvariant();
var c5 = f.Random.Decimal();
var c1 = DateUtil.UniversalISO8661Format(Fake.Date.Between(DateTime.Now.AddYears(-1), DateTime.Now.AddYears(1)));
var c2 = Fake.Lorem.Sentence(null, 5);
var c3 = Fake.Random.Int(1, 99999999);
var c4 = Fake.Random.Bool().ToString().ToLowerInvariant();
var c5 = Fake.Random.Decimal();
o.CustomFields = $@"{{c1:""{c1}"",c2:""{c2}"",c3:{c3},c4:{c4},c5:{c5}}}";
//This seems wrong to do in a loop but is 4 times faster this way ?!?