示例#1
0
        public IHttpActionResult GetProductByCategory(string slug, [FromUri] TagPageParameterModel parameter)
        {
            var pagination = new PaginationMetadataModel()
            {
                currentPage = parameter.pageNumber,
                pageSize    = parameter.pageSize
            };
            var filter = new TagPageFilterModel()
            {
                tagSlug  = slug,
                priceMin = parameter.priceMin,
                priceMax = parameter.priceMax,
                sort     = parameter.sort
            };
            var products = _service.getProducts(filter, ref pagination);


            if (products == null || products.Count == 0)
            {
                return(NotFound());
            }

            // Setting Header
            HttpContext.Current.Response.Headers.Add("Access-Control-Expose-Headers", "X-Paging-Headers");
            HttpContext.Current.Response.Headers.Add("X-Paging-Headers", JsonConvert.SerializeObject(pagination));

            // Returing List of product Collections
            return(Ok <List <ProductCardModel> >(products));
        }
示例#2
0
        public async Task <List <DynamicHyperTagViewModel> > Timeline_Children(
            string missionInstanceId,
            string workflowInstanceId,
            string parentId)
        {
            var timeline = new TimelineViewModel();

            var filter = new TagPageFilterModel()
            {
                ServerUri = ServerUri,
                //RealmId = realmId,
                MissionInstanceId  = missionInstanceId,
                WorkflowInstanceId = workflowInstanceId,
                Children           = true,
                GroupAndOrganize   = true,
                ParentId           = parentId
            };

            var utility = new TimelineUtility(_netStore);
            var tags    = await utility.GetTag(filter);

            tags = tags.OrderByDescending(it => it.RealWorldContentTimeUTC).ToList();

            return(tags);
        }
示例#3
0
        public async Task <long> Timeline_CountChildren(
            string missionInstanceId,
            string workflowInstanceId,
            List <string> assetIds,
            string filterValue,
            string parentId,
            DateTime?startTime,
            DateTime?endTime)
        {
            var filter = new TagPageFilterModel()
            {
                ServerUri          = ServerUri,
                AssetIds           = assetIds,
                Start              = startTime,
                End                = endTime,
                WorkflowInstanceId = workflowInstanceId,
                MissionInstanceId  = missionInstanceId,
                FilterValue        = filterValue,
                //RealmId = realmId,

                Children = true,
                ParentId = parentId
            };

            var utility = new TimelineUtility(_netStore);

            return(await utility.CountTag(filter));
        }
示例#4
0
        /// <summary>
        /// Lấy tất cả sản phẩm theo filter
        /// </summary>
        /// <param name="filter"></param>
        /// <param name="pagination"></param>
        /// <returns></returns>
        public List <ProductCardModel> getProducts(TagPageFilterModel filter, ref PaginationMetadataModel pagination)
        {
            var productFilter = new ProductFilterModel()
            {
                tagSlug     = filter.tagSlug,
                priceMin    = filter.priceMin,
                priceMax    = filter.priceMax,
                productSort = filter.sort
            };

            return(_product.getProducts(productFilter, ref pagination));
        }
示例#5
0
        public async Task <TimelineViewModel> GetTimeline(
            TagPageFilterModel filter,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            if (filter == null)
            {
                throw new ArgumentException(nameof(filter));
            }
            if (string.IsNullOrWhiteSpace(filter.ServerUri))
            {
                throw new ArgumentException(nameof(filter.ServerUri));
            }

            var tags = await GetTag(filter, cancellationToken);

            var timeline = new TimelineViewModel
            {
                Tags = tags
            };

            GroupCleanAsync(timeline, filter.GroupAndOrganize, cancellationToken);

            return(timeline);
        }
示例#6
0
        public async Task <TimelineViewModel> GetTimeline(
            FilterViewModel filter)
        {
            if (!(!string.IsNullOrWhiteSpace(WorkflowInstanceId) ||
                  !string.IsNullOrWhiteSpace(AssetId)))
            {
                return(new TimelineViewModel());
            }

            var model = new TagPageFilterModel()
            {
                ServerUri  = ServerUri,
                PageSize   = filter.PageSizeValue,
                PageNumber = filter.PageNumber,
                AssetIds   = new List <string>()
                {
                    AssetId
                },
                Start              = filter.StartTime,
                End                = filter.EndTime,
                GroupAndOrganize   = true,
                WorkflowInstanceId = WorkflowInstanceId,
                MissionInstanceId  = MissionInstanceId,
                FilterValue        = filter.Input,
                //RealmId = realmId,
            };

            if (filter.FromSeconds.HasValue && filter.ToSeconds.HasValue)
            {
                model.Range = new TagPageFilterModel.PositionRange(filter.FromSeconds.Value, filter.ToSeconds.Value);
            }

            var utility = new TimelineUtility(_netStore);

            return(await utility.GetTimeline(model));
        }
