Esempio n. 1
0
 public CreateRestaurantPreLogicValidationStrategy(RegisterRestaurantDto registerRestaurantDto)
 {
     _registerRestaurantDto     = registerRestaurantDto;
     _businessHourDtoValidator  = new BusinessHourDtoValidator();
     _businessHourValidator     = new BusinessHourValidator();
     _restaurantDetailValidator = new RestaurantDetailValidator();
 }
Esempio n. 2
0
        public IHttpActionResult RegisterFirstTimeRestaurantUser([FromBody] RegisterRestaurantDto registerRestaurantDto)
        {
            // Model Binding Validation
            if (!ModelState.IsValid)
            {
                return(BadRequest(GeneralErrorMessages.MODEL_STATE_ERROR));
            }
            try
            {
                var userManager = new UserManager();
                var response    = userManager.CreateFirstTimeRestaurantUser(registerRestaurantDto);
                if (response.Error != null)
                {
                    return(BadRequest(response.Error));
                }

                // Return authentication token for user
                var authManager = new AuthenticationTokenManager();
                var token       = authManager.CreateToken(registerRestaurantDto.UserAccountDto.Username);

                return(Ok(token.Data.TokenString));
            }
            // Catch exceptions
            catch (Exception)
            {
                return(InternalServerError());
            }
        }
Esempio n. 3
0
 public IHttpActionResult RegisterRestaurantUser([FromBody] RegisterRestaurantDto registerRestaurantDto)
 {
     // Model Binding Validation
     if (!ModelState.IsValid)
     {
         return(BadRequest(GeneralErrorMessages.MODEL_STATE_ERROR));
     }
     try
     {
         var userManager = new UserManager();
         var response    = userManager.CreateRestaurantUser(registerRestaurantDto);
         if (response.Error != null)
         {
             return(BadRequest(response.Error));
         }
         // HTTP 201 Status
         return(Created("Restaurant user has been created: ", registerRestaurantDto.UserAccountDto.Username));
     }
     // Catch exceptions
     catch (Exception)
     {
         return(InternalServerError());
     }
 }
Esempio n. 4
0
        /// <summary>
        /// Instantiate domain model equivalent of Dto's
        /// <para>
        /// @author: Brian Fann
        /// @updated: 4/25/18
        /// </para>
        /// </summary>
        /// <param name="dto">Dto to map</param>
        /// <param name="param">Parameter Object to map to</param>
        /// <returns></returns>
        private ResponseDto <bool> MapRestaurantDtoToModels(RegisterRestaurantDto dto, out UserAccount userAccount, out PasswordSalt passwordSalt, out UserClaims userClaims, out UserProfile userProfile, out IList <SecurityQuestion> securityQuestions, out IList <SecurityAnswerSalt> securityAnswerSalts, out RestaurantProfile restaurantProfile, out IList <BusinessHour> businessHours, out IList <FoodPreference> foodPreferences)
        {
            // Try to map user dto
            var mappingResult = MapUserDtoToModel(dto, out userAccount, out passwordSalt, out userProfile, out securityQuestions, out securityAnswerSalts);

            if (!mappingResult.Data)
            {
                restaurantProfile = null;
                foodPreferences   = null;
                businessHours     = null;
                userClaims        = null;

                return(mappingResult);
            }

            restaurantProfile = new RestaurantProfile(
                phoneNumber: dto.RestaurantProfileDto.PhoneNumber,
                address: dto.RestaurantProfileDto.Address,
                details: dto.RestaurantProfileDto.Details);

            // Call GeocodeService to get geocoordinates of the restaurant
            var geocodeService  = new GoogleGeocodeService();
            var geocodeResponse = geocodeService.Geocode(restaurantProfile.Address);

            var dateTimeService = new DateTimeService();

            businessHours = dto.BusinessHourDtos
                            .Select(businessHourDto => new BusinessHour(
                                        timeZone: dto.TimeZone,
                                        day: businessHourDto.Day,
                                        openTime: dateTimeService.ConvertLocalMeanTimeToUtc(dateTimeService.ConvertTimeToDateTimeUnspecifiedKind(businessHourDto.OpenTime), dto.TimeZone),
                                        closeTime: dateTimeService.ConvertLocalMeanTimeToUtc(dateTimeService.ConvertTimeToDateTimeUnspecifiedKind(businessHourDto.CloseTime), dto.TimeZone)))
                            .ToList();

            foodPreferences = new List <FoodPreference>();

            if (dto.FoodPreferences != null)
            {
                foodPreferences = dto.FoodPreferences.Select(foodPreference => new FoodPreference(foodPreference)).ToList();
            }

            // Set user claims to be stored in UserClaims table
            var claimsFactory = new ClaimsFactory();

            userClaims = new UserClaims(claimsFactory.Create(AccountTypes.Restaurant));

            if (geocodeResponse.Error != null)
            {
                return(new ResponseDto <bool>
                {
                    Data = false,
                    Error = geocodeResponse.Error
                });
            }

            restaurantProfile.GeoCoordinates = new GeoCoordinates(latitude: geocodeResponse.Data.Latitude, longitude: geocodeResponse.Data.Longitude);

            // Successful response
            return(new ResponseDto <bool>()
            {
                Data = true
            });
        }
