Esempio n. 1
0
 private void ValidateBuyerBalance(TraderEntity traderEntity, ShareEntity share)
 {
     if (traderEntity.Balance < share.Amount * share.Stock.PricePerUnit * share.ShareType.Multiplier)
     {
         throw new Exception("Cant make a transaction because buyer dont have enough money.");
     }
 }
Esempio n. 2
0
 private void ValidateShareExistence(TraderEntity traderEntity, int shareId)
 {
     if (this.shareTableRepository.GetById(shareId).Owner != traderEntity)
     {
         throw new Exception("Seller dont have shares with given Id.");
     }
 }
Esempio n. 3
0
        public Trade(List <Property> properties, World world) : base(properties, world)
        {
            foreach (Property property in properties)
            {
                switch (property.Name)
                {
                case "trader_hfid": Trader = world.GetHistoricalFigure(Convert.ToInt32(property.Value)); break;

                case "trader_entity_id": TraderEntity = world.GetEntity(Convert.ToInt32(property.Value)); break;

                case "source_site_id": SourceSite = world.GetSite(Convert.ToInt32(property.Value)); break;

                case "dest_site_id": DestSite = world.GetSite(Convert.ToInt32(property.Value)); break;

                case "production_zone_id": ProductionZoneId = Convert.ToInt32(property.Value); break;

                case "allotment": Allotment = Convert.ToInt32(property.Value); break;

                case "allotment_index": AllotmentIndex = Convert.ToInt32(property.Value); break;

                case "account_shift": AccountShift = Convert.ToInt32(property.Value); break;
                }
            }


            SourceSite.AddEvent(this);
            DestSite.AddEvent(this);
            Trader.AddEvent(this);
            TraderEntity.AddEvent(this);
        }
Esempio n. 4
0
 internal static Trader ToTrader(this TraderEntity traderEntity) =>
 traderEntity == null ? null : new Trader()
 {
     Id      = traderEntity.ID,
     name    = traderEntity.Card.Name,
     surname = traderEntity.Card.Surname,
     phone   = traderEntity.Card.Phone,
     money   = traderEntity.Money,
 };
Esempio n. 5
0
        public async Task <IHttpActionResult> Post(TraderEntity trader)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            db.Traders.Add(trader);
            await db.SaveChangesAsync();

            return(Created(trader));
        }
Esempio n. 6
0
 public IActionResult UpdateUser([FromBody] TraderEntity traderEntity)
 {
     try
     {
         this.service.UpdateUser(traderEntity);
     }
     catch (Exception ex)
     {
         return(BadRequest(ex.Message));
     }
     return(Ok());
 }
Esempio n. 7
0
        public void TestMappers()
        {
            var config = new MapperConfiguration(cfg => {
                cfg.CreateMap <TraderEntity, TraderDto>();
                cfg.CreateMap <AddressEntity, AddressDto>();
            });

            config.AssertConfigurationIsValid();
            var source = new TraderEntity
            {
                LegalName   = "legal name",
                TradingName = "trading name",
                Addresses   = new List <AddressEntity>
                {
                    new AddressEntity
                    {
                        Address1 = "address 1",
                        Address2 = string.Empty,
                        City     = "city",
                        Post     = "12345",
                        TraderId = 1,
                        Trader   = new TraderEntity
                        {
                            LegalName   = "legal name",
                            TradingName = "trading name",
                        }
                    }
                }
            };
            var source2 = new AddressEntity
            {
                Address1 = "address 1",
                Address2 = string.Empty,
                City     = "city",
                Post     = "12345",
                TraderId = 1,
                Trader   = new TraderEntity
                {
                    LegalName   = "legal name",
                    TradingName = "trading name",
                }
            };
            var mapper = config.CreateMapper();
            var dest   = mapper.Map <TraderEntity, TraderDto>(source);

            Assert.AreEqual("legal name", dest.LegalName);
            Assert.IsNotNull(dest.Addresses);
            var dest2 = mapper.Map <AddressEntity, AddressDto>(source2);

            Assert.AreEqual("address 1", dest2.Address1);
            Assert.AreEqual("legal name", dest2.Trader.LegalName);
        }
 public override void UpdateUser(TraderEntity traderEntity)
 {
     try
     {
         base.UpdateUser(traderEntity);
         Logger.FileLogger.Info($"Removed user with id = {traderEntity.Id}");
     }
     catch (Exception ex)
     {
         Logger.FileLogger.Error(ex);
         throw ex;
     }
 }
