Example #1
0
        public StoreAbstractDTO AddStore(StoreAddDTO newStoreDto)
        {
            if (!Enum.IsDefined(typeof(StoreType), newStoreDto.StoreType))
                throw new ValidateException(new ValidationResult()
                    {
                        Code = "InvalidStoreType",
                        Message = "Invalid value for store type"
                    });

            var newStore = new Store()
            {
                Name = newStoreDto.Name,
                Description = newStoreDto.Description,
                StoreType = (StoreType)newStoreDto.StoreType,
                State = StoreState.Activated
            };

            //Create store details
            var storeLocalizedDetailsService = storeLocalizedDetailsServiceFactory.
                Create(newStoreDto.StoreLocalizedDetails.CountryCodeISOA2);
            var storeLocalizedDetails = storeLocalizedDetailsService.
                CreateFrom((StoreLocalizedDetailsBaseDto)newStoreDto.StoreLocalizedDetails.Content);
            newStore.StoreLocalizedDetails = storeLocalizedDetails;

            //Create store addresses
            foreach (var addressDto in newStoreDto.Addresses)
            {
                var addressService = addressServiceFactory.Create(addressDto.CountryCodeISOA2);
                var address = addressService.CreateFrom((AddressBaseDto)addressDto.Content);
                newStore.Addresses.Add(address);
            }

            //Create store phone numbers
            foreach (var phoneNumberDto in newStoreDto.PhoneNumbers)
            {
                var phoneNumbersService = phoneNumberServiceFactory.Create(phoneNumberDto.CountryCodeISOA2);
                var phoneNumber = phoneNumbersService.CreateFrom((PhoneNumberBaseDto)phoneNumberDto.Content);
                newStore.PhoneNumbers.Add(phoneNumber);
            }

            var validation = validationFactory.Create<Store>();
            var validationResult = validation.Validate(newStore);
            if (validationResult.Any())
                throw new ValidateException(validationResult);

            storeRepository.Add(newStore);

            return newStore.ProjectedAs<StoreAbstractDTO>(typeAdapterFactory.Create());
        }