Exemple #1
0
        public async Task <HttpResponseMessage> Post([FromBody] CardSearchOptions searchOptionsBase)
        {
            var token = TokenExtracton.GetTokenFromCookie(HttpContext.Current.Request);

            using (var repository = new Repository(token))
            {
                IQueryable <CardModel> dbResult = repository.Context.Cards.Include(x => x.RuleSet).Include(x => x.Serie).Include(x => x.Faction).Include(x => x.Status).Include(x => x.Type).Include(x => x.Creator).Include(x => x.LastModifiedBy).AsNoTracking();

                if (!searchOptionsBase.ShowDraftVersions)
                {
                    dbResult = dbResult.Where(x => x.Status.Guid == PredefinedGuids.Final);
                }

                if (!string.IsNullOrWhiteSpace(searchOptionsBase.Search))
                {
                    dbResult = dbResult.Where(it => it.Name.Contains(searchOptionsBase.Search) || it.Creator.Name.Contains(searchOptionsBase.Search));
                }
                var totalCount = dbResult.Count();

                // default order by
                if (string.IsNullOrWhiteSpace(searchOptionsBase.OrderBy))
                {
                    searchOptionsBase.OrderBy = "Name";
                }

                var orderByType = QueryHelper.GetPropertyType <CardModel>(searchOptionsBase.OrderBy);
                if (orderByType != null)
                {
                    if (orderByType == typeof(string))
                    {
                        var orderByExpression = QueryHelper.GetPropertyExpression <CardModel, string>(searchOptionsBase.OrderBy);
                        dbResult = searchOptionsBase.ReverseOrder ? dbResult.OrderByDescending(orderByExpression) : dbResult.OrderBy(orderByExpression);
                    }
                    if (orderByType == typeof(int))
                    {
                        var orderByExpression = QueryHelper.GetPropertyExpression <CardModel, int>(searchOptionsBase.OrderBy);
                        dbResult = searchOptionsBase.ReverseOrder ? dbResult.OrderByDescending(orderByExpression) : dbResult.OrderBy(orderByExpression);
                    }
                    if (orderByType == typeof(DateTime))
                    {
                        var orderByExpression = QueryHelper.GetPropertyExpression <CardModel, DateTime>(searchOptionsBase.OrderBy);
                        dbResult = searchOptionsBase.ReverseOrder ? dbResult.OrderByDescending(orderByExpression) : dbResult.OrderBy(orderByExpression);
                    }
                }

                searchOptionsBase.PageSize = Math.Min(50, searchOptionsBase.PageSize);
                var query = await dbResult.Skip((searchOptionsBase.PageNumber - 1) *searchOptionsBase.PageSize).Take(searchOptionsBase.PageSize).ToListAsync();

                var result = new ResultList <Card>(query.Select(x => x.FromDal()).ToList())
                {
                    TotalItems = totalCount, SearchOptions = searchOptionsBase
                };
                return(Request.CreateResponse(result));
            }
        }
Exemple #2
0
        private static async Task SearchCards()
        {
            var cardSearchOptions = new CardSearchOptions
            {
                Search     = "Archer",
                PageNumber = 1,
                PageSize   = 100,
                // Faction = CardOptions.Factions.FirstOrDefault()
            };
            var result = await ApiClient.Search <Card, CardSearchOptions>(cardSearchOptions);

            result.Items.ForEach(x => Console.WriteLine($"Card: {x.Name}"));
        }