Esempio n. 9
0
        public override string Print(bool link = true, DwarfObject pov = null)
        {
            string eventString = GetYearTime();

            eventString += Trader.ToLink(link, pov, this);
            if (TraderEntity != null)
            {
                eventString += " of ";
                eventString += TraderEntity.ToLink(link, pov, this);
            }
            // same ranges like in "gamble" event
            var balance = AccountShift;

            if (balance >= 5000)
            {
                eventString += " made a fortune";
            }
            else if (balance >= 1000)
            {
                eventString += " did well";
            }
            else if (balance <= -1000)
            {
                eventString += " did poorly";
            }
            else if (balance <= -5000)
            {
                eventString += " lost a fortune";
            }
            else
            {
                eventString += " broke even";
            }
            eventString += " trading goods";
            if (SourceSite != null)
            {
                eventString += " from ";
                eventString += SourceSite.ToLink(link, pov, this);
            }

            if (DestSite != null)
            {
                eventString += " to ";
                eventString += DestSite.ToLink(link, pov, this);
            }

            eventString += PrintParentCollection(link, pov);
            eventString += ".";
            return(eventString);
        }
        public void ShouldAddTransaction()
        {
            //Arrange
            TraderEntity seller = new TraderEntity {
                Id = 1, Balance = 50
            };

            traderTableRepository.GetById(Arg.Is <int>(1)).Returns(seller);
            TraderEntity buyer = new TraderEntity {
                Id = 2, Balance = 500
            };

            traderTableRepository.GetById(Arg.Is <int>(2)).Returns(buyer);
            StockEntity stock = new StockEntity {
                Id = 1, PricePerUnit = 10
            };

            stockTableRepository.GetById(Arg.Is <int>(1)).Returns(stock);
            ShareEntity share = new ShareEntity
            {
                Id        = 1,
                Amount    = 10,
                Owner     = seller,
                ShareType = new ShareTypeEntity {
                    Multiplier = 2
                },
                Stock = stock
            };

            shareTableRepository.GetById(Arg.Is <int>(1)).Returns(share);
            decimal dealPrice          = share.Amount * stock.PricePerUnit * share.ShareType.Multiplier;
            var     transactionService = new TransactionService(
                shareTableRepository,
                transactionTableRepository,
                traderTableRepository,
                stockTableRepository);

            // Act
            transactionService.MakeShareTransaction(1, 2, 1);

            // Assert
            transactionTableRepository.Received(1).Add(Arg.Any <TransactionEntity>());
            shareTableRepository.Received(1).Save(share);
            traderTableRepository.Received(1).Save(buyer);
            traderTableRepository.Received(1).Save(seller);
            Assert.IsTrue(share.Owner.Id == 2);
            Assert.IsTrue(seller.Balance == 50 + dealPrice);
            Assert.IsTrue(buyer.Balance == 500 - dealPrice);
        }
        public void ShouldNotMakeTransactionIfSellerDontHaveChosenShare()
        {
            // Arrange
            int          sellerId = 1;
            int          buyerId  = 2;
            int          shareId  = 1;
            TraderEntity seller   = new TraderEntity {
                Id = 1, Balance = 50
            };

            traderTableRepository.GetById(Arg.Is <int>(1)).Returns(seller);
            TraderEntity buyer = new TraderEntity {
                Id = 2, Balance = 70
            };

            traderTableRepository.GetById(Arg.Is <int>(2)).Returns(buyer);
            StockEntity stock = new StockEntity {
                Id = 1, PricePerUnit = 10
            };

            stockTableRepository.GetById(Arg.Is <int>(1)).Returns(stock);
            ShareEntity share = new ShareEntity
            {
                Id        = 1,
                Amount    = 10,
                ShareType = new ShareTypeEntity {
                    Multiplier = 2
                },
                Stock = stock,
                Owner = buyer
            };

            shareTableRepository.GetById(Arg.Is <int>(1)).Returns(share);

            var transactionService = new TransactionService(
                shareTableRepository,
                transactionTableRepository,
                traderTableRepository,
                stockTableRepository);

            // Act
            transactionService.MakeShareTransaction(sellerId, buyerId, shareId);
        }
        public void ShouldNotMakeTransactionIfThereIsNoSeller()
        {
            // Arrange
            int          sellerId = 1;
            int          buyerId  = 2;
            TraderEntity buyer    = new TraderEntity {
                Id = 2, Balance = 70
            };

            traderTableRepository.GetById(Arg.Is <int>(2)).Returns(buyer);

            var transactionService = new TransactionService(
                shareTableRepository,
                transactionTableRepository,
                traderTableRepository,
                stockTableRepository);

            // Act
            transactionService.MakeShareTransaction(sellerId, buyerId, 1);
        }
        public void ShouldNotMakeTransactionIfBuyerDontHaveEnoughMoney()
        {
            // Arrange
            TraderEntity seller = new TraderEntity {
                Id = 1, Balance = 50
            };

            traderTableRepository.GetById(Arg.Is <int>(1)).Returns(seller);
            TraderEntity buyer = new TraderEntity {
                Id = 2, Balance = 70
            };

            traderTableRepository.GetById(Arg.Is <int>(2)).Returns(buyer);
            StockEntity stock = new StockEntity {
                Id = 1, PricePerUnit = 10
            };

            stockTableRepository.GetById(Arg.Is <int>(1)).Returns(stock);
            ShareEntity share = new ShareEntity
            {
                Id        = 1,
                Amount    = 10,
                ShareType = new ShareTypeEntity {
                    Multiplier = 2
                },
                Stock = stock
            };

            shareTableRepository.GetById(Arg.Is <int>(1)).Returns(share);

            var transactionService = new TransactionService(
                shareTableRepository,
                transactionTableRepository,
                traderTableRepository,
                stockTableRepository);

            // Act
            transactionService.MakeShareTransaction(1, 2, 1);
        }
