protected ValidationContext ValidateRegisterViewModel(RegisterViewModel viewModel)
        {
            var userEmail       = viewModel.Email;
            var userPassword    = viewModel.Password;
            var confirmPassword = viewModel.ConfirmPassword;

            //Validate email
            if (GameStoreValidator.IsNullOrEmpty(userEmail))
            {
                return(new ValidationContext(false, ErrorMessages.InvalidEmail));
            }

            var isValidEmail = userEmail.Contains("@") &&
                               userEmail.Contains(".");

            if (!isValidEmail)
            {
                return(new ValidationContext(false, ErrorMessages.InvalidEmail));
            }

            //Check for existing email
            if (this.UserDataService.ExistsByEmail(userEmail))
            {
                return(new ValidationContext(false, ErrorMessages.EmailIsNotUnique));
            }

            //Validate password
            if (GameStoreValidator.IsNullOrEmpty(userPassword) ||
                GameStoreValidator.IsNullOrEmpty(confirmPassword))
            {
                return(new ValidationContext(false, ErrorMessages.InvalidPassword));
            }

            var isValidPassword = GameStoreValidator.IsEqualOrLongerThan(userPassword, ValidationConstraints.MinPasswordLength) &&
                                  userPassword.Any(up => char.IsDigit(up)) &&
                                  userPassword.Any(up => char.IsLower(up)) &&
                                  userPassword.Any(up => char.IsUpper(up));

            //Check if passwords are invalid and don't match, so that we can combine the error messages
            if (!isValidPassword && !GameStoreValidator.AreEqual(userPassword, confirmPassword))
            {
                return(new ValidationContext(false, ErrorMessages.InvalidPassword + "<br/>" +
                                             ErrorMessages.PasswordsDontMatch));
            }

            if (!isValidPassword)
            {
                return(new ValidationContext(false, ErrorMessages.InvalidPassword));
            }

            //Check if both passwords are equal
            if (!GameStoreValidator.AreEqual(userPassword, confirmPassword))
            {
                return(new ValidationContext(false, ErrorMessages.PasswordsDontMatch));
            }

            return(new ValidationContext(true, Success));
        }
        protected ValidationContext ValidateGameViewModel(GameViewModel viewModel)
        {
            var title        = viewModel.Title;
            var price        = viewModel.Price;
            var size         = viewModel.Size;
            var trailerId    = viewModel.TrailerId;
            var thumbnailUrl = viewModel.ThumbnailURL;
            var description  = viewModel.Description;

            //Validate title
            if (!(GameStoreValidator.IsEqualOrBiggerThan(title[0], 'A') &&
                  GameStoreValidator.IsEqualOrLesserThan(title[0], 'Z') &&
                  GameStoreValidator.IsEqualOrBiggerThan(title.Length, ValidationConstraints.MinTitleLength) &&
                  GameStoreValidator.IsEqualOrLesserThan(title.Length, ValidationConstraints.MaxTitleLength)))
            {
                return(new ValidationContext(false, ErrorMessages.TitleIsInvalid));
            }

            //Validate description
            if (!GameStoreValidator.IsEqualOrBiggerThan(description.Length, ValidationConstraints.DescriptionLength))
            {
                return(new ValidationContext(false, ErrorMessages.DescriptionIsInvalid));
            }

            //Validate price
            if (!(GameStoreValidator.IsPositive(price) &&
                  GameStoreValidator.CheckStringPrecision(price, ValidationConstraints.PricePrecision)))
            {
                return(new ValidationContext(false, ErrorMessages.PriceIsInvalid));
            }

            //Validate size
            if (!(GameStoreValidator.IsPositive(size) &&
                  GameStoreValidator.CheckStringPrecision(size, ValidationConstraints.SizePrecision)))
            {
                return(new ValidationContext(false, ErrorMessages.SizeIsInvalid));
            }

            //Validate trailerId
            if (!GameStoreValidator.StringLengthIsEqualTo(trailerId, ValidationConstraints.TrailerIdLength))
            {
                return(new ValidationContext(false, ErrorMessages.TrailerIsInvalid));
            }

            //Check if thumbnail is present and if yes validate it
            if (thumbnailUrl != null && !GameStoreValidator.StringStartsWithAny(thumbnailUrl, ValidationConstraints.ThumbnailUrls))
            {
                return(new ValidationContext(false, ErrorMessages.ThumbnailURLIsInvalid));
            }

            return(new ValidationContext(true, Success));
        }