public async Task <Unit> Handle(ChangeFollowSchoolingEventCommand request, CancellationToken cancellationToken)
        {
            //TODO: add validation

            var userIdThatWantsToChangeFollowStatus = request.UserId;

            var eventEntity = await _schoolingEventRepository.GetById(request.EventId);

            var follower = eventEntity.Followers.FirstOrDefault(f => f.UserId == userIdThatWantsToChangeFollowStatus);

            if (request.IsFollowing && follower == null)
            {
                await _schoolingEventFollowerRepository.Add(new SchoolingEventFollower()
                {
                    UserId  = userIdThatWantsToChangeFollowStatus,
                    EventId = eventEntity.Id
                });

                if (await Commit())
                {
                    //TODO: rise event
                }
            }
            else if (!request.IsFollowing && follower != null)
            {
                await _schoolingEventFollowerRepository.Remove(follower.Id);

                if (await Commit())
                {
                    //TODO: rise event
                }
            }

            return(Unit.Value);
        }
        public async Task <FeaturedSchoolingEventViewModel> GetById(Guid id)
        {
            var entity = await _schoolingEventRepository.GetById(id);

            if (entity == null)
            {
                await _bus.RaiseEvent(new DomainNotification("GetById", $"Event with id {id} doesn't exist"));

                return(null);
            }

            var vm = Mapper.Map <FeaturedSchoolingEventViewModel>(entity);

            if (_user.IsAuthenticated())
            {
                var currentUserId = _user.Id;
                vm.IsFollowing = await _schoolingEventRepository.IsUserFollowingEvent(currentUserId, entity.Id);

                vm.HasCreated = vm.CreatedByUserId == _user.Id;
            }

            return(vm);
        }