private CardSearchHistoryModel GetCardSearchHistoryModel(CardSearchParameters searchParams, DateTime createdDateTime, DateTime updatedDateTime) { var userId = searchParams.PerformedByUserId == null ? Guid.Empty : (Guid)searchParams.PerformedByUserId; return(new CardSearchHistoryModel() { CardId = searchParams.CardId, CardSearchHistoryId = Guid.NewGuid(), UserId = userId, SearchText = searchParams.SearchText, SetId = searchParams.SetId, CardTypeId = searchParams.TypeId, CardRarityId = searchParams.RarityId, LanguageId = searchParams.LanguageId, LessonCost = searchParams.LessonCost, SortBy = searchParams.SortBy, SortOrder = searchParams.SortOrder, SourceId = searchParams.SourceId, CreatedById = userId, CreatedDate = createdDateTime, UpdatedById = userId, UpdatedDate = updatedDateTime, Deleted = false, }); }
public void PersistCardSearchHistory(CardSearchParameters searchParams, DateTime createdDateTime, DateTime updatedDateTime) { var cardSearchHistoryModel = GetCardSearchHistoryModel(searchParams, createdDateTime, updatedDateTime); var cardSearchHistory = GetCardSearchHistory(cardSearchHistoryModel); _context.CardSearchHistory.Add(cardSearchHistory); _context.SaveChanges(); }
public JsonResult OnPostSearchCardsAsync(Guid setId, string searchText, string sortBy, string sortOrder) { try { var websiteSource = _sourceService.GetSource(SourceType.Website); var cards = new List <CardModel>(); var isAdvancedSearch = _advancedCardSearchService.IsAdvancedSearch(searchText); if (isAdvancedSearch) { var advancedSearchParamters = new AdvancedSearchParameters() { AdvancedSearchText = searchText, SortBy = sortBy, SortOrder = sortOrder, //Harding coding English for now, as we don't have other languages atm LanguageId = new Guid("4F5CC98D-4315-4410-809F-E2CC428E0C9B"), }; cards = _advancedCardSearchService.SearchCards(advancedSearchParamters); } else { var cardSearchParameters = new CardSearchParameters() { SetId = setId, SearchText = searchText, SortBy = sortBy, SortOrder = sortOrder, //Harding coding English for now, as we don't have other languages atm LanguageId = new Guid("4F5CC98D-4315-4410-809F-E2CC428E0C9B"), SourceId = websiteSource.SourceId, }; cards = _cardService.SearchCards(cardSearchParameters); } return(new JsonResult(new { success = true, json = cards })); } catch (Exception ex) { return(new JsonResult(new { success = false, json = ex.Message })); } }
public IEnumerable <CardModel> Get(string searchText, Guid?setId, Guid?typeId, Guid?rarityId, Guid?languageId, int?lessonCost, string sortBy, string sortOrder) { var apiSource = _sourceService.GetSource(SourceType.API); var cardparams = new CardSearchParameters() { SearchText = searchText, SetId = setId, TypeId = typeId, RarityId = rarityId, LanguageId = languageId, LessonCost = lessonCost, SortBy = sortBy, SortOrder = sortOrder, SourceId = apiSource.SourceId, }; var cards = _cardService.SearchCards(cardparams); return(cards); }
public List <CardModel> SearchCards(CardSearchParameters cardSearchParameters) { var param = cardSearchParameters; var utcNow = DateTime.UtcNow; //We don't want them to pull all cards, so this will force them to search for a set and/or card text to prevent that if (string.IsNullOrEmpty(cardSearchParameters.SearchText) && (cardSearchParameters.SetId == null || cardSearchParameters.SetId == Guid.Empty) && string.IsNullOrWhiteSpace(cardSearchParameters.SetShortName)) { return(new List <CardModel>()); } if (param.LanguageId == null || param.LanguageId == Guid.Empty) { var englishLanguageId = _languageService.GetLanguageId(TypeOfLanguage.English); param.LanguageId = englishLanguageId; } var cards = (from card in _context.Cards join cardDetail in _context.CardDetails on card.CardId equals cardDetail.CardId join language in _context.Languages on cardDetail.LanguageId equals language.LanguageId join cardSet in _context.Sets on card.CardSetId equals cardSet.SetId join cardRarity in _context.Rarities on card.CardRarityId equals cardRarity.RarityId join cardType in _context.CardTypes on card.CardTypeId equals cardType.CardTypeId join provides in _context.CardProvidesLessons on card.CardId equals provides.CardId into cardsProvidesLesson from provides in cardsProvidesLesson.DefaultIfEmpty() join plesson in _context.LessonTypes on provides.LessonId equals plesson.LessonTypeId into providesLesson from plesson in providesLesson.DefaultIfEmpty() join lessonType in _context.LessonTypes on card.LessonTypeId equals lessonType.LessonTypeId into lessonTypeDefault from lessonType in lessonTypeDefault.DefaultIfEmpty() where !card.Deleted && !cardSet.Deleted && !cardRarity.Deleted && !cardType.Deleted /*&& language.LanguageId == param.LanguageId*/ select new { card, cardDetail, cardSet, cardRarity, cardType, language, lessonType, provides, plesson }); if (param.SetId != null && param.SetId != Guid.Empty) { cards = cards.Where(x => x.card.CardSetId == param.SetId); } if (!string.IsNullOrWhiteSpace(param.SetShortName)) { cards = cards.Where(card => card.cardSet.ShortName == param.SetShortName); } if (param.TypeId != null && param.TypeId != Guid.Empty) { cards = cards.Where(x => x.card.CardTypeId == param.TypeId); } if (param.RarityId != null && param.RarityId != Guid.Empty) { cards = cards.Where(x => x.card.CardRarityId == param.RarityId); } if (param.LessonCost != null && param.LessonCost >= 0) { cards = cards.Where(x => x.card.LessonCost == param.LessonCost); } if (!string.IsNullOrEmpty(param.SearchText)) { cards = from card in cards where EF.Functions.Like(card.cardDetail.Name, $"%{param.SearchText}%") || EF.Functions.Like(card.cardDetail.Text, $"%{param.SearchText}%") || //We have to include these 3 fields for adventure cards and matches since they don't have card text EF.Functions.Like(card.cardDetail.Effect, $"%{param.SearchText}%") || EF.Functions.Like(card.cardDetail.ToSolve, $"%{param.SearchText}%") || EF.Functions.Like(card.cardDetail.Reward, $"%{param.SearchText}%") select card; } var cardModels = cards.Select(x => GetCardModel(x.card, x.cardSet, x.cardRarity, x.cardType, x.cardDetail, x.language, x.lessonType, x.plesson, x.provides)).ToList(); cardModels = GetCardsWithImages(cardModels); //This isn't ideal, but there aren't a ton of sub types and it's easier to just pull all and assign than to do a complicated join var cardSubTypeModels = _cardSubTypeService.GetAllCardSubTypes(); foreach (var cardModel in cardModels) { var cardSubTypes = cardSubTypeModels.Where(x => x.CardId == cardModel.CardId).ToList(); if (cardSubTypes != null && cardSubTypes.Count > 0) { cardModel.SubTypes = cardSubTypes; } } _cardSearchHistoryService.PersistCardSearchHistory(param, utcNow, utcNow); if (cardModels?.Count > 1 && !string.IsNullOrEmpty(cardSearchParameters.SortBy) && !string.IsNullOrEmpty(cardSearchParameters.SortOrder)) { cardModels = GetCardModelsSorted(cardModels, cardSearchParameters.SortBy, cardSearchParameters.SortOrder); } return(cardModels != null ? cardModels : new List <CardModel>()); }