Esempio n. 5
0
        /// <summary>
        /// Creates a restaurant user as part of first time registration
        /// </summary>
        /// <para>
        /// @author: Brian Fann
        /// @updated: 04/25/2018
        /// </para>
        /// <param name="registerRestaurantDto">Incoming Dto</param>
        /// <returns></returns>
        public ResponseDto <RegisterRestaurantDto> CreateFirstTimeRestaurantUser(RegisterRestaurantDto registerRestaurantDto)
        {
            // Validate incoming user account in the dto
            var userPreLogicValidationStrategy = new CreateFirstTimeIndividualPreLogicValidationStrategy(registerRestaurantDto);
            var userResult = userPreLogicValidationStrategy.ExecuteStrategy();

            if (userResult.Error != null)
            {
                return(new ResponseDto <RegisterRestaurantDto>
                {
                    Data = registerRestaurantDto,
                    Error = userResult.Error
                });
            }

            // Validate incoming restaurant details in the dto
            var restaurantPreLogicValidationStrategy = new CreateRestaurantPreLogicValidationStrategy(registerRestaurantDto);
            var restaurantResult = restaurantPreLogicValidationStrategy.ExecuteStrategy();

            if (restaurantResult.Error != null)
            {
                return(new ResponseDto <RegisterRestaurantDto>
                {
                    Data = registerRestaurantDto,
                    Error = restaurantResult.Error
                });
            }

            // Authenticate user credentials against the database
            var credentialsValidator = new CredentialsValidator();
            var credentialsResult    = credentialsValidator.IsCredentialsValid(registerRestaurantDto.UserAccountDto.Username, registerRestaurantDto.UserAccountDto.Password);

            if (!credentialsResult.Data)
            {
                return(new ResponseDto <RegisterRestaurantDto>()
                {
                    Data = registerRestaurantDto,
                    Error = credentialsResult.Error
                });
            }

            // Create a domain model based on the dto.
            var mappingResult = MapRestaurantDtoToModels(registerRestaurantDto, out var userAccount, out var passwordSalt, out var userClaims, out var userProfile, out var securityQuestions, out var securityAnswerSalts, out var restaurantProfile, out var businessHours, out var foodPreferences);

            if (!mappingResult.Data)
            {
                return(new ResponseDto <RegisterRestaurantDto>()
                {
                    Data = registerRestaurantDto,
                    Error = mappingResult.Error
                });
            }

            // Validate domain models created from dto
            var userPostLogicValidationStrategy = new CreateFirstTimeIndividualPostLogicValidationStrategy(userAccount, passwordSalt, userClaims, userProfile, securityQuestions, securityAnswerSalts);

            userResult = userPostLogicValidationStrategy.ExecuteStrategy();

            if (userResult.Error != null)
            {
                return(new ResponseDto <RegisterRestaurantDto>
                {
                    Data = registerRestaurantDto,
                    Error = userResult.Error
                });
            }

            // Map the user's id in the database to the generated domain model.
            var userIdResult = GetFirstTimeUserAccountId(userAccount.Username);

            if (userIdResult.Error != null)
            {
                return(new ResponseDto <RegisterRestaurantDto>()
                {
                    Data = registerRestaurantDto,
                    Error = userIdResult.Error
                });
            }

            userAccount.Id = userIdResult.Data;

            // Apply post logic validation to the user account information
            var userPostLogicValdiationStrategy = new CreateIndividualPostLogicValidationStrategy(userAccount, passwordSalt, userClaims, userProfile, securityQuestions, securityAnswerSalts);
            var userPostResult = userPostLogicValdiationStrategy.ExecuteStrategy();

            if (!userPostResult.Data)
            {
                return(new ResponseDto <RegisterRestaurantDto>
                {
                    Data = registerRestaurantDto,
                    Error = GeneralErrorMessages.GENERAL_ERROR
                });
            }

            // Apply post logic validation to the restaurant information
            var restaurantPostLogicValdiationStrategy = new CreateRestaurantPostLogicValidationStrategy(restaurantProfile, businessHours);
            var restaurantPostResult = restaurantPostLogicValdiationStrategy.ExecuteStrategy();

            if (!restaurantPostResult.Data)
            {
                return(new ResponseDto <RegisterRestaurantDto>
                {
                    Data = registerRestaurantDto,
                    Error = GeneralErrorMessages.GENERAL_ERROR
                });
            }

            // Store user in database
            using (var userGateway = new UserGateway())
            {
                var createResult = userGateway.StoreRestaurantUser(userAccount, passwordSalt, userClaims, userProfile, restaurantProfile, securityQuestions, securityAnswerSalts, foodPreferences, businessHours);

                if (!createResult.Data)
                {
                    return(new ResponseDto <RegisterRestaurantDto>()
                    {
                        Data = registerRestaurantDto,
                        Error = createResult.Error
                    });
                }
            }

            return(new ResponseDto <RegisterRestaurantDto>
            {
                Data = registerRestaurantDto
            });
        }
