Exemple #1
0
        /// <summary>
        /// Get all transactions involving (up to) two users
        /// </summary>
        /// <param name="database"></param>
        /// <param name="a">One of the users in the transaction</param>
        /// <param name="b"></param>
        /// <returns>All transactions involving A (filtered to also involving B if specified), ordered by instant</returns>
        [ItemNotNull] public static async Task <IReadOnlyList <ITransaction> > GetAllTransactions([NotNull] this ITransactions database, ulong a, ulong?b = null)
        {
            var ab = await database.GetTransactions(fromId : a, toId : b);

            var ba = await database.GetTransactions(fromId : b, toId : a);

            return(await ab.Concat(ba).OrderBy(t => t.Instant).ToArray());
        }
Exemple #2
0
        /// <summary>
        /// Get the total balance of transactions between A and B (positive balance indicates that B owes A). If B is unspecified, get all balance involving user A and any other user
        /// </summary>
        /// <param name="database"></param>
        /// <param name="userA"></param>
        /// <param name="userB"></param>
        /// <param name="unit"></param>
        /// <returns>All non-zero balances in order of amount</returns>
        [ItemNotNull] public static async Task <IReadOnlyList <IBalance> > GetBalances([NotNull] this ITransactions database, ulong userA, ulong?userB, [CanBeNull] string unit = null)
        {
            //e.g.
            //A -> B £2
            //A -> B $3
            //B -> A £1
            //B -> A $5
            //Balance(A, B, £) = [ £1 ]
            //Balance(A, B, null) = [ £1, -$2 ]

            //Get transactions involving these two users in both directions
            var ab = await database.GetTransactions(userA, userB, unit);

            var ba = await database.GetTransactions(userB, userA, unit);

            //Convert to balances
            return(await TransactionsToBalances(userA, ab.Concat(ba)));
        }
        public async Task <IActionResult> Gettransactions([FromQuery] UrlQueryTx urlQueryTx)
        {
            if (ModelState.IsValid)
            {
                var Usertx = await _transactions.GetTransactions(int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value), urlQueryTx.Startdate.ToUniversalTime(), urlQueryTx.Enddate.ToUniversalTime(), urlQueryTx.Type, urlQueryTx.Status, urlQueryTx.PageNumber.Value, urlQueryTx.PageSize, urlQueryTx.Query);

                if (Usertx.Any())
                {
                    return(Ok(new { paginationend = false, nextpage = $"&PageNumber={urlQueryTx.PageNumber + 1}&PageSize{urlQueryTx.PageSize}", transactions = Usertx }));
                }
                else
                {
                    return(Ok(new { paginationend = true }));
                }
            }
            return(BadRequest());
        }