コード例 #1
0
        public async Task <WriterResult <bool> > CreateTradePair(string userId, CreateTradePairModel model)
        {
            using (var context = DataContextFactory.CreateContext())
            {
                var existing = await context.TradePair.Where(t => (t.CurrencyId1 == model.CurrencyId1 && t.CurrencyId2 == model.CurrencyId2) || (t.CurrencyId1 == model.CurrencyId2 && t.CurrencyId2 == model.CurrencyId1)).ToListNoLockAsync();

                if (existing.Any())
                {
                    return(WriterResult <bool> .ErrorResult("{0} already exists", existing.Any(x => x.CurrencyId1 == model.CurrencyId1)? "TradePair" : "Inverse TradePair"));
                }

                var currency = await context.Currency.Where(x => x.Id == model.CurrencyId1).FirstOrDefaultNoLockAsync();

                if (currency == null)
                {
                    return(WriterResult <bool> .ErrorResult("Currency '{0}' not found", model.CurrencyId1));
                }

                var baseCurrency = await context.Currency.Where(x => x.Id == model.CurrencyId2).FirstOrDefaultNoLockAsync();

                if (baseCurrency == null)
                {
                    return(WriterResult <bool> .ErrorResult("Currency '{0}' not found", model.CurrencyId2));
                }

                var entity = new Entity.TradePair
                {
                    CurrencyId1 = model.CurrencyId1,
                    CurrencyId2 = model.CurrencyId2,
                    Status      = model.Status,
                    Name        = $"{currency.Symbol}_{baseCurrency.Symbol}"
                };

                context.TradePair.Add(entity);
                await context.SaveChangesAsync();

                return(WriterResult <bool> .SuccessResult());
            }
        }
コード例 #2
0
        public async Task <IWriterResult> CreateTradePair(string adminUserId, CreateTradePairModel model)
        {
            using (var context = ExchangeDataContextFactory.CreateContext())
            {
                if (!model.CurrencyId1.HasValue || !model.CurrencyId2.HasValue || model.CurrencyId1 == model.CurrencyId2)
                {
                    return(new WriterResult(false, $"Retarded TradePair warning."));
                }

                var currency1 = await context.Currency
                                .Where(x => x.Id == model.CurrencyId1.Value)
                                .FirstOrDefaultNoLockAsync().ConfigureAwait(false);

                if (currency1 == null)
                {
                    return(new WriterResult(false, $"Currency1 {model.CurrencyId1.Value} not found"));
                }

                var currency2 = await context.Currency
                                .Where(x => x.Id == model.CurrencyId2.Value)
                                .FirstOrDefaultNoLockAsync().ConfigureAwait(false);

                if (currency2 == null)
                {
                    return(new WriterResult(false, $"Currency2 {model.CurrencyId1.Value} not found"));
                }

                var tradePair = await context.TradePair
                                .Include(x => x.Currency1)
                                .Include(x => x.Currency2)
                                .Where(x => x.CurrencyId1 == model.CurrencyId1.Value && x.CurrencyId2 == model.CurrencyId2.Value)
                                .FirstOrDefaultNoLockAsync().ConfigureAwait(false);

                if (tradePair != null)
                {
                    return(new WriterResult(false,
                                            $"TradePair {tradePair.Currency1.Symbol}/{tradePair.Currency2.Symbol} already exists."));
                }

                tradePair = await context.TradePair
                            .Include(x => x.Currency1)
                            .Include(x => x.Currency2)
                            .Where(x => x.CurrencyId1 == model.CurrencyId2.Value && x.CurrencyId2 == model.CurrencyId1.Value)
                            .FirstOrDefaultNoLockAsync().ConfigureAwait(false);

                if (tradePair != null)
                {
                    return(new WriterResult(false,
                                            $"Inverse TradePair {tradePair.Currency1.Symbol}/{tradePair.Currency2.Symbol} already exists."));
                }

                var newTradePair = new Entity.TradePair
                {
                    CurrencyId1   = currency1.Id,
                    CurrencyId2   = currency2.Id,
                    Status        = model.Status ?? Enums.TradePairStatus.OK,
                    StatusMessage = model.StatusMessage,
                    LastTrade     = 0,
                    Change        = 0,
                };
                context.TradePair.Add(newTradePair);

                using (var dataContext = DataContextFactory.CreateContext())
                {
                    dataContext.LogActivity(adminUserId, $"Creating new Trade Pair: {newTradePair.Currency1.Symbol}_{newTradePair.Currency2.Symbol}");
                    await dataContext.SaveChangesAsync().ConfigureAwait(false);
                }

                await context.SaveChangesAsync().ConfigureAwait(false);

                await CacheService.InvalidateAsync(CacheKey.AllTradePairs(), CacheKey.TradePairs()).ConfigureAwait(false);

                return(new WriterResult(true, $"Successfully created new tradepair {currency1.Symbol}/{currency2.Symbol}."));
            }
        }
コード例 #3
0
        public async Task <AuditTradePairResult> AuditUserTradePair(IDataContext context, string userId, Entity.TradePair tradepair)
        {
            var result = await AuditUserCurrency(context, userId, tradepair.CurrencyId1);

            var baseResult = await AuditUserCurrency(context, userId, tradepair.CurrencyId2);

            if (!result.Success || !baseResult.Success)
            {
                return(new AuditTradePairResult(false));
            }

            return(new AuditTradePairResult
            {
                Success = true,
                Currency = result,
                BaseCurrency = baseResult
            });
        }