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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }