Ejemplo n.º 1
0
        public ModelStateDictionary ValidatePositionFilterModel(PositionFilterDomainModel filterModel)
        {
            var errors = new ModelStateDictionary();

            if (filterModel.Page < 1)
            {
                errors.AddModelError("Page", "The page number cannot be less than one.");
            }

            if (filterModel.PageSize < 1)
            {
                errors.AddModelError("PageSize", "The page size cannot be less than one.");
            }

            if (filterModel.PositionType.HasValue)
            {
                char inputPositionType = filterModel.PositionType.Value;

                var validPositionTypes = new char[] { 'L', 'S' };

                if (!validPositionTypes.Contains(inputPositionType))
                {
                    errors.AddModelError("PositionType", "The transaction type must be a valid type: L - Long, S - Short.");
                }
            }

            if (!string.IsNullOrEmpty(filterModel.OrderByField))
            {
                string inputOrderByField = filterModel.OrderByField;

                var validOrderByFields = new string[]
                {
                    "Symbol",
                    "Quantity"
                };

                if (!validOrderByFields.Select(x => x.ToLower())
                    .Contains(inputOrderByField.ToLower()))
                {
                    errors.AddModelError("OrderByField", $"The order by field must be a valid field: {string.Join(", ", validOrderByFields)}.");
                }
            }

            if (filterModel.OrderByDirection.HasValue)
            {
                char inputOrderByDirection = filterModel.OrderByDirection.Value;

                var validOrderByDirections = new char[] { 'A', 'D' };

                if (!validOrderByDirections.Contains(inputOrderByDirection))
                {
                    errors.AddModelError("OrderByDirection", "The order by direction must be a valid direction: A - Ascending, D - Descending.");
                }
            }

            return(errors);
        }
Ejemplo n.º 2
0
        public void ItWillInvalidatePositionFilterModel()
        {
            var filterModel = new PositionFilterDomainModel
            {
                Page             = -1,
                PageSize         = -25,
                PositionType     = '0',
                OrderByField     = "FakeField",
                OrderByDirection = '0'
            };

            using (var mock = AutoMock.GetLoose())
            {
                var service = mock.Create <PositionService>();

                var result = service.ValidatePositionFilterModel(filterModel);

                Assert.NotNull(result);
                Assert.Equal(5, result.Count());
                Assert.False(result.IsValid);
            }
        }
Ejemplo n.º 3
0
        public void ItWillValidatePositionFilterModel()
        {
            var filterModel = new PositionFilterDomainModel
            {
                Page             = 1,
                PageSize         = 25,
                PositionType     = 'L',
                OrderByField     = "Symbol",
                OrderByDirection = 'A'
            };

            using (var mock = AutoMock.GetLoose())
            {
                var service = mock.Create <PositionService>();

                var result = service.ValidatePositionFilterModel(filterModel);

                Assert.NotNull(result);
                Assert.Empty(result);
                Assert.True(result.IsValid);
            }
        }
        public async Task <PaginatedResult <PositionDomainModel> > GetFilteredAsync(PositionFilterDomainModel filterModel, string accessKey)
        {
            var filterEntityModel = _mapper.Map <PositionFilterEntityModel>(filterModel);

            filterEntityModel.AccessKey = accessKey;

            var parameters = CreateParametersForGetFilteredAsync(filterEntityModel);

            using var connection = _connectionFactory.NewConnection();
            await connection.OpenAsync();

            var reader = await connection.QueryMultipleAsync(
                "StoGetFilteredPositions",
                parameters,
                commandType : CommandType.StoredProcedure);

            IEnumerable <PositionEntityModel> positions = reader.Read <PositionEntityModel>().ToList();
            var totalRecordCount = reader.Read <int>().SingleOrDefault();

            return(new PaginatedResult <PositionDomainModel>(
                       results: _mapper.Map <IEnumerable <PositionDomainModel> >(positions),
                       metadata: CreatePaginationMetadata(filterEntityModel, totalRecordCount)));
        }
Ejemplo n.º 5
0
 public async Task <PaginatedResult <PositionDomainModel> > GetFilteredPositions(PositionFilterDomainModel filterModel, string accessKey)
 {
     return(await _positionsRepository.GetFilteredAsync(filterModel, accessKey));
 }