public static ChallengeTimelineModel ToModel(this ChallengeTimeline timeline) { return(new ChallengeTimelineModel { CreatedAt = timeline.CreatedAt, Duration = timeline.Duration.Ticks, StartedAt = timeline.StartedAt, ClosedAt = timeline.ClosedAt }); }
protected override async Task SeedProductionAsync() { var scoring = new Scoring( new Dictionary <string, float> { ["Kills"] = 4.5F, ["Deaths"] = -4F, ["Assists"] = 3.5F, ["TotalDamageDealtToChampions"] = 0.0009F, ["TotalDamageTaken"] = 0.00125F, ["TotalMinionsKilled"] = 0.04F, ["VisionScore"] = 0.38F, ["Winner"] = 20F }); var assemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) !; var file = File.OpenRead(Path.Combine(assemblyPath, "Setup/Challenges.Production.csv")); using var csvReader = file.OpenCsvReader(); var challenges = csvReader.GetRecords( new { Id = default(Guid), Name = default(string), Game = default(int), Entries = default(int), BestOf = default(int), Duration = default(long), State = default(int) }) .Select( record => { var timeline = new ChallengeTimeline( new UtcNowDateTimeProvider(), new ChallengeDuration(TimeSpan.FromSeconds(record.Duration))); return(new Challenge( ChallengeId.FromGuid(record.Id), new ChallengeName(record.Name !), Game.FromValue(record.Game), new BestOf(record.BestOf), new Entries(record.Entries), timeline, scoring)); }); Challenges.AddRange( challenges.Where(challenge => Challenges.All(x => x.Id != challenge.Id)) .Select(challenge => challenge.ToModel())); await this.CommitAsync(); }
private async Task SeedChallengesAsync() { var scoring = new Scoring( new Dictionary <string, float> { ["Kills"] = 4.5F, ["Deaths"] = -4F, ["Assists"] = 3.5F, ["TotalDamageDealtToChampions"] = 0.0009F, ["TotalDamageTaken"] = 0.00125F, ["TotalMinionsKilled"] = 0.04F, ["VisionScore"] = 0.38F, ["Winner"] = 20F }); var timeline = new ChallengeTimeline(new UtcNowDateTimeProvider(), new ChallengeDuration(TimeSpan.FromDays(1))); var challenges = new List <IChallenge> { new Challenge( ChallengeId.Parse("d53b366f-e717-43d4-ac12-6e13d37f5cef"), new ChallengeName("2$ CHALLENGE BEST OF 1 (2)"), Game.LeagueOfLegends, BestOf.One, Entries.Two, timeline, scoring), new Challenge( ChallengeId.Parse("369ae69d-b10d-4d72-84ba-698691646ba6"), new ChallengeName("3$ CHALLENGE BEST OF 1 (2)"), Game.LeagueOfLegends, BestOf.One, Entries.Two, timeline, scoring), new Challenge( ChallengeId.Parse("eb76fa60-700f-4dce-b312-d69897563437"), new ChallengeName("2$ CHALLENGE BEST OF 1 (4)"), Game.LeagueOfLegends, BestOf.One, Entries.Four, timeline, scoring), new Challenge( ChallengeId.Parse("82592581-e6ac-41e0-9c61-773d924f233d"), new ChallengeName("3$ CHALLENGE BEST OF 1 (4)"), Game.LeagueOfLegends, BestOf.One, Entries.Four, timeline, scoring), new Challenge( ChallengeId.Parse("9457ae9a-4e5c-436f-b10f-33134af68439"), new ChallengeName("2$ CHALLENGE BEST OF 1 (6)"), Game.LeagueOfLegends, BestOf.One, Entries.Six, timeline, scoring), new Challenge( ChallengeId.Parse("91f6d007-b458-4f1c-9814-755b32059e00"), new ChallengeName("3$ CHALLENGE BEST OF 1 (6)"), Game.LeagueOfLegends, BestOf.One, Entries.Six, timeline, scoring), new Challenge( ChallengeId.Parse("4ecb13a4-0742-4140-93b0-27ee582e5cab"), new ChallengeName("2$ CHALLENGE BEST OF 3 (2)"), Game.LeagueOfLegends, BestOf.Three, Entries.Two, timeline, scoring), new Challenge( ChallengeId.Parse("fa38f697-2ef3-40e9-a165-d62c3cc750a8"), new ChallengeName("3$ CHALLENGE BEST OF 3 (2)"), Game.LeagueOfLegends, BestOf.Three, Entries.Two, timeline, scoring), new Challenge( ChallengeId.Parse("ac6851b4-2cb7-42ab-bf44-fb197d21221b"), new ChallengeName("2$ CHALLENGE BEST OF 3 (4)"), Game.LeagueOfLegends, BestOf.Three, Entries.Four, timeline, scoring), new Challenge( ChallengeId.Parse("bb5f6e0c-ada7-47b4-9d24-a3c9ec7df034"), new ChallengeName("3$ CHALLENGE BEST OF 3 (4)"), Game.LeagueOfLegends, BestOf.Three, Entries.Four, timeline, scoring), new Challenge( ChallengeId.Parse("6ec217f7-3d6a-41c2-b2eb-4cc8799d2af5"), new ChallengeName("2$ CHALLENGE BEST OF 3 (6)"), Game.LeagueOfLegends, BestOf.Three, Entries.Six, timeline, scoring), new Challenge( ChallengeId.Parse("7d96b314-8d5b-4393-9257-9c0e2cf7c0f1"), new ChallengeName("3$ CHALLENGE BEST OF 3 (6)"), Game.LeagueOfLegends, BestOf.Three, Entries.Six, timeline, scoring) }; Challenges.AddRange(challenges.Where(challenge => Challenges.All(x => x.Id != challenge.Id)).Select(challenge => challenge.ToModel())); await this.CommitAsync(); }
public IChallenge FakeChallenge(ChallengeModel model) { var challengeFaker = new ChallengeFaker(); challengeFaker.CustomInstantiator( faker => { faker.User().Reset(); var name = new ChallengeName(model.Name); var game = Game.FromValue(model.Game); var entries = new Entries(model.Entries); var bestOf = new BestOf(model.BestOf); var duration = new ChallengeDuration(TimeSpan.FromTicks(model.Timeline.Duration)); var state = ChallengeState.FromValue(model.State); var utcNowDate = DateTime.UtcNow.Date; var createdAt = faker.Date.Recent(1, utcNowDate); var startedAt = faker.Date.Between(createdAt, utcNowDate); var endedAt = startedAt + duration; var synchronizationBuffer = endedAt + TimeSpan.FromHours(2); var closedAt = faker.Date.Soon(1, synchronizationBuffer); var synchronizedAt = faker.Date.Between(synchronizationBuffer, closedAt); var timeline = new ChallengeTimeline(new DateTimeProvider(startedAt), duration); var scoring = new Scoring { [new StatName("StatName1")] = new StatWeighting(0.00015F), [new StatName("StatName2")] = new StatWeighting(1), [new StatName("StatName3")] = new StatWeighting(0.77F), [new StatName("StatName4")] = new StatWeighting(100), [new StatName("StatName5")] = new StatWeighting(-3) }; var challenge = new Challenge( model.Id.ConvertTo <ChallengeId>(), name, game, bestOf, entries, timeline, scoring); var participantFaker = new ParticipantFaker(game, createdAt, startedAt); participantFaker.UseSeed(faker.Random.Int()); var participants = participantFaker.Generate(this.ParticipantCount(state, challenge.Entries)); participants.ForEach(participant => challenge.Register(participant)); if (state != ChallengeState.Inscription) { challenge.Start(new DateTimeProvider(startedAt)); participants.ForEach( participant => { var matchFaker = new MatchFaker(challenge.Scoring, synchronizedAt); matchFaker.UseSeed(faker.Random.Int()); var matches = matchFaker.Generate(this.MatchCount(state, challenge.BestOf)); participant.Snapshot(matches, new DateTimeProvider(synchronizedAt)); }); challenge.Synchronize(new DateTimeProvider(synchronizedAt)); if (state == ChallengeState.Ended || state == ChallengeState.Closed) { challenge.Start(new DateTimeProvider(startedAt - duration)); } if (state == ChallengeState.Closed) { challenge.Close(new DateTimeProvider(closedAt)); } } return(challenge); }); return(challengeFaker.Generate()); }