Skip to content

Commit 340ee44

Browse files
committed
feat(document-builder): apply request meta
1 parent aa0ddfc commit 340ee44

File tree

3 files changed

+23
-11
lines changed

3 files changed

+23
-11
lines changed

src/JsonApiDotNetCore/Builders/DocumentBuilder.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ public class DocumentBuilder
1212
{
1313
private IJsonApiContext _jsonApiContext;
1414
private IContextGraph _contextGraph;
15+
private readonly IRequestMeta _requestMeta;
1516

16-
public DocumentBuilder(IJsonApiContext jsonApiContext)
17+
public DocumentBuilder(IJsonApiContext jsonApiContext, IRequestMeta requestMeta)
1718
{
1819
_jsonApiContext = jsonApiContext;
1920
_contextGraph = jsonApiContext.ContextGraph;
21+
_requestMeta = requestMeta;
2022
}
2123

2224
public Document Build(IIdentifiable entity)
@@ -71,6 +73,10 @@ private Dictionary<string, object> _getMeta(IIdentifiable entity)
7173
if(_jsonApiContext.Options.IncludeTotalRecordCount)
7274
builder.Add("total-records", _jsonApiContext.PageManager.TotalRecords);
7375

76+
var requestMeta = _requestMeta?.GetMeta();
77+
if(requestMeta != null)
78+
builder.Add(requestMeta);
79+
7480
var meta = builder.Build();
7581
if(meta.Count > 0) return meta;
7682
return null;

src/JsonApiDotNetCore/Formatters/JsonApiOutputFormatter.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ public async Task WriteAsync(OutputFormatterWriteContext context)
3232
var logger = GetService<ILoggerFactory>(context)?
3333
.CreateLogger<JsonApiOutputFormatter>();
3434

35+
var requestMeta = GetService<IRequestMeta>(context);
36+
3537
logger?.LogInformation("Formatting response as JSONAPI");
3638

3739
var response = context.HttpContext.Response;
@@ -43,7 +45,7 @@ public async Task WriteAsync(OutputFormatterWriteContext context)
4345
string responseContent;
4446
try
4547
{
46-
responseContent = GetResponseBody(context.Object, jsonApiContext, logger);
48+
responseContent = GetResponseBody(context.Object, jsonApiContext, requestMeta, logger);
4749
}
4850
catch (Exception e)
4951
{
@@ -64,15 +66,18 @@ private T GetService<T>(OutputFormatterWriteContext context)
6466
return context.HttpContext.RequestServices.GetService<T>();
6567
}
6668

67-
private string GetResponseBody(object responseObject, IJsonApiContext jsonApiContext, ILogger logger)
69+
private string GetResponseBody(object responseObject,
70+
IJsonApiContext jsonApiContext,
71+
IRequestMeta requestMeta,
72+
ILogger logger)
6873
{
6974
if (responseObject == null)
7075
return GetNullDataResponse();
7176

7277
if (responseObject.GetType() == typeof(Error) || jsonApiContext.RequestEntity == null)
7378
return GetErrorJson(responseObject, logger);
7479

75-
return JsonApiSerializer.Serialize(responseObject, jsonApiContext);
80+
return JsonApiSerializer.Serialize(responseObject, jsonApiContext, requestMeta);
7681
}
7782

7883
private string GetNullDataResponse()

src/JsonApiDotNetCore/Serialization/JsonApiSerializer.cs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,25 @@ namespace JsonApiDotNetCore.Serialization
88
{
99
public static class JsonApiSerializer
1010
{
11-
public static string Serialize(object entity, IJsonApiContext jsonApiContext)
11+
public static string Serialize(object entity, IJsonApiContext jsonApiContext, IRequestMeta requestMeta)
1212
{
1313
if (entity is IEnumerable<IIdentifiable>)
14-
return _serializeDocuments(entity, jsonApiContext);
15-
return _serializeDocument(entity, jsonApiContext);
14+
return _serializeDocuments(entity, jsonApiContext, requestMeta);
15+
16+
return _serializeDocument(entity, jsonApiContext, requestMeta);
1617
}
1718

18-
private static string _serializeDocuments(object entity, IJsonApiContext jsonApiContext)
19+
private static string _serializeDocuments(object entity, IJsonApiContext jsonApiContext, IRequestMeta requestMeta)
1920
{
20-
var documentBuilder = new DocumentBuilder(jsonApiContext);
21+
var documentBuilder = new DocumentBuilder(jsonApiContext, requestMeta);
2122
var entities = entity as IEnumerable<IIdentifiable>;
2223
var documents = documentBuilder.Build(entities);
2324
return _serialize(documents);
2425
}
2526

26-
private static string _serializeDocument(object entity, IJsonApiContext jsonApiContext)
27+
private static string _serializeDocument(object entity, IJsonApiContext jsonApiContext, IRequestMeta requestMeta)
2728
{
28-
var documentBuilder = new DocumentBuilder(jsonApiContext);
29+
var documentBuilder = new DocumentBuilder(jsonApiContext, requestMeta);
2930
var identifiableEntity = entity as IIdentifiable;
3031
var document = documentBuilder.Build(identifiableEntity);
3132
return _serialize(document);

0 commit comments

Comments
 (0)