public async Task <ActionResult <ResultFormat> > GetSecure([FromQuery] TransactionsQuery query)
 {
     return(new ResultFormat()
     {
         Results = (await _Repository.GetTransactions(query)).ToList()
     });
 }
Exemplo n.º 2
0
        public async Task SpecificOrderByAmountDescTransactions()
        {
            var query = new TransactionsQuery();

            query.OrderBy = "amount_desc";
            var transactions = await GetTransactions(query);

            Assert.True(transactions.First().AmountInCent == 267330);
        }
Exemplo n.º 3
0
        public async Task SpecificOrderByDateDescTransactions()
        {
            var query = new TransactionsQuery();

            query.OrderBy = "date_desc";
            var transactions = await GetTransactions(query);

            Assert.True(transactions.First().AcquirerAuthorizationDateTime == DateTime.Parse("2018-03-01T01:03:19"));
        }
Exemplo n.º 4
0
        public async Task SpecificOrderByDateAscTransactions()
        {
            var query = new TransactionsQuery();

            query.OrderBy = "date_asc";
            var transactions = await GetTransactions(query);

            Assert.True(transactions.First().AcquirerAuthorizationDateTime == DateTime.Parse("2018-02-28T22:43:56"));
        }
Exemplo n.º 5
0
        public async Task SpecificPageTransactions()
        {
            var query = new TransactionsQuery();

            query.Page = 2;
            var transactions = await GetTransactions(query);

            Assert.Equal(20, transactions.Count);
        }
Exemplo n.º 6
0
        public async Task SpecificStatusTransactions()
        {
            var query = new TransactionsQuery();

            query.Status.Add("Recusada");
            query.PageSize = 200;
            var transactions = await GetTransactions(query);

            Assert.Equal(18, transactions.Count);
        }
Exemplo n.º 7
0
        public async Task SpecificDateTransactions()
        {
            var query = new TransactionsQuery();

            query.Date.Add(DateTime.Parse("2018-03-01"));
            query.PageSize = 200;
            var transactions = await GetTransactions(query);

            Assert.Equal(113, transactions.Count);
        }
Exemplo n.º 8
0
        public async Task VisaTransactions()
        {
            var query = new TransactionsQuery();

            query.Brand.Add("Visa");
            query.PageSize = 200;
            var transactions = await GetTransactions(query);

            Assert.True(transactions.Where(e => e.CardBrandName == "Visa").Count() == transactions.Count && transactions.Count > 0);
        }
Exemplo n.º 9
0
        public async Task SpecificCnpjTransactions()
        {
            var query = new TransactionsQuery();

            query.Cnpj.Add("15593743000351");
            query.Cnpj.Add("28176030000172");
            query.PageSize = 200;
            var transactions = await GetTransactions(query);

            Assert.Equal(12, transactions.Count);
        }
Exemplo n.º 10
0
        public async Task SpecificAcquirerTransactions()
        {
            var query = new TransactionsQuery();

            query.Acquirer.Add("Stone");
            query.Acquirer.Add("Cielo");
            query.PageSize = 200;
            var transactions = await GetTransactions(query);

            Assert.Equal(131, transactions.Count);
        }
Exemplo n.º 11
0
        public async Task SpecificIdTransactions()
        {
            var query = new TransactionsQuery();

            query.Id = 20;
            var transactions = await GetTransactions(query);

            Assert.True(transactions.First().AmountInCent == 24000);
            Assert.True(transactions.First().CardBrandName == "Visa");
            Assert.True(transactions.First().AcquirerName == "Getnet");
        }
Exemplo n.º 12
0
        public async Task SpecificAmountTransactions()
        {
            var query = new TransactionsQuery();

            query.AmountMin = 1;
            query.AmountMax = 1000;
            query.PageSize  = 200;
            var transactions = await GetTransactions(query);

            Assert.Equal(29, transactions.Count);
        }
Exemplo n.º 13
0
        public async Task SpecificPeriodTransactions()
        {
            var query = new TransactionsQuery();

            query.DateMin  = DateTime.Parse("2018-03-01T00:55:36");
            query.DateMax  = DateTime.Parse("2018-03-01T01:02:38");
            query.PageSize = 200;
            var transactions = await GetTransactions(query);

            Assert.Equal(7, transactions.Count);
        }
Exemplo n.º 14
0
        public IActionResult GetTransactions(int id, int page)
        {
            var query = new TransactionsQuery().Get(_context, id, 20, page);

            return(PartialView("_TransactionsPartial", new TransactionsViewModel()
            {
                Transactions = query.Transactions,
                Id = id,
                Page = page + 1,
                HasMore = query.HasMore
            }));
        }
