Ejemplo n.º 1
0
        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,
            });
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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 }));
            }
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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>());
        }