Esempio n. 14
0
        public virtual int MakeShareTransaction(int sellerId, int buyerId, int shareId)
        {
            ValidateDifferenceBetweenBuyerAndSeller(buyerId, sellerId);
            ValidateTraderExistenceInDataSource(buyerId);
            ValidateTraderExistenceInDataSource(sellerId);

            TraderEntity seller = this.traderTableRepository.GetById(sellerId);
            TraderEntity buyer  = this.traderTableRepository.GetById(buyerId);

            ValidateShareExistence(seller, shareId);

            ShareEntity share = this.shareTableRepository.GetById(shareId);

            var shareStock = this.stockTableRepository.GetById(share.Stock.Id);

            ValidateBuyerBalance(buyer, share, shareStock);

            decimal payment = share.Amount * shareStock.PricePerUnit * share.ShareType.Multiplier;

            buyer.Balance -= payment;
            this.traderTableRepository.Save(buyer);
            share.Owner = buyer;
            this.shareTableRepository.Save(share);
            seller.Balance += payment;
            this.traderTableRepository.Save(seller);
            var transaction = new TransactionEntity()
            {
                Seller             = seller,
                Buyer              = buyer,
                Share              = share,
                TransactionPayment = payment,
                TransactionDate    = DateTime.Now
            };
            var transactionId = this.transactionTableRepository.Add(transaction);

            this.transactionTableRepository.SaveChanges();
            return(transactionId);
        }
        protected override void Seed(TradingDbContext context)
        {
            TraderEntity trader1 = new TraderEntity
            {
                Card = new CardEntity {
                    Name = "Brian", Surname = "Kelly", Phone = "+1(310)938-63-48"
                },
                Money = 5000m
            };
            TraderEntity trader2 = new TraderEntity
            {
                Card = new CardEntity {
                    Name = "Yves", Surname = "Guillemot", Phone = "+33(66)671-69-74"
                },
                Money = 5000m
            };
            TraderEntity trader3 = new TraderEntity
            {
                Card = new CardEntity {
                    Name = "Fusajiro", Surname = "Yamauchi", Phone = "+81(726)374-54-93"
                },
                Money = 5000m
            };
            TraderEntity trader4 = new TraderEntity
            {
                Card = new CardEntity {
                    Name = "Trip", Surname = "Hawkins", Phone = "+1(650)220-68-41"
                },
                Money = 5000m
            };
            TraderEntity trader5 = new TraderEntity
            {
                Card = new CardEntity {
                    Name = "Akio", Surname = "Morita", Phone = "+81(3)483-81-43"
                },
                Money = 5000m
            };

            context.Traders.Add(trader1);
            context.Traders.Add(trader2);
            context.Traders.Add(trader3);
            context.Traders.Add(trader4);
            context.Traders.Add(trader5);

            ShareEntity share1 = new ShareEntity {
                Name = "Activision Blizzard", Price = 47.99m, Owner = trader1, Quantity = 100
            };
            ShareEntity share2 = new ShareEntity {
                Name = "Activision Blizzard", Price = 47.99m, Owner = trader2, Quantity = 10
            };
            ShareEntity share3 = new ShareEntity {
                Name = "Ubisoft", Price = 72.94m, Owner = trader2, Quantity = 100
            };
            ShareEntity share4 = new ShareEntity {
                Name = "Ubisoft", Price = 72.94m, Owner = trader3, Quantity = 10
            };
            ShareEntity share5 = new ShareEntity {
                Name = "Nintendo", Price = 45.95m, Owner = trader3, Quantity = 100
            };
            ShareEntity share6 = new ShareEntity {
                Name = "Nintendo", Price = 45.95m, Owner = trader4, Quantity = 10
            };
            ShareEntity share7 = new ShareEntity {
                Name = "Electronic Arts", Price = 92.23m, Owner = trader4, Quantity = 100
            };
            ShareEntity share8 = new ShareEntity {
                Name = "Electronic Arts", Price = 92.23m, Owner = trader5, Quantity = 10
            };
            ShareEntity share9 = new ShareEntity {
                Name = "Sony Corp", Price = 56.50m, Owner = trader5, Quantity = 100
            };
            ShareEntity share10 = new ShareEntity {
                Name = "Sony Corp", Price = 56.50m, Owner = trader1, Quantity = 10
            };

            context.Shares.Add(share1);
            context.Shares.Add(share2);
            context.Shares.Add(share3);
            context.Shares.Add(share4);
            context.Shares.Add(share5);
            context.Shares.Add(share6);
            context.Shares.Add(share7);
            context.Shares.Add(share8);
            context.Shares.Add(share9);
            context.Shares.Add(share10);

            base.Seed(context);
        }
