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)); } }
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}")); }
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)); } }
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); } } }