示例#7
0
        public async Task <List <DynamicHyperTagViewModel> > GetTag(
            TagPageFilterModel filter,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            if (filter == null)
            {
                throw new ArgumentException(nameof(filter));
            }
            if (string.IsNullOrWhiteSpace(filter.ServerUri))
            {
                throw new ArgumentException(nameof(filter.ServerUri));
            }

            var hyperNodeUtility = new HyperStoreUtility(filter.ServerUri, _store);

            var serverHost    = HyperStoreConnectionStringUtility.GetHost(filter.ServerUri);
            var serverPort    = HyperStoreConnectionStringUtility.GetPort(filter.ServerUri);
            var hlsServerHost = await hyperNodeUtility.GetHlsServerUriAsync(filter.ServerUri);

            var missionTags = new List <DynamicHyperTagViewModel>();

            var findHyperTagsArgs = new FindHyperDocumentsArgs
            {
                DescriptorConditions = new MultiScopeCondition(AndOr.And),
            };

            findHyperTagsArgs.SetDocumentType(nameof(HyperTag));

            var elementType = Assist.GetPropertyName((HyperTag t) => t.Elements) + ".TYPE";

            //findHyperTagsArgs.DescriptorConditions.AddCondition(elementType, nameof(TagonomyExecutionResultHyperTagElement));

            findHyperTagsArgs.OrderByFields = new OrderByField[]
            {
                new OrderByField()
                {
                    Ascending       = true,
                    DescriptorField = true,
                    FieldName       = "Elements.UniversalTime"
                },
                new OrderByField()
                {
                    Ascending       = true,
                    DescriptorField = true,
                    FieldName       = "Elements.StreamTime"
                },
                //new OrderByField()
                //{
                //	Ascending = true,
                //	DescriptorField = true,
                //	FieldName = "Elements.HyperId.FragmentId"
                //},
                //new OrderByField()
                //{
                //	Ascending = true,
                //	DescriptorField = true,
                //	FieldName = "Elements.HyperId.SliceId"
                //}
            };

            if (filter.PageNumber.HasValue && filter.PageSize.HasValue)
            {
                findHyperTagsArgs.Skip  = filter.PageNumber.Value * filter.PageSize.Value;
                findHyperTagsArgs.Limit = filter.PageSize.Value;
            }

            if (filter.WorkflowInstanceId != null)
            {
                var workflowInstanceKey =
                    Assist.GetPropertyName((HyperTag t) => t.Elements) + "." +
                    Assist.GetPropertyName((HyperTagMission m) => m.WorkflowInstanceId);

                findHyperTagsArgs.DescriptorConditions.AddCondition(workflowInstanceKey, filter.WorkflowInstanceId);
            }

            if (filter.Ids != null && filter.Ids.Any())
            {
                findHyperTagsArgs.DocumentConditions.AddCondition("_id", filter.Ids, Comparers.In);
            }

            if (filter.AssetIds != null && filter.AssetIds.Any())
            {
                var assetDescriptorConditions = new MultiScopeCondition(AndOr.Or);
                foreach (var assetId in filter.AssetIds)
                {
                    var regexText = $"/^{assetId}.*/i";

                    var key =
                        Assist.GetPropertyName((HyperTag t) => t.Elements) + $".{nameof(HyperId)}." +
                        Assist.GetPropertyName((HyperId m) => m.AssetId);

                    assetDescriptorConditions.AddCondition(key, regexText, Comparers.Regex);
                }
                findHyperTagsArgs.DescriptorConditions.AddCondition(assetDescriptorConditions);
            }

            if (filter.Start.HasValue || filter.End.HasValue)
            {
                var field = Assist.GetPropertyName((HyperTag t) => t.Elements)
                            + "."
                            + Assist.GetPropertyName((HyperTagTime t) => t.UniversalTime);

                if (filter.Start.HasValue)
                {
                    findHyperTagsArgs.DescriptorConditions.AddCondition(
                        field,
                        new DateTime(filter.Start.Value.Ticks, DateTimeKind.Utc),
                        Comparers.GreaterThanOrEqual);
                }

                if (filter.End.HasValue)
                {
                    findHyperTagsArgs.DescriptorConditions.AddCondition(
                        field,
                        new DateTime(filter.End.Value.Ticks, DateTimeKind.Utc),
                        Comparers.LessThanOrEqual);
                }
            }

            if (filter.Range != null && filter.AssetIds != null && filter.AssetIds.Any())
            {
                var assetId = filter.AssetIds.FirstOrDefault();

                var hyperAssetId = HyperAssetId.TryParse(assetId);

                // TODO: Enable cache
                // var hyperTrack = _tagsCache.Get<HyperTrack>(assetId);
                HyperTrack hyperTrack = null;

                if (hyperTrack == null)
                {
                    var retrieveAssetArgs = new RetrieveAssetArgs()
                    {
                        AssetId = hyperAssetId.Value,
                    };

                    var hyperAsset = await _store.ExecuteAsync(retrieveAssetArgs);

                    var retrieveTrackArgs = new RetrieveTrackArgs()
                    {
                        AssetId = hyperAssetId.Value,
                        TrackId = hyperAsset.DefaultVideoTrackId.Value
                    };

                    hyperTrack = await _store.ExecuteAsync(retrieveTrackArgs);

                    // TODO: Enable cache
                    //_tagsCache.Set(assetId, hyperTrack, TimeSpan.FromSeconds(Settings.Instance.CacheExpiratonTagIntervalInSeconds));
                }

                var fromExtended = await hyperTrack.FindAtAsync(_store, hyperAssetId.Value, filter.Range.FromSeconds * 1000, HyperSeek.SeekModes.Estimated);

                var toExtended = await hyperTrack.FindAtAsync(_store, hyperAssetId.Value, filter.Range.ToSeconds * 1000, HyperSeek.SeekModes.Estimated);

                var field = Assist.GetPropertyName((HyperTag t) => t.Elements)
                            + $".{nameof(HyperId)}."
                            + Assist.GetPropertyName((HyperId t) => t.FragmentId);

                findHyperTagsArgs.DescriptorConditions.AddCondition(
                    field,
                    fromExtended.Value.FragmentId.Index,
                    Comparers.GreaterThanOrEqual);

                findHyperTagsArgs.DescriptorConditions.AddCondition(
                    field,
                    toExtended.Value.FragmentId.Index,
                    Comparers.LessThanOrEqual);
            }
            ;

            var documents = await _store.ExecuteAsync(findHyperTagsArgs);

            if (documents == null)
            {
                return(missionTags);
            }

            var parallel = documents
                           .Select(it => it.GetPayload <HyperTag>())
                           .Where(it => it.GetElement <HyperTagMission>() != null)
                           .ToDictionary(k => k, v => new DynamicHyperTagViewModel());

            if (!parallel.Any())
            {
                return(missionTags);
            }

            foreach (var item in parallel.AsParallel().WithDegreeOfParallelism(100))
            {
                try
                {
                    // TODO: Enable cache
                    //var cacheElement = _tagsCache.Get<TagCacheElement>(item.Key.Id);
                    TagCacheElement cacheElement = null;

                    if (cacheElement != null)
                    {
                        var cacheTag = cacheElement.Tag;

                        item.Value.ServerUri     = cacheTag.ServerUri;
                        item.Value.ServerHost    = cacheTag.ServerHost;
                        item.Value.ServerPort    = cacheTag.ServerPort;
                        item.Value.HlsServerHost = cacheTag.HlsServerHost;
                        item.Value.DynamicData   = cacheTag.DynamicData;
                        item.Value.TagView       = cacheTag.TagView;
                        item.Value.HyperTag      = cacheTag.HyperTag;
                    }
                    else
                    {
                        var view = await HyperTagHelper.GenerateTagView(_store, new DummyLogger(), item.Key);

                        var json    = JsonConvert.SerializeObject(view);
                        var @object = JsonConvert.DeserializeObject <JObject>(json);

                        item.Value.ServerUri     = filter.ServerUri;
                        item.Value.ServerHost    = serverHost;
                        item.Value.ServerPort    = serverPort;
                        item.Value.HlsServerHost = hlsServerHost;
                        item.Value.DynamicData   = @object;
                        item.Value.TagView       = view;
                        item.Value.HyperTag      = item.Key;

                        cacheElement = new TagCacheElement()
                        {
                            Tag = item.Value,
                        };

                        // TODO: Enable cache
                        //_tagsCache.Set(item.Key.Id, cacheElement, TimeSpan.FromSeconds(Settings.Instance.CacheExpiratonTagIntervalInSeconds));
                    }
                }
                catch (Exception)
                {
                }
            }

            missionTags.AddRange(parallel.Where(it => it.Value.DynamicData != null).Select(it => it.Value));

            if (!string.IsNullOrWhiteSpace(filter.FilterValue))
            {
                missionTags = missionTags.Where(it => it.TagView.TaggingTitle != null &&
                                                it.TagView.TaggingTitle.ToLower().Contains(filter.FilterValue.ToLower())).ToList();
            }

            return(missionTags);
        }
