Beispiel #1
0
        public IHttpActionResult Post([FromBody] DeckDto deck)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            User user;

            if (!TryGetUser(out user))
            {
                return(BadRequest());
            }
            var newDeck = DeckDtoToDeck(deck);

            newDeck.IsPrimaryDeck = !user.Decks.Any();
            try
            {
                ValidateDeck(newDeck);
            }
            catch (InvalidDeckException e)
            {
                return(BadRequest(e.Message));
            }

            user.Decks.Add(newDeck);
            Context.SaveChanges();
            return(Ok(newDeck.ToDto()));
        }
        public async Task <IActionResult> Join(long id = 1)
        {
            var user = await this.GetCurrentUser();

            System.Console.WriteLine($"Fetching presentation {id}");
            var presentation = await retrievePresentationToViewQuery.Fetch(id);

            long conversationId = presentation.ConversationId;

            System.Console.WriteLine($"Fetching conversation {conversationId}");
            var conversation = await conversations.GetConversation(conversationId);

            var conversationDto = new ConversationDto {
                Id               = conversation.Id,
                Topic            = conversation.Topic,
                CreatedAt        = conversation.CreatedAt,
                CreatedBy        = conversation.CreatedBy.Name,
                CurrentUserIsMod = await CurrentUserIsMod(user, conversationId),
                Schema           = currentSchema.Name
            };

            var viewModel = new DeckDto
            {
                Presentation = presentation,
                Conversation = conversationDto
            };

            return(View(viewModel));
        }
Beispiel #3
0
        private Deck DeckDtoToDeck(DeckDto deck)
        {
            Deck newDeck = new Deck
            {
                BattleKingCard = Context.Cards.Find(deck.BattleKingCard).ToDeckCard(),
                Faction        = deck.Faction,
                Cards          = deck.Cards.Select(id => Context.Cards.Find(id).ToDeckCard()).ToList()
            };

            return(newDeck);
        }
Beispiel #4
0
 public async Task <IActionResult> AddDeck([FromBody] DeckDto deck)
 {
     try
     {
         await _deckService.AddItem(GetUserName(), deck);
     }
     catch (Exception e)
     {
         return(BadRequest(e));
     }
     return(Ok());
 }
Beispiel #5
0
        public IActionResult UpdateDeck([FromBody] DeckDto deck)
        {
            try
            {
                _deckService.UpdateItem(deck);
            }
            catch (Exception e)
            {
                return(BadRequest(e));
            }

            return(Ok());
        }
Beispiel #6
0
        /// <summary>
        /// This routine essentially replaces the manual Dto mapping in the handlers.  Database storage details can be managed here.
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="value"></param>
        /// <param name="serializer"></param>
        public override void WriteJson(JsonWriter writer, Deck value, JsonSerializer serializer)
        {
            IReadOnlyList <PlayingCard> cards = value.ShowCards();
            var cardDtos = cards.Select(x => new CardDto()
            {
                Id             = x.Id.ToString(),
                Rank           = x.Template.Rank,
                Suit           = x.Template.Suit,
                CardTemplateId = string.Format(IdConventions.CardTemplateIdFormatString, x.Template.Rank.Name, x.Template.Suit.Name) // todo: reuse the existing Func
                                                                                                                                     //CardTemplateId = x.CardTemplateId
            }).ToArray();

            var deckDto = new DeckDto()
            {
                Id    = value.Id,
                Cards = cardDtos,
            };

            JObject obj   = JObject.FromObject(deckDto);
            string  debug = obj.ToString();

            obj.WriteTo(writer);
        }