Esempio n. 16
0
        protected override void Seed(TradingAppDbContext context)
        {
            TraderEntity trader1 = new TraderEntity {
                FirstName = "Igor", LastName = "Igorev", Balance = 500, PhoneNumber = "89999999901"
            };
            TraderEntity trader2 = new TraderEntity {
                FirstName = "Vitaly", LastName = "Vitaliev", Balance = -100, PhoneNumber = "89999999902"
            };
            TraderEntity trader3 = new TraderEntity {
                FirstName = "Andrey", LastName = "Andreev", Balance = 430, PhoneNumber = "89999999903"
            };
            TraderEntity trader4 = new TraderEntity {
                FirstName = "Vladimir", LastName = "Vladimirov", Balance = 390, PhoneNumber = "89999999904"
            };
            TraderEntity trader5 = new TraderEntity {
                FirstName = "Vasiliy", LastName = "Vasiliev", Balance = 450, PhoneNumber = "89999999905"
            };
            TraderEntity trader6 = new TraderEntity {
                FirstName = "Nikolay", LastName = "Nikolaev", Balance = 0, PhoneNumber = "89999999906"
            };

            CompanyEntity mcDonalds = new CompanyEntity {
                Name = "McDonalds"
            };
            CompanyEntity kfc = new CompanyEntity {
                Name = "KFC"
            };
            CompanyEntity burgerKing = new CompanyEntity {
                Name = "Burger King"
            };

            StockEntity mcDonaldsStock = new StockEntity {
                Company = mcDonalds, PricePerUnit = 50
            };
            StockEntity kfcStock = new StockEntity {
                Company = kfc, PricePerUnit = 42
            };
            StockEntity burgerKingStock = new StockEntity {
                Company = burgerKing, PricePerUnit = 40
            };

            ShareTypeEntity normal = new ShareTypeEntity {
                Name = "Normal", Multiplier = 1M
            };
            ShareTypeEntity privelage = new ShareTypeEntity {
                Name = "Privelage", Multiplier = 1.5M
            };
            ShareTypeEntity special = new ShareTypeEntity {
                Name = "Special", Multiplier = 2.5M
            };

            ShareEntity kfcShare1 = new ShareEntity {
                Stock = kfcStock, Owner = trader1, Amount = 3, ShareType = normal
            };
            ShareEntity kfcShare2 = new ShareEntity {
                Stock = kfcStock, Owner = trader2, Amount = 2, ShareType = normal
            };
            ShareEntity kfcShare3 = new ShareEntity {
                Stock = kfcStock, Owner = trader4, Amount = 40, ShareType = special
            };

            ShareEntity mcDonaldsShare1 = new ShareEntity {
                Stock = mcDonaldsStock, Owner = trader1, Amount = 5, ShareType = privelage
            };
            ShareEntity mcDonaldsShare2 = new ShareEntity {
                Stock = mcDonaldsStock, Owner = trader3, Amount = 35, ShareType = special
            };
            ShareEntity mcDonaldsShare3 = new ShareEntity {
                Stock = mcDonaldsStock, Owner = trader6, Amount = 4, ShareType = normal
            };

            ShareEntity burgerKingShare1 = new ShareEntity {
                Stock = burgerKingStock, Owner = trader5, Amount = 25, ShareType = privelage
            };
            ShareEntity burgerKingShare2 = new ShareEntity {
                Stock = burgerKingStock, Owner = trader2, Amount = 4, ShareType = normal
            };
            ShareEntity burgerKingShare3 = new ShareEntity {
                Stock = burgerKingStock, Owner = trader1, Amount = 2, ShareType = normal
            };
            ShareEntity burgerKingShare4 = new ShareEntity {
                Stock = burgerKingStock, Owner = trader3, Amount = 6, ShareType = privelage
            };

            context.Traders.Add(trader1);
            context.Traders.Add(trader2);
            context.Traders.Add(trader3);
            context.Traders.Add(trader4);
            context.Traders.Add(trader5);
            context.Traders.Add(trader6);

            context.SaveChanges();

            context.Companies.Add(mcDonalds);
            context.Companies.Add(kfc);
            context.Companies.Add(burgerKing);

            context.SaveChanges();

            context.Stocks.Add(mcDonaldsStock);
            context.Stocks.Add(kfcStock);
            context.Stocks.Add(burgerKingStock);

            context.SaveChanges();

            context.ShareTypes.Add(normal);
            context.ShareTypes.Add(privelage);
            context.ShareTypes.Add(special);

            context.SaveChanges();

            context.Shares.Add(kfcShare1);
            context.Shares.Add(kfcShare2);
            context.Shares.Add(kfcShare3);

            context.SaveChanges();

            context.Shares.Add(mcDonaldsShare1);
            context.Shares.Add(mcDonaldsShare2);
            context.Shares.Add(mcDonaldsShare3);

            context.SaveChanges();

            context.Shares.Add(burgerKingShare1);
            context.Shares.Add(burgerKingShare2);
            context.Shares.Add(burgerKingShare3);
            context.Shares.Add(burgerKingShare4);

            context.SaveChanges();
        }