Exemplo n.º 15
0
        // I/O tasks are done asynchronously to improve performance when the server
        // is receiving thousands of requests per minute.
        public async Task <IEnumerable <Transaction> > GetTransactions(TransactionsQuery query)
        {
            // TransactionId is unique, so there's no need to create a complex query.
            if (query.Id != 0)
            {
                return(await _Context.Set <Transaction>().Where(e => e.TransactionId == query.Id).ToListAsync());
            }

            var queriable = _Context.Set <Transaction>()
                            .Where(e => query.Brand.Count == 0 ? true : query.Brand.Contains(e.CardBrandName))
                            .Where(e => query.Cnpj.Count == 0 ? true : query.Cnpj.Contains(e.MerchantCnpj))
                            .Where(e => query.Date.Count == 0 ? true : query.Date.Contains(e.AcquirerAuthorizationDateTime.Date))
                            .Where(e => query.Acquirer.Count == 0 ? true : query.Acquirer.Contains(e.AcquirerName))
                            .Where(e => query.Status.Count == 0 ? true : query.Status.Contains(e.Status))
                            .Where(e => query.DateMin == default(DateTime) ? true :  e.AcquirerAuthorizationDateTime >= query.DateMin)
                            .Where(e => query.DateMax == default(DateTime) ? true :  e.AcquirerAuthorizationDateTime <= query.DateMax)
                            .Where(e => query.AmountMin == 0 ? true : e.AmountInCent >= query.AmountMin)
                            .Where(e => query.AmountMax == 0 ? true : e.AmountInCent <= query.AmountMax);

            switch (query.OrderBy)
            {
            case "date_asc":
                queriable = queriable.OrderBy(t => t.AcquirerAuthorizationDateTime);
                break;

            case "date_desc":
                queriable = queriable.OrderByDescending(t => t.AcquirerAuthorizationDateTime);
                break;

            case "amount_asc":
                queriable = queriable.OrderBy(t => t.AmountInCent);
                break;

            case "amount_desc":
                queriable = queriable.OrderByDescending(t => t.AmountInCent);
                break;
            }

            return(await queriable
                   .Skip((query.Page - 1) *query.PageSize)
                   .Take(query.PageSize)
                   .ToListAsync());
        }
Exemplo n.º 16
0
        public async Task <IActionResult> Get(Paging paging, TransactionsQuery filter)
        {
            var transactions = await transactionService.GetTransactionsAsync(User.GetUserId(), paging, filter);

            if (transactions == null)
            {
                return(StatusCode(204, new ErrorResponse {
                    StatusCode = 204, Message = "Not found"
                }));
            }

            var result = mapper.Map <IEnumerable <Transaction>, IEnumerable <TransactionViewModel> >(transactions) as List <TransactionViewModel>;

            result.ForEach(x =>
            {
                x.Type          = x.Sender.Email == User.Identity.Name ? TransactionType.Credit : TransactionType.Debit;
                x.Correspondent = x.Sender.Email == User.Identity.Name ? x.Recipient : x.Sender;
            });

            return(Ok(result));
        }
