public async Task <Result <TickFormulaErrorCodes> > AddAsync(ITickFormula model, string username,
                                                                     string correlationId)
        {
            SetDefaultLadderAndTicksIfNeeded(model);

            var validationResult = ValidateLaddersAndTicks(model);

            if (validationResult.IsFailed)
            {
                return(validationResult);
            }

            var addResult = await _tickFormulaRepository.AddAsync(model);

            if (addResult.IsFailed)
            {
                return(addResult);
            }

            await _auditService.TryAudit(correlationId, username, model.Id, AuditDataType.TickFormula,
                                         model.ToJson());

            await _entityChangedSender.SendEntityCreatedEvent <ITickFormula, TickFormulaContract, TickFormulaChangedEvent>(
                model, username, correlationId);

            return(new Result <TickFormulaErrorCodes>());
        }
示例#2
0
        public async Task <Result <ProductsErrorCodes> > InsertAsync(Product product, string username,
                                                                     string correlationId)
        {
            var validationResult =
                await _addOrUpdateValidationAndEnrichment.ValidateAllAsync(product, username, correlationId);

            if (validationResult.IsFailed)
            {
                return(validationResult.ToResultWithoutValue());
            }

            product = validationResult.Value;

            var result = await _repository.InsertAsync(product);

            if (result.IsSuccess)
            {
                await _auditService.TryAudit(correlationId, username, product.ProductId, AuditDataType.Product,
                                             product.ToJson());

                await _entityChangedSender.SendEntityCreatedEvent <Product, ProductContract, ProductChangedEvent>(
                    product,
                    username, correlationId);
            }

            return(result);
        }
示例#3
0
        public async Task InsertAsync(AssetTypeWithTemplate model, string username, string correlationId)
        {
            var brokerSettingsResponse = await _brokerSettingsApi.GetByIdAsync(_brokerId);

            if (brokerSettingsResponse.ErrorCode == BrokerSettingsErrorCodesContract.BrokerSettingsDoNotExist)
            {
                throw new BrokerSettingsDoNotExistException();
            }

            await ValidateUnderlyingCategory(model.UnderlyingCategoryId);

            var regulationId = brokerSettingsResponse.BrokerSettings.RegulationId;

            await ValidateRegulatoryType(model.RegulatoryTypeId, regulationId);

            List <ClientProfileSettings> clientProfileSettings;

            //duplicate settings if we use template
            if (!string.IsNullOrEmpty(model.AssetTypeTemplateId))
            {
                var regulatoryProfileTemplateExists =
                    await _assetTypesRepository.ExistsAsync(model.AssetTypeTemplateId);

                if (!regulatoryProfileTemplateExists)
                {
                    throw new AssetTypeDoesNotExistException();
                }

                clientProfileSettings = await
                                        _clientProfileSettingsRepository.GetAllAsync(null, model.AssetTypeTemplateId);

                foreach (var clientProfileSetting in clientProfileSettings)
                {
                    clientProfileSetting.AssetTypeId = model.Id;

                    var regulatorySettings = await _regulatorySettingsApi.GetRegulatorySettingsByIdsAsync(
                        clientProfileSetting.RegulatoryProfileId, model.RegulatoryTypeId);

                    ValidateRegulatoryConstraint(regulatorySettings, clientProfileSetting);
                }
            }
            else
            {
                clientProfileSettings = new List <ClientProfileSettings>();
                var allRegulatorySettings =
                    await _regulatorySettingsApi.GetRegulatorySettingsByRegulationAsync(regulationId);

                var clientProfiles = await _clientProfilesRepository.GetAllAsync();

                foreach (var clientProfile in clientProfiles)
                {
                    var regulatorySettings = allRegulatorySettings.RegulatorySettings.Single(x =>
                                                                                             x.TypeId == model.RegulatoryTypeId && x.ProfileId == clientProfile.RegulatoryProfileId);

                    clientProfileSettings.Add(new ClientProfileSettings
                    {
                        AssetTypeId     = model.Id,
                        ClientProfileId = clientProfile.Id,
                        Margin          = regulatorySettings.MarginMinPercent,
                        IsAvailable     = regulatorySettings.IsAvailable,
                    });
                }
            }

            await _assetTypesRepository.InsertAsync(model, clientProfileSettings);

            await _auditService.TryAudit(correlationId, username, model.Id, AuditDataType.AssetType,
                                         model.ToJson());

            await _entityChangedSender.SendEntityCreatedEvent <AssetType, AssetTypeContract, AssetTypeChangedEvent>(model,
                                                                                                                    username, correlationId);

            foreach (var profileSettings in clientProfileSettings)
            {
                await _entityChangedSender
                .SendEntityCreatedEvent <ClientProfileSettings, ClientProfileSettingsContract,
                                         ClientProfileSettingsChangedEvent>(profileSettings, username, correlationId);
            }
        }