Beispiel #7
0
        public IHttpActionResult Put(int userId, int deckId, [FromBody] DeckDto deck)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            User user = Context.Users.Find(userId);

            if (user == null)
            {
                return(NotFound());
            }
            Deck existingDeck = user.Decks.ElementAtOrDefault(deckId);

            if (existingDeck == null)
            {
                return(NotFound());
            }
            var newDeck = DeckDtoToDeck(deck);

            try
            {
                ValidateDeck(newDeck);
            }
            catch (InvalidDeckException e)
            {
                return(BadRequest(e.Message));
            }

            existingDeck.BattleKingCard = newDeck.BattleKingCard;
            existingDeck.Cards.Clear();
            existingDeck.Cards.AddRange(newDeck.Cards);
            existingDeck.Faction = newDeck.Faction;
            Context.SaveChanges();
            return(Ok());
        }
        public static DeckResponse FromDeckInfo(
            DeckTrackedDetails deckInfo,
            UtilManaCurve utilManaCurve,
            IMapper mapper)
        {
            var hCards = new Dictionary <bool, HashSet <string> >
            {
                { true, new HashSet <string>() },
                { false, new HashSet <string>() },
            };

            var cards = new List <(bool IsSideboard, DeckCardDto Card)>();

            foreach (var i in deckInfo.Deck.Cards.All
                     .OrderBy(i => i.Card.type.Contains("Land") ? 0 : 1)
                     .ThenBy(i => i.Card.GetSimpleType())
                     .ThenBy(i => i.Card.cmc)
                     .ThenBy(i => i.Card.name))
            {
                //if (i.Card.name.StartsWith("Treasure"))
                //    System.Diagnostics.Debugger.Break();

                var info = (
                    i.Zone == DeckCardZoneEnum.Sideboard,
                    //new DeckCardDto
                    //{
                    //    Name = i.Card.name,
                    //    ImageCardUrl = i.Card.imageCardUrl,//.images["normal"],
                    //    //ImageArtUrl = i.Card.imageArtUrl,//.images["normal"],
                    //    Rarity = i.Card.GetRarityEnum(false).ToString(),
                    //    Type = i.Card.GetSimpleType(),
                    //    Amount = i.Amount,
                    //    NbMissing =
                    //        hCards[i.IsSideboard].Contains(i.Card.name) ? 0 : (deckInfo.CardsRequired.ByCard.ContainsKey(i.Card) ?
                    //        (i.IsSideboard ? deckInfo.CardsRequired.ByCard[i.Card].NbMissingSideboard : deckInfo.CardsRequired.ByCard[i.Card].NbMissingMain) : 0),
                    //}
                    mapper.Map <DeckCardDto>(i)
                    );

                info.Item2.NbMissing =
                    hCards[i.Zone == DeckCardZoneEnum.Sideboard].Contains(i.Card.name) ? 0 : (deckInfo.CardsRequired.ByCard.ContainsKey(i.Card.name) ?
                                                                                              (i.Zone == DeckCardZoneEnum.Sideboard ? deckInfo.CardsRequired.ByCard[i.Card.name].NbMissingSideboard : deckInfo.CardsRequired.ByCard[i.Card.name].NbMissingMain) : 0);

                //if (i.Card.name.Contains("Guildgate"))
                //    System.Diagnostics.Debugger.Break();
                if (hCards[i.Zone == DeckCardZoneEnum.Sideboard].Contains(i.Card.name) == false)
                {
                    hCards[i.Zone == DeckCardZoneEnum.Sideboard].Add(i.Card.name);
                }

                cards.Add(info);
            }

            var compareResults = deckInfo.CompareResult.GetModelSummary()
                                 .Select(i => new DeckCompareResultDto
            {
                Set                = i.Key,
                NbMissing          = i.Value.Sum(x => x.NbMissing),
                MissingWeightTotal = i.Value.Sum(x => x.MissingWeight),
            })
                                 .OrderByDescending(i => i.MissingWeightTotal)
                                 .ThenByDescending(i => i.NbMissing)
                                 .ToArray();

            var deck = new DeckDto
            {
                OriginalDeckId   = deckInfo.OriginalDeckId,
                Id               = deckInfo.Deck.Id,
                Hash             = Fnv1aHasher.To32BitFnv1aHash(deckInfo.OriginalDeckId),
                Name             = deckInfo.Deck.Name,
                Url              = deckInfo.Config.Url,
                ScraperTypeId    = deckInfo.Deck.ScraperType.Id,
                CardsMain        = cards.Where(i => i.IsSideboard == false).Select(i => i.Card).ToArray(),
                CardsSideboard   = cards.Where(i => i.IsSideboard).Select(i => i.Card).ToArray(),
                MtgaImportFormat = deckInfo.MtgaImportFormat,
                CompareResults   = compareResults,
                ManaCurve        = utilManaCurve.CalculateManaCurve(deckInfo.Deck.Cards.QuickCardsMain.Values
                                                                    .Cast <CardWithAmount>().ToArray())
            };

            if (deckInfo.Deck is DeckAverageArchetype archetype)
            {
                throw new Exception("TO REVISE");
                deck.CardsMainOther = archetype.CardsMainOther.Select(i => new DeckCardDto
                {
                    Name         = i.name,
                    Rarity       = i.GetRarityEnum(false).ToString(),
                    Type         = i.GetSimpleType(),
                    NbMissing    = i.NbMissing,
                    ImageCardUrl = i.imageCardUrl,//.images["normal"]
                    //ImageArtUrl = i.imageArtUrl,//.images["normal"]
                }).ToArray();
            }

            return(new DeckResponse(deck));
        }
 public DeckResponse(DeckDto deck)
 {
     Deck = deck;
 }