示例#8
0
        public async Task <long> CountTag(
            TagPageFilterModel filter,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            if (filter == null)
            {
                throw new ArgumentException(nameof(filter));
            }
            if (string.IsNullOrWhiteSpace(filter.ServerUri))
            {
                throw new ArgumentException(nameof(filter.ServerUri));
            }

            var findHyperTagsArgs = new CountHyperDocumentsArgs
            {
                DescriptorConditions = new MultiScopeCondition(AndOr.And),
            };

            var elementType = Assist.GetPropertyName((HyperTag t) => t.Elements) + ".TYPE";

            findHyperTagsArgs.DescriptorConditions.AddCondition(elementType, nameof(TagonomyExecutionResultHyperTagElement));

            if (!filter.Children)
            {
                findHyperTagsArgs.DescriptorConditions.AddCondition(elementType, nameof(HyperTagReference), Comparers.DoesNotEqual);
            }
            else
            {
                findHyperTagsArgs.DescriptorConditions.AddCondition(elementType, nameof(HyperTagReference), Comparers.Equals);
                var elementRefrenceId = Assist.GetPropertyName((HyperTag t) => t.Elements) + ".ReferenceId";
                findHyperTagsArgs.DescriptorConditions.AddCondition(elementRefrenceId, filter.ParentId, Comparers.Equals);
            }

            findHyperTagsArgs.OrderByFields = new OrderByField[]
            {
                new OrderByField()
                {
                    Ascending       = false,
                    DescriptorField = true,
                    FieldName       = "Elements.HyperId.FragmentId"
                },
                new OrderByField()
                {
                    Ascending       = false,
                    DescriptorField = true,
                    FieldName       = "Elements.HyperId.SliceId"
                }
            };

            findHyperTagsArgs.SetDocumentType(nameof(HyperTag));

            if (filter.WorkflowInstanceId != null)
            {
                var workflowInstanceKey =
                    Assist.GetPropertyName((HyperTag t) => t.Elements) + "." +
                    Assist.GetPropertyName((HyperTagMission m) => m.WorkflowInstanceId);

                findHyperTagsArgs.DescriptorConditions.AddCondition(workflowInstanceKey, filter.WorkflowInstanceId);
            }

            if (filter.Ids != null && filter.Ids.Any())
            {
                findHyperTagsArgs.DocumentConditions.AddCondition("_id", filter.Ids, Comparers.In);
            }

            if (filter.AssetIds != null || filter.AssetIds.Any())
            {
                var key =
                    Assist.GetPropertyName((HyperTag t) => t.Elements) + $".{nameof(HyperId)}." +
                    Assist.GetPropertyName((HyperId m) => m.AssetId);

                findHyperTagsArgs.DocumentConditions.AddCondition(key, filter.AssetIds, Comparers.In);
            }

            if (filter.Start.HasValue || filter.End.HasValue)
            {
                var field = Assist.GetPropertyName((HyperTag t) => t.Elements)
                            + "."
                            + Assist.GetPropertyName((HyperTagTime t) => t.UniversalTime);

                if (filter.Start.HasValue)
                {
                    findHyperTagsArgs.DescriptorConditions.AddCondition(
                        field,
                        new DateTime(filter.Start.Value.Ticks, DateTimeKind.Utc),
                        Comparers.GreaterThanOrEqual);
                }

                if (filter.End.HasValue)
                {
                    findHyperTagsArgs.DescriptorConditions.AddCondition(
                        field,
                        new DateTime(filter.End.Value.Ticks, DateTimeKind.Utc),
                        Comparers.LessThanOrEqual);
                }
            }

            var documents = await _store.ExecuteAsync(findHyperTagsArgs);

            return(documents);
        }