public async Task <ActionResult> Sort(DeckDetailResponse deck) { if (ModelState.IsValid) { deck = await service.Sorting(deck); } return(RedirectToAction("Index")); }
public async Task <ActionResult> Details(DeckDetailResponse deck) { if (ModelState.IsValid) { deck = await service.Mixing(deck); } return(View(deck)); }
/// <summary> /// сохранить новый порядок карт /// </summary> /// <param name="deck"></param> /// <returns></returns> private async Task SaveMixingDeck(DeckDetailResponse deck) { using (var db = new DeckContext()) { var exist = await db.Decks.FindAsync(deck.Id); if (exist != null) { exist.CardsIds = deck.CardsIds; exist.DateModify = DateTime.UtcNow; await db.SaveChangesAsync(); } } }
/// <summary> /// сортировка карт по умолчанию /// </summary> /// <param name="deck"></param> /// <returns></returns> public async Task <DeckDetailResponse> Sorting(DeckDetailResponse deck) { var tempManual = deck.Manual; var tempCount = deck.ManualCount; deck = await GetDeckDetailById(deck.Id); deck.Cards = deck.Cards.OrderBy(x => x.SuitTitle).ThenBy(x => x.ValueTitle).ToList(); deck.CardsIds = deck.Cards.Select(x => x.Id).ToList().SerializeToJson(); await SaveMixingDeck(deck); deck.Manual = tempManual; deck.ManualCount = tempCount; return(deck); }
/// <summary> /// имитация ручного перемешивания приблизительно по половине /// </summary> /// <param name="deck"></param> /// <returns></returns> private async Task MixingManual(DeckDetailResponse deck) { var tempCards = new List <CardResponse>(); var cardsIds = new JsonSerializer().Deserialize <List <long> > (new JsonTextReader (new StringReader(deck.CardsIds))); var count = cardsIds.Count; for (int i = 0; i < deck.ManualCount; i++) { var random = new Random(); var minCount = Convert.ToInt32(count * 0.4); var maxCount = Convert.ToInt32(count * 0.6); var cnt = random.Next(minCount, maxCount); tempCards = deck.Cards.GetRange(0, cnt); deck.Cards.RemoveRange(0, cnt); deck.Cards.AddRange(tempCards); } deck.CardsIds = deck.Cards.Select(x => x.Id).ToList().SerializeToJson(); }
/// <summary> /// перемешать карты /// </summary> /// <param name="deck"></param> /// <returns></returns> public async Task <DeckDetailResponse> Mixing(DeckDetailResponse deck) { var tempManual = deck.Manual; var tempCount = deck.ManualCount; deck = await GetDeckDetailById(deck.Id); if (tempManual) { await MixingManual(deck); } else { await MixingAuto(deck); } await SaveMixingDeck(deck); deck.Manual = tempManual; deck.ManualCount = tempCount; return(deck); }
/// <summary> /// случайное перемешивание /// </summary> /// <param name="deck"></param> /// <returns></returns> private async Task MixingAuto(DeckDetailResponse deck) { deck.Cards = deck.Cards.OrderBy(a => Guid.NewGuid()).ToList(); deck.CardsIds = deck.Cards.Select(x => x.Id).ToList().SerializeToJson(); }
public async Task <DeckDetailResponse> Sort(DeckDetailResponse deck) { return(await _deckService.Sorting(deck)); }
public async Task <DeckDetailResponse> Details(DeckDetailResponse deck) { return(await _deckService.Mixing(deck)); }