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