Skip to content

Commit 06f640d

Browse files
FIND-13403: Support unique cache for query
- Add method SingleResultCache for using cache_uniq=true
1 parent 330133f commit 06f640d

File tree

3 files changed

+33
-7
lines changed

3 files changed

+33
-7
lines changed

APIs/src/EpiServer.ContentGraph/Api/Querying/GraphQueryBuilder.cs

+12-7
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,8 @@
99
using Microsoft.Extensions.Options;
1010
using System.Text.RegularExpressions;
1111
using EPiServer.ServiceLocation;
12-
using System.Net.Http;
13-
using System;
14-
using System.Threading.Tasks;
15-
using System.Linq;
16-
using System.IO;
17-
using System.Collections.Generic;
1812
using EPiServer.ContentGraph.Helpers.Text;
13+
using EPiServer.ContentGraph.Helpers;
1914

2015
namespace EPiServer.ContentGraph.Api.Querying
2116
{
@@ -29,6 +24,8 @@ public class GraphQueryBuilder : IQuery
2924
private const string UnCachedPath = "?cache=false";
3025
private Dictionary<string, IFragmentBuilder> _fragmentBuilders;
3126
private readonly List<string> typeQueries = new List<string>();
27+
public Action<JsonRequest> RequestActions;
28+
3229
public GraphQueryBuilder()
3330
{
3431
_optiGraphOptions = new OptiGraphOptions();
@@ -319,8 +316,16 @@ private void AdditionalInformation(JsonRequest request, string body)
319316
Regex regex = new Regex(@"\?cache=\w*");
320317
_optiGraphOptions.QueryPath = _optiGraphOptions.QueryPath.Replace(regex.Match(_optiGraphOptions.QueryPath).Value, UnCachedPath);
321318
}
319+
//apply actions on request before send
320+
ApplyRequestActions(request);
321+
}
322+
internal void ApplyRequestActions(JsonRequest request)
323+
{
324+
if (RequestActions.IsNotNull())
325+
{
326+
RequestActions(request);
327+
}
322328
}
323-
324329
public void AddQuery(string typeQuery)
325330
{
326331
typeQueries.Add(typeQuery);

APIs/src/EpiServer.ContentGraph/Extensions/GraphQueryBuilderExtension.cs

+10
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,15 @@ public static TypeQueryBuilder<T> BeginType<T>(this GraphQueryBuilder queryBuild
2222
{
2323
return queryBuilder.ForType(typeQueryBuilder);
2424
}
25+
/// <summary>
26+
/// Search result has single item will be cached. This will set cache_unique to true and require cache=true in graph client options.
27+
/// </summary>
28+
/// <param name="queryBuilder"></param>
29+
/// <returns></returns>
30+
public static GraphQueryBuilder SingleResultCache(this GraphQueryBuilder queryBuilder)
31+
{
32+
queryBuilder.RequestActions = request => request.AddRequestHeader("cache_uniq", "true");
33+
return queryBuilder;
34+
}
2535
}
2636
}

APIs/src/EpiServer.ContentGraph/Extensions/TypeSearchExtension.cs

+11
Original file line numberDiff line numberDiff line change
@@ -113,5 +113,16 @@ public static async Task<string> GetRawResultAsync<T>(this TypeQueryBuilder<T> t
113113
return await typeQueryBuilder.ToQuery().BuildQueries().GetRawResultAsync();
114114
}
115115
#endregion
116+
117+
/// <summary>
118+
/// Get single result item then cache this item separately. This will set cache_unique to true and require cache=true in graph client options.
119+
/// </summary>
120+
/// <param name="queryBuilder"></param>
121+
/// <returns></returns>
122+
public static async Task<ContentGraphResult> GetSingleResultCacheAsync<T>(this TypeQueryBuilder<T> typeQueryBuilder)
123+
{
124+
var query = typeQueryBuilder.ToQuery().BuildQueries();
125+
return await query.SingleResultCache().GetResultAsync();
126+
}
116127
}
117128
}

0 commit comments

Comments
 (0)