public async Task TestTipCornFromUnregistered() { var dbContext = TestUtils.CreateDatabase(); try { var startToUser = dbContext.TwitchQuery(_configuration["Config:TestToUserId"]).FirstOrDefault().UserWallet.Balance; var txController = new TxController(dbContext); var request = new TipRequest(); request.Columns = new string[] { }; request.To = "twitch|" + _configuration["Config:TestToUserId"]; request.From = "twitch|123123"; request.Platform = "twitch"; request.Amount = 100; var response = await txController.Tipcorn(request); var receipt = response.Value[0]; Assert.Null(receipt.Tx); Assert.Null(receipt.From); Assert.NotNull(receipt.To); var endToUser = dbContext.TwitchQuery(_configuration["Config:TestToUserId"]).FirstOrDefault().UserWallet.Balance; Assert.Equal(startToUser, endToUser); } finally { dbContext.Dispose(); } }
public static Task AddRequestAsync(TipRequest request) { var collection = GetCollection(); collection.Insert(request); collection.EnsureIndex(x => x.From); collection.EnsureIndex(x => x.To); return(Task.CompletedTask); }
private void CalculateButton_Click(object sender, EventArgs e) { double price; if(double.TryParse(_priceEditTExt.Text, out price)) { var tipRequest = new TipRequest() { Price = price, Satisfaction = Satisfaction.Excellent }; var result = _tipService.CalculateTip(tipRequest) as TipCalculationResult; if (result == null) return; _tipOutput.Text = result.Tip.ToString("0.00"); } }
public ActionResult<TipResponse> StoreTip([FromBody] TipRequest tips) { if (tips == null || tips.Numbers == null || tips.Numbers.Length != 6 || tips.Numbers.Any(n => n < 1 || n > 45) || tips.Numbers.GroupBy(n => n).Any(g => g.Count() > 1)) { return BadRequest(); } return Ok(new TipResponse { ReceiptNumber = new Random().Next(10000, 99999), ReceiptTimestamp = DateTime.UtcNow }); }
public IObservable<TipResponse> Search(double latitude, double longitude, int page, int limit) { var request = new TipRequest { Latitude = latitude, Longitude = longitude, Offset = page, Limit = limit }; var func = Observable.FromAsyncPattern<TipRequest, TipResponse>(this.BeginAsync<TipRequest, TipResponse>, this.EndAsync<TipResponse>); return func(request); }
public CreateResponse Create(TipRequest request) { try { var tip = TypeAdapter.Adapt <Tip>(request); _tipValidator.ValidateAndThrowException(tip, "Base"); _tipRepository.Add(tip); return(new CreateResponse(tip.Id)); } catch (DataAccessException) { throw new ApplicationException(); } }
async Task <TxTestResult> Tip(decimal amount, User fromUser, User toUser, bool writeOutput = true) { var dbContext = TestUtils.CreateDatabase(); try { var tipResult = new TxTestResult(); tipResult.Amount = amount; tipResult.ToUserId = toUser.UserId; tipResult.FromUserId = fromUser.UserId; var txController = new TxController(dbContext); var request = new TipRequest(); request.Columns = new string[] { }; tipResult.FromStartBalance = fromUser.UserWallet.Balance.Value; tipResult.ToStartBalance = toUser.UserWallet.Balance.Value; request.Amount = amount; request.Platform = "twitch"; request.From = "twitch|" + fromUser.UserIdentity.TwitchId; request.To = "twitch|" + toUser.UserIdentity.TwitchId; var response = (await txController.Tipcorn(request)); if (writeOutput) { using (var dbContext2 = TestUtils.CreateDatabase()) { var fromEnd = dbContext2.TwitchQuery(fromUser.UserIdentity.TwitchId).FirstOrDefault().UserWallet.Balance;//(decimal)responseData[0].From[nameof(UserWallet.Balance).ToLower()]; var toEnd = dbContext2.TwitchQuery(toUser.UserIdentity.TwitchId).FirstOrDefault().UserWallet.Balance; tipResult.FromEndBalance = fromEnd.Value; tipResult.ToEndBalance = toEnd.Value; } } tipResult.ResponseObject = response; return(tipResult); } finally { dbContext.Dispose(); } }
public SuccessResponse Update(TipRequest request) { try { var currentTip = _tipRepository.FindBy(request.Id); currentTip.ThrowExceptionIfRecordIsNull(); var tipToCopy = TypeAdapter.Adapt <Tip>(request); TypeAdapter.Adapt(tipToCopy, currentTip); _tipValidator.ValidateAndThrowException(currentTip, "Base"); _tipRepository.Update(currentTip); return(new SuccessResponse { IsSuccess = true }); } catch (DataAccessException) { throw new ApplicationException(); } }
Object ITipCalculationService.CalculateTip(TipRequest p0) { return CalculateTip(p0); }
public SuccessResponse Put(TipRequest request) { return(_tipService.Update(request)); }
public CreateResponse Post(TipRequest request) { return(_tipService.Create(request)); }
public void ShouldThrowExceptionWhenNoLocationIsSupplied() { TipRequest request = new TipRequest(); var req = request.Create(new HttpRequestProxy()); }
public async Task TestTipCornToUnregistered() { var dbContext = TestUtils.CreateDatabase(); try { var startFromUser = dbContext.TwitchQuery(_configuration["Config:TestFromUserId"]).FirstOrDefault().UserWallet.Balance; var txController = new TxController(dbContext); var request = new TipRequest(); request.Columns = new string[] { }; string toTwitchId = "123123"; request.To = "twitch|" + toTwitchId; request.From = "twitch|" + _configuration["Config:TestFromUserId"]; request.Platform = "twitch"; request.Amount = 100; var toUser = await dbContext.TwitchAsync(toTwitchId); dbContext.RemoveRange(dbContext.UnclaimedTx); TestUtils.RemoveUserIfExists(dbContext, toUser); var response = await txController.Tipcorn(request); var receipt = response.Value[0]; Assert.Null(receipt.Tx); Assert.NotNull(receipt.From); Assert.Null(receipt.To); using (var dbContext2 = TestUtils.CreateDatabase()) { var endFromUser = dbContext2.TwitchQuery(_configuration["Config:TestFromUserId"]).FirstOrDefault().UserWallet.Balance; Assert.Equal(startFromUser - request.Amount, endFromUser); dbContext2.AddUser(new UserIdentity() { Auth0Id = "temp", Auth0Nickname = "temp", TwitchId = toTwitchId }, new UserWallet()); var to = await dbContext2.TwitchAsync(toTwitchId); await TxUtils.TryClaimTx(new PlatformId() { Platform = "twitch", Id = toTwitchId }, to, dbContext2); } using (var dbContext2 = TestUtils.CreateDatabase()) { var to = await dbContext2.TwitchAsync(toTwitchId); Assert.Equal(request.Amount, to.UserWallet.Balance); var claim2 = await TxUtils.TryClaimTx(new PlatformId() { Platform = "twitch", Id = toTwitchId }, to, dbContext2);; Assert.Equal(0, claim2); } } finally { dbContext.Dispose(); } }
public async Task <ActionResult <TxReceipt[]> > Tipcorn([FromBody] TipRequest tipRequest) { if (tipRequest == null) { throw new ArgumentNullException(); } if (tipRequest.From == null) { throw new ArgumentNullException(); } if (tipRequest.To == null) { throw new ArgumentNullException(); } if (tipRequest.To == tipRequest.From) { return(StatusCode((int)HttpStatusCode.BadRequest)); } if (tipRequest.Amount <= 0) { return(StatusCode((int)HttpStatusCode.BadRequest)); } try { var processInfo = await TxUtils.ProcessRequest(tipRequest, _dbContext); var transactions = processInfo.Transactions; if (transactions != null && transactions.Length > 0) { StringBuilder sql = new StringBuilder(); if (processInfo.WriteTransactionOutput(sql)) { var receipt = transactions[0]; if (receipt.Tx != null) { var to = receipt.To.User.UserStat; var from = receipt.From.User.UserStat; var amount = tipRequest.Amount; string table = nameof(UserStat); var pk = nameof(UserStat.UserId); var fromStats = new List <ColumnValuePair>(); fromStats.Add(new ColumnValuePair(nameof(UserStat.Tip), 1)); fromStats.Add(new ColumnValuePair(nameof(UserStat.TipTotal), amount)); sql.Append(TxUtils.ModifyNumbers(table, fromStats, '+', pk, from.UserId)); var toStats = new List <ColumnValuePair>(); toStats.Add(new ColumnValuePair(nameof(UserStat.Tipped), 1)); toStats.Add(new ColumnValuePair(nameof(UserStat.TippedTotal), amount)); sql.Append(TxUtils.ModifyNumbers(table, toStats, '+', pk, to.UserId)); sql.Append(TxUtils.UpdateNumberIfTop(table, nameof(UserStat.TopTip), amount, pk, from.UserId)); sql.Append(TxUtils.UpdateNumberIfTop(table, nameof(UserStat.TopTipped), amount, pk, to.UserId)); await _dbContext.Database.ExecuteSqlRawAsync(sql.ToString()); await _dbContext.SaveAsync(IsolationLevel.RepeatableRead); } } else { if (processInfo.From != null && !processInfo.From.IsBanned && processInfo.Transactions[0].To == null) { if (processInfo.From.UserWallet.Balance >= tipRequest.Amount) { var unclaimed = new UnclaimedTx(); unclaimed.TxType = ((ITxRequest)tipRequest).TxType; unclaimed.Platform = tipRequest.Platform; unclaimed.ReceiverPlatformId = BitcornUtils.GetPlatformId(tipRequest.To).Id; unclaimed.Amount = tipRequest.Amount; unclaimed.Timestamp = DateTime.Now; unclaimed.SenderUserId = processInfo.From.UserId; unclaimed.Expiration = DateTime.Now.AddMinutes(TimeToClaimTipMinutes); unclaimed.Claimed = false; unclaimed.Refunded = false; _dbContext.UnclaimedTx.Add(unclaimed); await _dbContext.Database.ExecuteSqlRawAsync(TxUtils.ModifyNumber(nameof(UserWallet), nameof(UserWallet.Balance), tipRequest.Amount, '-', nameof(UserWallet.UserId), processInfo.From.UserId)); await _dbContext.SaveAsync(); } } } await TxUtils.AppendTxs(transactions, _dbContext, tipRequest.Columns); } return(transactions); } catch (Exception e) { await BITCORNLogger.LogError(_dbContext, e); throw e; } }