示例#1
0
 private async Task RemoveCanceledOfferFromOfferTransaction(OfferStatusRequest offer)
 {
     if (offer.SendItem)
     {
         await _offerService.RemoveCanceledWithdrawalSteamOffer(offer);
     }
 }
示例#2
0
 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);
 }
示例#3
0
 public override Task <OfferStatusResponse> OfferStatusChanged(OfferStatusRequest request, ServerCallContext context)
 {
     OnOfferStatusChanged?.Invoke(this, request);
     return(Task.FromResult(new OfferStatusResponse
     {
         ItIsHandled = true
     }));
 }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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));
        }
示例#7
0
        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);
            }
        }
示例#8
0
        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);
            }
        }
示例#9
0
        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);
                }
            }
        }
示例#10
0
        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);
            }
        }
示例#11
0
        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);
            }
        }
示例#12
0
        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>());
        }
示例#13
0
        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 = ""
                }
            }));
        }
示例#14
0
        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);
        }
示例#15
0
 public async Task SendOfferStatusToUser(OfferStatusRequest status, string steamId)
 {
     await SendToUser(status, steamId, "onOfferStatus");
 }