public Task <Unit> Handle(RegisterTrainerRequest request, CancellationToken cancellationToken) { if (_repo.Get(u => u.Email == request.Email).Any()) { throw new EntityAlreadyExistsException($"{request.Email} is already in use."); } if (_repo.Get(u => u.Username == request.Username).Any()) { throw new EntityAlreadyExistsException($"{request.Username} is already in use."); } _repo.Add(new Trainer { Username = request.Username, Password = request.Password, Email = request.Email, FirstName = request.FirstName, LastName = request.LastName, }); _bus.Publish(new UserRegisteredEvent() { DateRegistered = DateTime.Now, Email = request.Email, FirstName = request.FirstName, LastName = request.LastName, Username = request.Username }); return(Unit.Task); }
public Task <Unit> Handle(DeactivateTrainerRequest request, CancellationToken cancellationToken) { var trainer = _repo.Get(request.TrainerId); if (trainer == null) { throw new EntityNotFoundException(request.TrainerId, "Trainer"); } if (!trainer.IsActive) { throw new EntityInactiveException($"User {trainer.Username} is already inactive."); } trainer.IsActive = false; _repo.Update(trainer); _bus.Publish(new UserDeactivatedEvent { Email = trainer.Email, FirstName = trainer.FirstName, LastName = trainer.LastName }); return(Unit.Task); }
public Task <Unit> Handle(SendTrainingRequestRequest request, CancellationToken cancellationToken) { var user = _userRepo.Get(request.UserId); if (user == null) { throw new EntityNotFoundException(request.UserId, "User"); } var trainer = _trainerRepo.Get(request.TrainerId); if (trainer == null) { throw new EntityNotFoundException(request.TrainerId, "Trainer"); } if (_requestRepo.Get(r => r.TrainerId == request.TrainerId && r.UserId == request.UserId && r.IsActive).Any()) { throw new EntityAlreadyExistsException("Request to this trainer has already been sent and is waiting for response."); } _requestRepo.Add(new TrainingRequest { TrainerId = request.TrainerId, UserId = request.UserId }); _eventBus.Publish(new TrainingRequestRecieved { TrainerEmail = trainer.Email, TrainerFirstName = trainer.FirstName, TrainerLastName = trainer.LastName, UserFirstName = user.FirstName, UserLastName = user.LastName, UserUsername = user.Username }); return(Unit.Task); }