public async Task <ActionResult> Create(CreateTradePairModel model) { if (!ModelState.IsValid) { return(View("CreateTradePairModal", model)); } var result = await TradePairWriter.CreateTradePair(User.Id(), model); if (!ModelState.IsWriterResultValid(result)) { return(View("CreateTradePairModal", model)); } return(CloseModal()); }
public async Task <ActionResult> CreateTradePair(CreateTradePairModel model) { if (!ModelState.IsValid) { model.Currencies = await AdminCurrencyReader.GetCurrencies(); return(View("CreateTradePairModal", model)); } var result = await AdminTradePairWriter.CreateTradePair(User.Identity.GetUserId(), model); if (!ModelState.IsWriterResultValid(result)) { model.Currencies = await AdminCurrencyReader.GetCurrencies(); return(View("CreateTradePairModal", model)); } return(CloseModal(result)); }
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()); } }
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}.")); } }