Esempio n. 6
0
        /// <summary>
        /// The CreateRestaurantUser method.
        /// Contains business logic for creating a restaurant user.
        /// <para>
        /// @author: Jennifer Nguyen, Brian Fann
        /// @updated: 04/25/2018
        /// </para>
        /// </summary>
        /// <param name="registerRestaurantDto"></param>
        /// <returns>ResponseDto</returns>
        public ResponseDto <RegisterRestaurantDto> CreateRestaurantUser(RegisterRestaurantDto registerRestaurantDto)
        {
            var userPreLogicValidationStrategy = new CreateIndividualPreLogicValidationStrategy(registerRestaurantDto);

            var userResult = userPreLogicValidationStrategy.ExecuteStrategy();

            if (userResult.Error != null)
            {
                return(new ResponseDto <RegisterRestaurantDto>
                {
                    Data = registerRestaurantDto,
                    Error = userResult.Error
                });
            }

            var restaurantPreLogicValidationStrategy = new CreateRestaurantPreLogicValidationStrategy(registerRestaurantDto);

            // Validate data transfer object
            var restaurantResult = restaurantPreLogicValidationStrategy.ExecuteStrategy();

            if (restaurantResult.Error != null)
            {
                return(new ResponseDto <RegisterRestaurantDto>
                {
                    Data = registerRestaurantDto,
                    Error = restaurantResult.Error
                });
            }

            // Create a domain model based on the dto.
            var mappingResult = MapRestaurantDtoToModels(registerRestaurantDto, out var userAccount, out var passwordSalt, out var userClaims, out var userProfile, out var securityQuestions, out var securityAnswerSalts, out var restaurantProfile, out var businessHours, out var foodPreferences);

            if (!mappingResult.Data)
            {
                return(new ResponseDto <RegisterRestaurantDto>()
                {
                    Data = registerRestaurantDto,
                    Error = mappingResult.Error
                });
            }

            // Validate domain models
            var userPostLogicValidationStrategy = new CreateIndividualPostLogicValidationStrategy(userAccount, passwordSalt, userClaims, userProfile, securityQuestions, securityAnswerSalts);

            userResult = userPostLogicValidationStrategy.ExecuteStrategy();

            if (userResult.Error != null)
            {
                return(new ResponseDto <RegisterRestaurantDto>
                {
                    Data = registerRestaurantDto,
                    Error = userResult.Error
                });
            }

            var createRestaurantPostLogicValdiationStrategy = new CreateRestaurantPostLogicValidationStrategy(restaurantProfile, businessHours);
            var validateResult = createRestaurantPostLogicValdiationStrategy.ExecuteStrategy();

            if (!validateResult.Data)
            {
                return(new ResponseDto <RegisterRestaurantDto>
                {
                    Data = registerRestaurantDto,
                    Error = GeneralErrorMessages.GENERAL_ERROR
                });
            }

            // Store user in database
            using (var userGateway = new UserGateway())
            {
                var createResult = userGateway.StoreRestaurantUser(userAccount, passwordSalt, userClaims, userProfile, restaurantProfile, securityQuestions, securityAnswerSalts, foodPreferences, businessHours);

                if (!createResult.Data)
                {
                    return(new ResponseDto <RegisterRestaurantDto>()
                    {
                        Data = registerRestaurantDto,
                        Error = createResult.Error
                    });
                }
            }

            return(new ResponseDto <RegisterRestaurantDto>
            {
                Data = registerRestaurantDto
            });
        }