public async Task HandleAsync(UpdateTrainingCommand command, CancellationToken cancellationToken = default) { Guid.TryParse(httpContext.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier)?.Value, out Guid coachId); var coach = await repository.GetByAsync(p => p.Id == coachId, new[] { "Runners" }, cancellationToken); if (coach.Equals(null)) { throw new ArgumentNullException($"There is no coach with Id {coachId}"); } var runnerFromDB = coach.Runners.Find(r => r.Id == command.RunnerId); if (runnerFromDB == null) { throw new ArgumentNullException($"Coach {coachId} does not have this runner {command.RunnerId}!"); } var trainingFromDB = runnerFromDB.Trainings.Find(t => t.Id == command.Id); if (trainingFromDB == null) { throw new ArgumentNullException("Runner does not have this training!"); } var trainingDetails = TraningDetails.Create(command.Details, command.Comments); trainingFromDB.Update(command.TimeToDo, trainingDetails); await repository.SaveAsync(coach); }
public static DataBaseContext CreateWithData() { var options = new DbContextOptionsBuilder <DataBaseContext>() .UseInMemoryDatabase(Guid.NewGuid().ToString()) .Options; var context = new DataBaseContext(options); context.Database.EnsureCreated(); var coachEmail = Email.Create("*****@*****.**"); var coach = Coach.Create("DbContextFactorylogin", "DbContextFactorypassword", "DbContextFactoryfirstName", "DbContextFactorylastName", "Qwertyqwerty", coachEmail); var runnerEmail = Email.Create("*****@*****.**"); var runner = Runner.Create("DbContextFactoryrunnerName", "DbContextFactoryrunnerLastName", runnerEmail); var trainingDetails = TraningDetails.Create("details", "comment"); var training = Training.Create(DateTime.UtcNow, trainingDetails); coach.AddRunner(runner); coach.AddTrainigForRunner(runner, training); context.Add(coach); context.Runners.Add(runner); context.Traings.Add(training); context.SaveChanges(); return(context); }
public async Task HandleAsync(CreateTrainingCommand command, CancellationToken cancellationToken = default) { Guid.TryParse(httpContext.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier)?.Value, out Guid coachId); var coach = await repository.GetByAsync(p => p.Id == coachId, new[] { "Runners" }, cancellationToken); if (coach.Runners.Capacity == 0) { throw new ArgumentNullException("Coach does not have this runner!"); } var runner = coach.Runners.Find(r => r.Id == command.RunnerId); if (runner == null) { throw new ArgumentNullException("Coach does not have this runner!"); } var trainingDetails = TraningDetails.Create(command.Details, command.Comments); var training = Training.Create(command.TimeToDo, trainingDetails); coach.AddTrainigForRunner(runner, training); var coachName = $"{coach.FirstName} {coach.LastName}"; await eventPublisher.PublishAsync <TrainingCreated> (new TrainingCreated(training.Id, DateTime.Now, coachName, runner.Email.EmailAdress)); await repository.SaveAsync(coach); }