/// <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()); }
/// <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()); }