private async Task RemoveCanceledOfferFromOfferTransaction(OfferStatusRequest offer) { if (offer.SendItem) { await _offerService.RemoveCanceledWithdrawalSteamOffer(offer); } }
public async Task SendDeposit() { var userSteamId = User.GetSteamId(); var request = new OfferStatusRequest { StatusCode = 5, SteamId = userSteamId, OfferSend = new OfferStatusOffer { SteamOffer = new SteamOffer { ConfirmationMethod = 0, Id = "id", IsOurOffer = true, ItemsToReceive = { new Item { Amount = 1, AppId = 730, AssetId = "assetid", IconUrlLarge = "img url", MarketHashName = "marketHashName", } } } }, }; await _steamHubConnections.SendOfferStatusToUser(request, userSteamId); }
public override Task <OfferStatusResponse> OfferStatusChanged(OfferStatusRequest request, ServerCallContext context) { OnOfferStatusChanged?.Invoke(this, request); return(Task.FromResult(new OfferStatusResponse { ItIsHandled = true })); }
public async Task RemoveCanceledWithdrawalSteamOffer(OfferStatusRequest request) { var offerTransaction = await _offerRepoService.FindAsync(request.OfferSend.SteamOffer.Id); await _itemInOfferTransactionRepoService.Remove(offerTransaction.Id); await _offerRepoService.Remove(offerTransaction.Id); }
public async Task WithdrawalSteamOffer(OfferStatusRequest request) { var offer = await CreateOfferData(request, false); await UpdateItemsTable(null, offer.Items, false); var transOffer = await _offerRepoService.FindAsync(request.OfferSend.SteamOffer.Id); await _offerRepoService.AddAcceptedTimesptampToOffer(DateTime.Now, transOffer.Id); }
private async Task <OfferData> CreateOfferData(OfferStatusRequest request, bool isDeposit) { var bot = await _botRepoService.FindAsync(request.Bot.SteamId); var owner = await _userRepoService.FindAsync(request.SteamId); var itemsInOfferRequest = isDeposit ? request.OfferSend.SteamOffer.ItemsToReceive : request.OfferSend.SteamOffer.ItemsToGive; return(await CreateTransactionOfferAsync(itemsInOfferRequest.ToList(), bot, owner, isDeposit)); }
private void FixSteamItemsBadNaming(OfferStatusRequest offer) { //Here we are fixing items beacuse steam is a SHITTY API. //Boots (Punk) ska göras om till Punk Boots if (offer.DataCase != OfferStatusRequest.DataOneofCase.Error) { RenameItems(offer.OfferSend.SteamOffer.ItemsToGive); RenameItems(offer.OfferSend.SteamOffer.ItemsToReceive); } }
private async Task HandleWithdrawal(OfferStatusRequest offer) { await UpdateUserDataAsync(offer); try { await _offerService.WithdrawalSteamOffer(offer); } catch (SteamMarketNameFuckupException e) { e.Data.Add("steamId", offer.SteamId); _logger.Critical(e); await _steamHubConnections.SendErrorMessageRelatedToOurApi("Internal error processing offer, please try again later!", offer.SteamId); } }
public async Task DepositSteamOfferAsync(OfferStatusRequest request) { var offer = await CreateOfferData(request, true); offer.OfferTransactions.SteamOfferId = request.OfferSend.SteamOffer.Id; using (var transaction = _transactionFactory.BeginTransaction()) { try { await UpdateItemsTable(transaction, offer.Items, true); await InsertTransactionOfferAndItemsInTransactionOffer(transaction, offer.OfferTransactions, offer.ItemsInOffer); } catch (CantCompleteTransaction e) { transaction.Rollback(); throw new CantCompleteSteamDeposit("Error, can't complete transaction and therefore the deposit", e); } } }
private async Task HandleDeposit(OfferStatusRequest offer) { await UpdateUserDataAsync(offer); try { await _offerService.DepositSteamOfferAsync(offer); } catch (CantCompleteSteamDeposit e) { _logger.Error(offer.SteamId, null, e, new Dictionary <string, object> { { "Offer", offer } }); await _steamHubConnections.SendErrorMessageRelatedToOurApi("Internal error processing offer, please try again later!", offer.SteamId); } catch (SteamMarketNameFuckupException e) { e.Data.Add("steamId", offer.SteamId); _logger.Critical(e); await _steamHubConnections.SendErrorMessageRelatedToOurApi("Internal error processing offer, please try again later!", offer.SteamId); } }
private async Task UpdateUserDataAsync(OfferStatusRequest offer) { try { var userTask = _userService.FindAsync(offer.SteamId); var steamPlayerTask = _steamServiceClient.GetPlayerInfoAsync(new GetPlayerInfoRequest { SteamId = offer.SteamId }); await Task.WhenAll(userTask, steamPlayerTask); if (steamPlayerTask.Result.DataCase == GetPlayerInfoResponse.DataOneofCase.Error) { throw new BadResponseException(steamPlayerTask.Result.Error.Message); } var playerInfo = steamPlayerTask.Result.PlayerInfo; var newUserData = new DatabaseModel.User ( playerInfo.SteamId, playerInfo.PersonaName, playerInfo.Avatar, userTask.Result.TradeLink, userTask.Result.Created, DateTime.Now, userTask.Result.SuspendedFromQuote, userTask.Result.Quote ); await _userService.UpdateUserInfoIfNeeded(newUserData, userTask.Result); } catch (System.Exception e) { e.Data.Add("Offer", offer); _logger.Error(offer.SteamId, "OfferManager", e); } }
public OfferTransactionServiceTest() { var fakedItemDescriptionRepoService = A.Fake <IItemDescriptionRepoService>(); var fakedTransactionFactory = A.Fake <ITransactionFactory>(); var fakedRepoServiceFactory = A.Fake <IRepoServiceFactory>(); _fakedItemInOfferTransactionRepoService = A.Fake <IItemInOfferTransactionRepoService>(); _fakedOfferTranascrionRepoService = A.Fake <IOfferTranascrionRepoService>(); _fakedUserRepoService = A.Fake <IUserRepoService>(); _fakedBotRepoService = A.Fake <IBotRepoService>(); _fakedItemRepoService = A.Fake <IItemRepoService>(); _fakedTransactionWrapper = A.Fake <ITransactionWrapper>(); A.CallTo(() => fakedRepoServiceFactory.ItemInOfferTransactionRepoService).Returns(_fakedItemInOfferTransactionRepoService); A.CallTo(() => fakedRepoServiceFactory.OfferTranascrionRepoService).Returns(_fakedOfferTranascrionRepoService); A.CallTo(() => fakedRepoServiceFactory.UserRepoService).Returns(_fakedUserRepoService); A.CallTo(() => fakedRepoServiceFactory.BotRepoService).Returns(_fakedBotRepoService); A.CallTo(() => fakedRepoServiceFactory.ItemDescriptionRepoService).Returns(fakedItemDescriptionRepoService); A.CallTo(() => fakedRepoServiceFactory.ItemRepoService).Returns(_fakedItemRepoService); A.CallTo(() => fakedTransactionFactory.BeginTransaction()).Returns(_fakedTransactionWrapper); _offerMinmalInfo = new OfferStatusRequest { Bot = new Bot { Username = "******", SteamId = "botSteamId" }, SteamId = "userSteamId", StatusCode = int.MinValue, StatusMessage = "", OfferSend = new OfferStatusOffer { SteamOffer = new SteamOffer { ItemsToGive = { new Item { AppId = 730, ContextId = "2", AssetId = "1", MarketHashName = "SomeWeapon1" }, new Item { AppId = 730, ContextId = "2", AssetId = "2", MarketHashName = "SomeWeapon1" }, new Item { AppId = 730, ContextId = "2", AssetId = "3", MarketHashName = "SomeWeapon2" }, new Item { AppId = 730, ContextId = "2", AssetId = "4", MarketHashName = "SomeWeapon3" }, new Item { AppId = 730, ContextId = "2", AssetId = "5", MarketHashName = "SomeWeapon4" }, new Item { AppId = 730, ContextId = "2", AssetId = "6", MarketHashName = "SomeWeapon2" }, }, ItemsToReceive = { new Item { AppId = 730, ContextId = "2", AssetId = "11", MarketHashName = "SomeWeapon1" }, new Item { AppId = 730, ContextId = "2", AssetId = "12", MarketHashName = "SomeWeapon1" }, new Item { AppId = 730, ContextId = "2", AssetId = "13", MarketHashName = "SomeWeapon2" }, new Item { AppId = 730, ContextId = "2", AssetId = "14", MarketHashName = "SomeWeapon3" }, new Item { AppId = 730, ContextId = "2", AssetId = "15", MarketHashName = "SomeWeapon4" }, new Item { AppId = 730, ContextId = "2", AssetId = "16", MarketHashName = "SomeWeapon2" }, }, } } }; var someWeapon1 = new DatabaseModel.ItemDescription("SomeWeapon1", new decimal(11.22), "720", "2", "imgUrl", true, 1); var someWeapon2 = new DatabaseModel.ItemDescription("SomeWeapon2", new decimal(45.5), "720", "2", "imgUrl", true, 2); var someWeapon3 = new DatabaseModel.ItemDescription("SomeWeapon3", new decimal(78.00), "720", "2", "imgUrl", true, 3); var someWeapon4 = new DatabaseModel.ItemDescription("SomeWeapon4", new decimal(5.47), "720", "2", "imgUrl", true, 4); A.CallTo(() => fakedItemDescriptionRepoService.FindAsync("SomeWeapon1")).Returns(someWeapon1); A.CallTo(() => fakedItemDescriptionRepoService.FindAsync("SomeWeapon2")).Returns(someWeapon2); A.CallTo(() => fakedItemDescriptionRepoService.FindAsync("SomeWeapon3")).Returns(someWeapon3); A.CallTo(() => fakedItemDescriptionRepoService.FindAsync("SomeWeapon4")).Returns(someWeapon4); A.CallTo(() => fakedItemDescriptionRepoService.FindAsync(A <List <string> > ._)).Returns(new List <DatabaseModel.ItemDescription> { someWeapon1, someWeapon2, someWeapon3, someWeapon4, }); _offerService = new OfferService(fakedRepoServiceFactory, fakedTransactionFactory, A.Dummy <ILogServiceFactory>()); }
public OfferManagerTest() { _fakedSteamHubConnection = A.Fake <ISteamHubConnections>(); _fakedOfferService = A.Fake <IOfferService>(); _fakedGrpcServiceFactory = A.Fake <IGrpcServiceFactory>(); _fakedUserService = A.Fake <IUserService>(); _loggerDummy = A.Dummy <ILogServiceFactory>(); _fakedSteamServiceClient = A.Fake <ISteamServiceClientWrapper>(); _fakedRepoServiceFactory = A.Fake <IRepoServiceFactory>(); _fakedRakeItemRepo = A.Fake <IRakeItemRepoService>(); A.CallTo(() => _fakedRepoServiceFactory.RakeItemRepoService).Returns(_fakedRakeItemRepo); _offerMinmalInfo = new OfferStatusRequest { Bot = new Bot { Username = "******", SteamId = "botSteamId" }, SteamId = "user Steamid", StatusCode = int.MinValue, StatusMessage = "", OfferSend = new OfferStatusOffer { SteamOffer = new SteamOffer { ItemsToGive = { new Item { AppId = 730, ContextId = "2", AssetId = "1" }, new Item { AppId = 730, ContextId = "2", AssetId = "2" }, new Item { AppId = 730, ContextId = "2", AssetId = "3" }, new Item { AppId = 730, ContextId = "2", AssetId = "4" }, new Item { AppId = 730, ContextId = "2", AssetId = "5" }, new Item { AppId = 730, ContextId = "2", AssetId = "6" }, }, ItemsToReceive = { new Item { AppId = 730, ContextId = "2", AssetId = "11" }, new Item { AppId = 730, ContextId = "2", AssetId = "12" }, new Item { AppId = 730, ContextId = "2", AssetId = "13" }, new Item { AppId = 730, ContextId = "2", AssetId = "14" }, new Item { AppId = 730, ContextId = "2", AssetId = "15" }, new Item { AppId = 730, ContextId = "2", AssetId = "16" }, }, } } }; var userFindRes = Task.FromResult(new DatabaseModel.User(_offerMinmalInfo.SteamId, null, null, null, DateTime.Today, DateTime.Today, false)); A.CallTo(() => _fakedUserService.FindAsync(_offerMinmalInfo.SteamId)).Returns(userFindRes); A.CallTo(() => _fakedGrpcServiceFactory.GetSteamServiceClient(A <ISteamInventoryCacheManager> ._)).Returns(_fakedSteamServiceClient); A.CallTo(() => _fakedSteamServiceClient.GetPlayerInfoAsync(new GetPlayerInfoRequest { SteamId = _offerMinmalInfo.SteamId })).Returns(Task.FromResult(new GetPlayerInfoResponse { PlayerInfo = new PlayerInfo { Avatar = "", PersonaName = "" } })); }
public async Task HandleOffer(OfferStatusRequest offer) { try { if (offer.DataCase == OfferStatusRequest.DataOneofCase.OfferSend && offer.OfferSend.SteamOffer.Message == "sendSellRakeOffer") { var itemsSuccessfulySentToBot = offer.OfferSend.SteamOffer.ItemsToGive; var assetIds = itemsSuccessfulySentToBot.Select(item => item.AssetId).ToList(); await _rakeItemRepoService.SetAsSold(assetIds); return; } } catch (System.Exception e) { _logger.Error(offer.SteamId, null, e, new Dictionary <string, object> { { "Offer", offer } }); return; } if (offer.DataCase == OfferStatusRequest.DataOneofCase.Error) { await _steamHubConnections.SendErrorMessageRelatedToOurApi("Internal error processing offer, please try again later!", offer.SteamId); return; } FixSteamItemsBadNaming(offer); switch (offer.StatusCode) { case 5: await HandleDeposit(offer); break; case 6: await HandleWithdrawal(offer); break; case 14: case 16: case 19: case 20: await RemoveCanceledOfferFromOfferTransaction(offer); break; } var request = new OfferStatusRequest { StatusCode = offer.StatusCode, SteamId = offer.SteamId, OfferSend = offer.OfferSend }; await _steamHubConnections.SendOfferStatusToUser(request, offer.SteamId); }
public async Task SendOfferStatusToUser(OfferStatusRequest status, string steamId) { await SendToUser(status, steamId, "onOfferStatus"); }