Exemple #1
0
        public async Task <Result <TickFormulaErrorCodes> > UpdateAsync(ITickFormula model)
        {
            var entity = TickFormulaEntity.Create(model);

            using (var context = _contextFactory.CreateDataContext())
            {
                context.TickFormulas.Update(entity);

                try
                {
                    await context.SaveChangesAsync();

                    return(new Result <TickFormulaErrorCodes>());
                }
                catch (DbUpdateConcurrencyException e)
                {
                    if (e.Message.Contains(DoesNotExistException))
                    {
                        return(new Result <TickFormulaErrorCodes>(TickFormulaErrorCodes.TickFormulaDoesNotExist));
                    }

                    throw;
                }
            }
        }
        public async Task <Result <TickFormulaErrorCodes> > UpdateAsync(ITickFormula model, string username,
                                                                        string correlationId)
        {
            var currentSettings = await _tickFormulaRepository.GetByIdAsync(model.Id);

            if (currentSettings == null)
            {
                return(new Result <TickFormulaErrorCodes>(TickFormulaErrorCodes.TickFormulaDoesNotExist));
            }

            SetDefaultLadderAndTicksIfNeeded(model);

            var validationResult = ValidateLaddersAndTicks(model);

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

            var updateResult = await _tickFormulaRepository.UpdateAsync(model);

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

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

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

            return(new Result <TickFormulaErrorCodes>());
        }
Exemple #3
0
        public async Task <Result <TickFormulaErrorCodes> > AddAsync(ITickFormula model)
        {
            var entity = TickFormulaEntity.Create(model);

            using (var context = _contextFactory.CreateDataContext())
            {
                context.TickFormulas.Add(entity);

                try
                {
                    await context.SaveChangesAsync();

                    return(new Result <TickFormulaErrorCodes>());
                }
                catch (DbUpdateException e)
                {
                    if (e.InnerException is SqlException sqlException && sqlException.Number == MsSqlErrorCodes.PrimaryKeyConstraintViolation)
                    {
                        return(new Result <TickFormulaErrorCodes>(TickFormulaErrorCodes.AlreadyExist));
                    }

                    throw;
                }
            }
        }
        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>());
        }
Exemple #5
0
 public static void SetAssetFieldsFromTickFormula(this Asset asset, ITickFormula tickFormula)
 {
     asset.TickFormulaName         = tickFormula.Id;
     asset.TickFormulaDetails.Name = tickFormula.Id;
     asset.TickFormulaDetails.TickFormulaParameters.Ladders = tickFormula.PdlLadders;
     asset.TickFormulaDetails.TickFormulaParameters.Values  = tickFormula.PdlTicks;
 }
 public static TickFormulaEntity Create(ITickFormula model)
 {
     return(new TickFormulaEntity
     {
         Id = model.Id,
         PdlLadders = model.PdlLadders,
         PdlTicks = model.PdlTicks,
     });
 }
        private void SetDefaultLadderAndTicksIfNeeded(ITickFormula model)
        {
            if (model.PdlTicks != null && model.PdlTicks.Any() ||
                model.PdlLadders != null && model.PdlLadders.Any())
            {
                return;
            }

            model.PdlTicks = new List <decimal> {
                0.01M
            };
            model.PdlLadders = new List <decimal> {
                0
            };
        }
        private Result <TickFormulaErrorCodes> ValidateLaddersAndTicks(ITickFormula model)
        {
            if (model.PdlLadders.Count != model.PdlTicks.Count)
            {
                return(new Result <TickFormulaErrorCodes>(TickFormulaErrorCodes.PdlLaddersAndTicksMustHaveEqualLengths));
            }

            if (model.PdlLadders.Any(x => x < 0))
            {
                return(new Result <TickFormulaErrorCodes>(TickFormulaErrorCodes
                                                          .PdlLaddersValuesMustBeGreaterOrEqualToZero));
            }

            if (model.PdlTicks.Any(x => x <= 0))
            {
                return(new Result <TickFormulaErrorCodes>(TickFormulaErrorCodes.PdlTicksValuesMustBeGreaterThanZero));
            }

            if (model.PdlLadders[0] != 0)
            {
                return(new Result <TickFormulaErrorCodes>(TickFormulaErrorCodes.PdlLaddersMustStartFromZero));
            }

            if (!model.PdlLadders.IsAscendingSortedWithNoDuplicates())
            {
                return(new Result <TickFormulaErrorCodes>(TickFormulaErrorCodes
                                                          .PdlLaddersMustBeInAscendingOrderWithoutDuplicates));
            }

            if (!model.PdlTicks.IsAscendingSorted())
            {
                return(new Result <TickFormulaErrorCodes>(TickFormulaErrorCodes.PdlTicksMustBeInAscendingOrder));
            }

            return(new Result <TickFormulaErrorCodes>());
        }