Exemple #3
0
        public async Task GenerateProductsCsv()
        {
            await ApiClient.Login();

            var records = new List <string>();

            var header = "ID,Type,SKU,Name,Published,\"Is featured?\",\"Visibility in catalog\",\"Short description\",\"Description\",\"Tax status\",\"In stock?\",\"Backorders allowed?\",\"Sold individually?\",\"Weight (g)\",\"Length (cm)\",\"Width (cm)\",\"Height (cm)\",\"Allow customer reviews?\",\"Regular price\",Categories,Tags,Cross-sells,Position";

            records.Add(header);

            var releaseCandidateGuid = Guid.Parse("7DEDC883-5DD2-5F17-B2A4-EAF04F7AD464");

            var options = await ApiClient.Get <CardOptions>();


            var cardSearchOptions = new CardSearchOptions
            {
                PageNumber = 1,
                PageSize   = 1,
                Status     = options.Statuses.FirstOrDefault(x => x.Guid == releaseCandidateGuid)
            };
            var result = await ApiClient.Search <Card, CardSearchOptions>(cardSearchOptions);

            var totalItems     = result.TotalItems;
            var processedItems = 0;

            var pageNumber = 1;

            cardSearchOptions.PageSize = 50;

            while (processedItems < totalItems)
            {
                cardSearchOptions.PageNumber = pageNumber;
                result = await ApiClient.Search <Card, CardSearchOptions>(cardSearchOptions);

                foreach (var card in result.Items)
                {
                    processedItems++;
                    var record = CreateCardRecord(card);
                    records.Add(record);
                }
                pageNumber++;
                await Task.Delay(1000);
            }

            File.WriteAllLines(OutputFile, records, Encoding.UTF8);
        }
        public async Task <IActionResult> Post([FromBody] CardSearchOptions searchOptionsBase)
        {
            using (var repository = new Repository())
            {
                IQueryable <CardModel> dbResult = repository.Context.Cards
                                                  .Include(x => x.RuleSet)
                                                  .Include(x => x.Serie)
                                                  .Include(x => x.Faction)
                                                  .Include(x => x.Status)
                                                  .Include(x => x.Type)
                                                  .Include(x => x.Creator)
                                                  .Include(x => x.LastModifiedBy).AsNoTracking();

                if (searchOptionsBase.Cost != null)
                {
                    dbResult = dbResult.Where(x => x.Cost.ToLower() == searchOptionsBase.Cost.ToLower());
                }

                if (searchOptionsBase.CardType != null)
                {
                    dbResult = dbResult.Where(x => x.Type.Guid == searchOptionsBase.CardType.Guid);
                }

                if (searchOptionsBase.Faction != null)
                {
                    dbResult = dbResult.Where(x => x.Faction.Guid == searchOptionsBase.Faction.Guid);
                }

                if (searchOptionsBase.Serie != null)
                {
                    dbResult = dbResult.Where(x => x.Serie.Guid == searchOptionsBase.Serie.Guid);
                }

                if (searchOptionsBase.RuleSet != null)
                {
                    dbResult = dbResult.Where(x => x.RuleSet.Guid == searchOptionsBase.RuleSet.Guid);
                }

                if (searchOptionsBase.Status != null)
                {
                    dbResult = dbResult.Where(x => x.Status.Guid == searchOptionsBase.Status.Guid);
                }

                if (searchOptionsBase.Loyalty != null)
                {
                    dbResult = dbResult.Where(x => x.Loyalty == searchOptionsBase.Loyalty.Value);
                }

                if (searchOptionsBase.Language != null)
                {
                    dbResult = dbResult.Where(x => x.LanguageCode == searchOptionsBase.Language.LanguageCode);
                }


                if (!string.IsNullOrWhiteSpace(searchOptionsBase.Search))
                {
                    dbResult = dbResult.Where(
                        it => it.Name.Contains(searchOptionsBase.Search) ||
                        it.Creator.Name.Contains(searchOptionsBase.Search) ||
                        it.SubType.Contains(searchOptionsBase.Search) ||
                        it.RuleText.Contains(searchOptionsBase.Search)
                        );
                }
                var totalCount = dbResult.Count();

                // default order by
                if (string.IsNullOrWhiteSpace(searchOptionsBase.OrderBy))
                {
                    searchOptionsBase.OrderBy = "Name";
                }

                var orderByType = QueryHelper.GetPropertyType <CardModel>(searchOptionsBase.OrderBy);
                if (orderByType != null)
                {
                    if (orderByType == typeof(string))
                    {
                        var orderByExpression = QueryHelper.GetPropertyExpression <CardModel, string>(searchOptionsBase.OrderBy);
                        dbResult = searchOptionsBase.ReverseOrder ? dbResult.OrderByDescending(orderByExpression) : dbResult.OrderBy(orderByExpression);
                    }
                    if (orderByType == typeof(int))
                    {
                        var orderByExpression = QueryHelper.GetPropertyExpression <CardModel, int>(searchOptionsBase.OrderBy);
                        dbResult = searchOptionsBase.ReverseOrder ? dbResult.OrderByDescending(orderByExpression) : dbResult.OrderBy(orderByExpression);
                    }
                    if (orderByType == typeof(DateTime))
                    {
                        var orderByExpression = QueryHelper.GetPropertyExpression <CardModel, DateTime>(searchOptionsBase.OrderBy);
                        dbResult = searchOptionsBase.ReverseOrder ? dbResult.OrderByDescending(orderByExpression) : dbResult.OrderBy(orderByExpression);
                    }
                }

                searchOptionsBase.PageSize = Math.Min(50, searchOptionsBase.PageSize);
                var query = await dbResult.Skip((searchOptionsBase.PageNumber - 1) *searchOptionsBase.PageSize).Take(searchOptionsBase.PageSize).ToListAsync();

                var result = new ResultList <Card>(query.Select(x => x.FromDal()).ToList())
                {
                    TotalItems = totalCount, SearchOptions = searchOptionsBase
                };
                return(Ok(result));
            }
        }
Exemple #5
0
        public async Task TranslateDeck(string guid, string language, bool createCards)
        {
            await ApiClient.Login();

            if (!Languages.ContainsKey(language))
            {
                throw new Exception("Language not supported");
            }
            CurrentLanguage = Languages[language];

            var deck = await ApiClient.GetByGuid <Deck>(guid);

            if (deck == null)
            {
                throw new Exception("Deck not found");
            }

            var newDeck = new Deck()
            {
                Name = $"{deck.Name} ({language})"
            };

            newDeck = await ApiClient.Create(newDeck);

            var counter = 1;
            var total   = deck.DeckCards.Count;

            foreach (var deckCard in deck.DeckCards.OrderBy(x => x.Card.Name))
            {
                var card = await ApiClient.GetByGuid <Card>(deckCard.Card.Guid);

                Card newCard;
                if (createCards)
                {
                    Console.WriteLine($"Creating card {counter++}/{total} : {card.Name} ({language} wip)");
                    newCard = await CreateCard(card, language);

                    await Task.Delay(30 * 1000);
                }
                else
                {
                    var cardSearchOptions = new CardSearchOptions
                    {
                        Search     = $"{card.Name} ({language}",
                        PageNumber = 1,
                        PageSize   = 10
                    };
                    var result = await ApiClient.Search <Card, CardSearchOptions>(cardSearchOptions);

                    newCard = result.Items?.FirstOrDefault();
                    await Task.Delay(1000);
                }

                if (newCard != null)
                {
                    var newDeckCard = new DeckCard()
                    {
                        Card     = newCard,
                        Deck     = newDeck,
                        Quantity = deckCard.Quantity
                    };
                    await ApiClient.Create(newDeckCard);

                    await Task.Delay(1000);
                }
            }
        }