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."); } }
private void ValidateShareExistence(TraderEntity traderEntity, int shareId) { if (this.shareTableRepository.GetById(shareId).Owner != traderEntity) { throw new Exception("Seller dont have shares with given Id."); } }
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); }
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, };
public async Task <IHttpActionResult> Post(TraderEntity trader) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } db.Traders.Add(trader); await db.SaveChangesAsync(); return(Created(trader)); }
public IActionResult UpdateUser([FromBody] TraderEntity traderEntity) { try { this.service.UpdateUser(traderEntity); } catch (Exception ex) { return(BadRequest(ex.Message)); } return(Ok()); }
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; } }
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); }
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); }
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(); }