1- using Bogus ;
2- using MockMe . Common ;
1+ using MockMe . Common ;
32using MockMe . Model ;
43using System ;
54using System . Collections . Generic ;
@@ -14,32 +13,37 @@ public interface ITradeRepository
1413 Task < AssetTrade > SaveAsync ( AssetTrade entity ) ;
1514 Task < AssetTrade > UpdateAsync ( Guid id , AssetTrade entity ) ;
1615 Task < AssetTrade > DeleteAsync ( Guid id ) ;
17- Task < AssetTrade > GenerateAsync ( ) ;
16+ Task < AssetTrade > GenerateSingleAsync ( ) ;
1817 }
1918
2019 public class TradeRepository : ITradeRepository
2120 {
22- static List < AssetTrade > Trades ;
21+ readonly IEnumerable < CurrencyPair > _currencyPairs ;
22+ readonly IEnumerable < Asset > _assets ;
23+ readonly Random _random = new Random ( ) ;
24+ readonly List < AssetTrade > _trades ;
2325
2426 public TradeRepository ( )
2527 {
26- Trades ??= GenerateTrades ( 10 ) ;
28+ _currencyPairs = Enum . GetValues ( typeof ( CurrencyPair ) ) . Cast < CurrencyPair > ( ) ;
29+ _assets = _currencyPairs . Select ( pair => new Asset ( ( int ) pair , pair . Description ( ) ) ) ;
30+ _trades ??= GenerateTrades ( 10 ) ;
2731 }
2832
2933 public async Task < IEnumerable < AssetTrade > > GetAllAsync ( )
3034 {
31- return await Task . FromResult ( Trades ) ;
35+ return await Task . FromResult ( _trades ) ;
3236 }
3337
3438 public async Task < AssetTrade > SaveAsync ( AssetTrade entity )
3539 {
36- Trades . Add ( entity ) ;
40+ _trades . Add ( entity ) ;
3741 return await Task . FromResult ( entity ) ;
3842 }
3943
4044 public async Task < AssetTrade > UpdateAsync ( Guid id , AssetTrade entity )
4145 {
42- var item = Trades . Single ( p => p . Id == id . ToString ( ) ) ;
46+ var item = _trades . Single ( p => p . Id == id . ToString ( ) ) ;
4347
4448 item . Asset = new Asset { Id = entity . Asset . Id , Name = entity . Asset . Name } ;
4549 item . Direction = entity . Direction ;
@@ -52,32 +56,31 @@ public async Task<AssetTrade> UpdateAsync(Guid id, AssetTrade entity)
5256
5357 public async Task < AssetTrade > DeleteAsync ( Guid id )
5458 {
55- var item = Trades . Single ( o => o . Id == id . ToString ( ) ) ;
56- var entry = Trades . Remove ( item ) ;
59+ var item = _trades . Single ( o => o . Id == id . ToString ( ) ) ;
60+ var entry = _trades . Remove ( item ) ;
5761 return await Task . FromResult ( item ) ;
5862 }
5963
60- public async Task < AssetTrade > GenerateAsync ( )
64+ public async Task < AssetTrade > GenerateSingleAsync ( )
6165 {
62- var randomTrade = GenerateTrades ( 1 ) . FirstOrDefault ( ) ;
66+ var asset = _assets . ElementAt ( _random . Next ( 0 , _assets . Count ( ) ) ) ;
67+ var randomTrade = GenerateTrades ( 1 , asset ) . FirstOrDefault ( ) ;
6368 return await Task . FromResult ( randomTrade ) ;
6469 }
6570
66- List < AssetTrade > GenerateTrades ( int count )
71+ List < AssetTrade > GenerateTrades ( int count , Asset asset = null )
6772 {
68- var currencyPairs = ( ( IEnumerable < CurrencyPair > ) Enum . GetValues ( typeof ( CurrencyPair ) ) ) . ToList ( ) ;
69- var trades = new Faker < AssetTrade > ( )
70- . RuleFor ( o => o . Id , f => Guid . NewGuid ( ) . ToString ( ) )
71- . RuleFor ( o => o . Asset , f => {
72- var pair = new Faker ( ) . Random . ListItem ( ( IList < CurrencyPair > ) currencyPairs ) ;
73- return new Asset ( ( int ) pair , pair . Description ( ) ) ;
73+ var assetCount = _assets . Count ( ) ;
74+ return Enumerable . Range ( 0 , count )
75+ . Select ( i => new AssetTrade
76+ {
77+ Asset = asset ?? _assets . ElementAt ( i % _assets . Count ( ) ) , // Cycles on assets
78+ Amount = Math . Round ( _random . Next ( 100 , 100000 ) * 0.01m , 2 ) ,
79+ Expiration = _random . Next ( 1 , 1000 ) ,
80+ Payout = _random . Next ( 1 , 1000 ) ,
81+ Direction = _random . Next ( 0 , 2 )
7482 } )
75- . RuleFor ( o => o . Amount , f => decimal . Parse ( f . Random . Decimal ( 1000 ) . ToString ( "0.00" ) ) )
76- . RuleFor ( o => o . Expiration , f => f . Random . Number ( 1 , 1000 ) )
77- . RuleFor ( o => o . Payout , f => f . Random . Number ( 1 , 1000 ) )
78- . RuleFor ( o => o . Direction , f => f . Random . Number ( 0 , 1 ) )
79- . Generate ( count ) ;
80- return trades ;
83+ . ToList ( ) ;
8184 }
8285 }
8386}
0 commit comments