Esempio n. 1
0
        public Guid AddBrand(AddBrandRequest addBrandRequest)
        {
            var validationResult = ValidateThatBrandCanBeAdded(addBrandRequest);

            if (!validationResult.IsValid)
            {
                throw new RegoValidationException(validationResult);
            }

            var brand = new Interface.Data.Brand
            {
                Id                     = addBrandRequest.Id ?? Guid.NewGuid(),
                LicenseeId             = addBrandRequest.Licensee,
                Licensee               = _repository.Licensees.Single(x => x.Id == addBrandRequest.Licensee),
                Code                   = addBrandRequest.Code,
                Name                   = addBrandRequest.Name,
                Email                  = addBrandRequest.Email,
                SmsNumber              = addBrandRequest.SmsNumber,
                WebsiteUrl             = Uri.EscapeUriString(addBrandRequest.WebsiteUrl),
                Type                   = addBrandRequest.Type,
                TimezoneId             = addBrandRequest.TimeZoneId,
                EnablePlayerPrefix     = addBrandRequest.EnablePlayerPrefix,
                PlayerPrefix           = addBrandRequest.PlayerPrefix,
                PlayerActivationMethod = addBrandRequest.PlayerActivationMethod,
                Status                 = BrandStatus.Inactive,
                CreatedBy              = _actorInfoProvider.Actor.UserName,
                DateCreated            = DateTimeOffset.Now.ToBrandOffset(addBrandRequest.TimeZoneId)
            };

            using (var scope = CustomTransactionScope.GetTransactionScope())
            {
                _repository.Brands.Add(brand);
                _repository.SaveChanges();

                _adminCommands.AddBrandToAdmin(_actorInfoProvider.Actor.Id, brand.Id);
                _eventBus.Publish(new BrandRegistered
                {
                    Id                     = brand.Id,
                    Code                   = brand.Code,
                    Name                   = brand.Name,
                    Email                  = brand.Email,
                    SmsNumber              = brand.SmsNumber,
                    WebsiteUrl             = brand.WebsiteUrl,
                    LicenseeId             = brand.Licensee.Id,
                    LicenseeName           = brand.Licensee.Name,
                    TimeZoneId             = brand.TimezoneId,
                    BrandType              = brand.Type,
                    Status                 = brand.Status,
                    PlayerPrefix           = brand.PlayerPrefix,
                    InternalAccountsNumber = brand.InternalAccountsNumber,
                    EventCreated           = DateTimeOffset.Now.ToBrandOffset(brand.TimezoneId),
                });
                scope.Complete();
            }

            return(brand.Id);
        }