/// <inheritdoc />
        public async Task <Result> Handle(CreateGroupEventCommand request, CancellationToken cancellationToken)
        {
            if (request.UserId != _userIdentifierProvider.UserId)
            {
                return(Result.Failure(DomainErrors.User.InvalidPermissions));
            }

            if (request.DateTimeUtc <= _dateTime.UtcNow)
            {
                return(Result.Failure(DomainErrors.GroupEvent.DateAndTimeIsInThePast));
            }

            Maybe <User> maybeUser = await _userRepository.GetByIdAsync(request.UserId);

            if (maybeUser.HasNoValue)
            {
                return(Result.Failure(DomainErrors.User.NotFound));
            }

            Maybe <Category> maybeCategory = Category.FromValue(request.CategoryId);

            if (maybeCategory.HasNoValue)
            {
                return(Result.Failure(DomainErrors.Category.NotFound));
            }

            Result <Name> nameResult = Name.Create(request.Name);

            if (nameResult.IsFailure)
            {
                return(Result.Failure(nameResult.Error));
            }

            var groupEvent = GroupEvent.Create(maybeUser.Value, nameResult.Value, maybeCategory.Value, request.DateTimeUtc);

            _groupEventRepository.Insert(groupEvent);

            await _unitOfWork.SaveChangesAsync(cancellationToken);

            return(Result.Success());
        }