public CreateRestaurantPreLogicValidationStrategy(RegisterRestaurantDto registerRestaurantDto) { _registerRestaurantDto = registerRestaurantDto; _businessHourDtoValidator = new BusinessHourDtoValidator(); _businessHourValidator = new BusinessHourValidator(); _restaurantDetailValidator = new RestaurantDetailValidator(); }
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()); } }
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()); } }
/// <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 }); }
/// <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 }); }
/// <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 }); }