Exemplo n.º 17
0
        public async Task <TransactionsResponse> GetTransactions(TransactionsQuery transactionsQuery)
        {
            if (transactionsQuery is null)
            {
                throw new ArgumentNullException(nameof(transactionsQuery));
            }
            var validator = new TransactionsQuery.Validator();

            validator.Validate(transactionsQuery);

            var flurlRequest = _flurlClient.Request(BaseApiUrlString)
                               .AppendPathSegment("api/transactions/v3/transactions")
                               .WithHeader("Accept", "application/json")
                               .SetQueryParam("matterReference", transactionsQuery.MatterReference)
                               .SetQueryParam("periodStart", transactionsQuery.PeriodStart)
                               .SetQueryParam("periodEnd", transactionsQuery.PeriodEnd)
                               .SetQueryParam("transId", transactionsQuery.TransId)
                               .SetQueryParam("userType", transactionsQuery.UserType switch
            {
                UserType.AllChildren => "allChildren",
                UserType.JustMe => "justMe",
                _ => null
            });
        public void BuildQueryString_FullyPopulatedQueryObject_AddsAllFields()
        {
            var query = new TransactionsQuery
            {
                Limit           = 10,
                FromTime        = new DateTime(2020, 03, 01),
                ToTime          = new DateTime(2020, 04, 01),
                FromTransaction = "123",
                ToTransaction   = "456",
                Authors         = new List <string> {
                    "Author1", "Author2"
                },
                Reverse = true
            };

            Assert.Equal("authors=Author1%2cAuthor2" +
                         "&fromTime=2020-03-01T00%3a00%3a00.0000000" +
                         "&toTime=2020-04-01T00%3a00%3a00.0000000" +
                         "&fromTransaction=123" +
                         "&toTransaction=456" +
                         "&limit=10" +
                         "&reverse=true" +
                         "&excludeContent=true", query.BuildQueryString());
        }
Exemplo n.º 19
0
        public JsonResult Accounts(int id, int limit, int offset)
        {
            var transactions = new TransactionsQuery().Get(_context, id, limit, offset);

            return(new JsonResult(transactions));
        }
Exemplo n.º 20
0
 public async Task <TransactionsQueryResult> GetAll(TransactionsQuery query)
 {
     return(await QueryBus.Execute <TransactionsQuery, TransactionsQueryResult>(query));
 }
Exemplo n.º 21
0
        public async Task <IEnumerable <Transaction> > GetTransactionsAsync(Guid id, Paging paging, TransactionsQuery filter)
        {
            Func <IQueryable <Transaction>, IQueryable <Transaction> > query = q =>
            {
                //Include
                q = q.IncludeData(x => x.Recipient).IncludeData(x => x.Sender);

                //OrderBy
                if (string.IsNullOrEmpty(filter.OrderBy))
                {
                    q = q.OrderByDescending(x => x.PropValue <Transaction>("datecreate"));
                }
                else if (filter.OrderBy.ToLower() == "name")
                {
                    q = q.OrderBy(x => x.SenderId == id ? x.Recipient.Name : x.Sender.Name);
                }
                else
                {
                    q = q.OrderBy(x => x.PropValue <Transaction>(filter.OrderBy));
                }


                q = q.Where(x => x.SenderId == id || x.RecipientId == id);

                //Filter
                if (filter.Mode == Mode.Sent)
                {
                    q = q.Where(x => x.SenderId == id);
                }
                else if (filter.Mode == Mode.Received)
                {
                    q = q.Where(x => x.RecipientId == id);
                }



                //this need sf/sp :(

                /*
                 * exec sp_executesql N'SELECT [x].[TransactionId], [x].[Amount], [x].[DateCreate], [x].[Message], [x].[RecipientId], [x].[SenderId], [u].[UserId], [u].[DateCreate], [u].[Email], [u].[Name], [u].[Password], [u].[Salt], [u0].[UserId], [u0].[DateCreate], [u0].[Email], [u0].[Name], [u0].[Password], [u0].[Salt]
                 * FROM [Transactions] AS [x]
                 * INNER JOIN [Users] AS [u] ON [x].[RecipientId] = [u].[UserId]
                 * INNER JOIN [Users] AS [u0] ON [x].[SenderId] = [u0].[UserId]
                 * WHERE ([x].[SenderId] = @__id_0) OR ([x].[RecipientId] = @__id_1)',N'@__id_0 uniqueidentifier,@__id_1 uniqueidentifier',@__id_0='0505AB75-941B-E711-9687-BCEE7B5B2BE5',@__id_1='0505AB75-941B-E711-9687-BCEE7B5B2BE5'
                 * go
                 */
                if (!string.IsNullOrEmpty(filter.Party))
                {
                    q = q.Where(x => x.Recipient.Name.ToLower().Contains(filter.Party.ToLower()) || x.Sender.Name.ToLower().Contains(filter.Party.ToLower()));
                }

                //very very low performance
                if (!string.IsNullOrEmpty(filter.Search))
                {
                    decimal? value = decimal.TryParse(filter.Search, out decimal tmp) ? tmp : (decimal?)null;
                    DateTime?date  = DateTime.TryParse(filter.Search, out DateTime dTmp) ? dTmp : (DateTime?)null;

                    if (value.HasValue)
                    {
                        q = q.Where(x => x.Amount == value.Value);
                    }
                    else if (date.HasValue)
                    {
                        q = q.Where(x => x.DateCreate.CompareTo(date.Value) == 0);
                    }
                    else
                    {
                        q = q.Where(x => x.Recipient.Name.ToLower().Contains(filter.Search.ToLower()) || x.Sender.Name.ToLower().Contains(filter.Search.ToLower()));
                    }
                }

                //Paging
                q = q.Skip(paging.Skip).Take(paging.Take);

                return(q);
            };

            return(await transactionRepository.GetAsync(query));
        }
Exemplo n.º 22
0
 public IEnumerable <Transaction> GetTransactions(Guid id, Paging paging, TransactionsQuery filter)
 {
     throw new NotImplementedException();
 }
        public void BuildQueryString_EmptyQueryObject_AddsDefaultFieldsOnly()
        {
            var query = new TransactionsQuery();

            Assert.Equal("reverse=false&excludeContent=true", query.BuildQueryString());
        }
        public IEnumerable <TransactionDTO> Execute(TransactionsQuery context)
        {
            var entities = _unitOfWork.TransactionRepository.GetAllTransactionsWithLedger().ToList();

            return(Mapper.Map <IEnumerable <Transaction>, IEnumerable <TransactionDTO> >(entities));
        }
Exemplo n.º 25
0
 private async Task <List <Transaction> > GetTransactions(TransactionsQuery query)
 {
     return((await _Repository.GetTransactions(query)).ToList());
 }