Skip to content

Commit 6460f89

Browse files
committed
add dataloader
1 parent 5b72b2e commit 6460f89

File tree

4 files changed

+27
-14
lines changed

4 files changed

+27
-14
lines changed

dotnet/OpenBreweryDB.API/GraphQL/Breweries/Dataloaders/BreweryByIdDataLoader.cs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,18 @@
22
using System.Collections.Generic;
33
using System.Threading;
44
using System.Threading.Tasks;
5-
using HotChocolate.DataLoader;
65
using OpenBreweryDB.Core.Conductors.Breweries.Interfaces;
76
using OpenBreweryDB.Data.Models;
87
using AndcultureCode.CSharp.Core.Extensions;
98
using System.Linq;
109
using OpenBreweryDB.API.GraphQL.Errors;
10+
using GreenDonut;
11+
using ACModels = AndcultureCode.CSharp.Core.Models;
12+
using AndcultureCode.CSharp.Core.Enumerations;
1113

1214
namespace OpenBreweryDB.API.GraphQL.Breweries.Dataloaders
1315
{
14-
public class BreweryByIdDataLoader : BatchDataLoader<long, Brewery>
16+
public class BreweryByIdDataLoader : DataLoaderBase<long, Brewery>
1517
{
1618
private readonly IBreweryConductor _breweryConductor;
1719

@@ -20,23 +22,34 @@ public BreweryByIdDataLoader(IBreweryConductor breweryConductor)
2022
_breweryConductor = breweryConductor ?? throw new ArgumentNullException(nameof(breweryConductor));
2123
}
2224

23-
protected override async Task<IReadOnlyDictionary<long, Brewery>> LoadBatchAsync(
25+
protected override async Task<IReadOnlyList<Result<Brewery>>> FetchAsync(
2426
IReadOnlyList<long> keys,
2527
CancellationToken cancellationToken)
2628
{
2729
var breweryResult = _breweryConductor.FindAll(b => keys.Contains(b.Id));
2830

2931
if (!breweryResult.HasErrorsOrResultIsNull())
3032
{
31-
return await Task.FromResult(breweryResult.ResultObject.ToDictionary(t => t.Id));
33+
return breweryResult.ResultObject
34+
.Select(Result<Brewery>.Resolve)
35+
.ToList();
3236
}
3337

3438
if (breweryResult.Errors?.Any() == true)
3539
{
36-
throw new ResultException(breweryResult.Errors);
40+
return breweryResult
41+
.Errors
42+
.Select(e => Result<Brewery>.Reject(new ResultException(e)))
43+
.ToList();
3744
}
3845

39-
return null;
46+
return await Task.FromResult(new List<Result<Brewery>> {
47+
Result<Brewery>.Reject(new ResultException(new ACModels.Error {
48+
ErrorType = ErrorType.Error,
49+
Key = "NotFound",
50+
Message = "Resource Not Found"
51+
}))
52+
});
4053
}
4154
}
4255
}

dotnet/OpenBreweryDB.API/GraphQL/Breweries/Types/BreweryType.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ protected override void Configure(IObjectTypeDescriptor<Brewery> descriptor)
1818
.Description("A brewery of beer")
1919
.AsNode()
2020
.IdField(t => t.Id)
21-
.NodeResolver((ctx, id) => ctx.DataLoader<BreweryByIdDataLoader>().LoadAsync(id, ctx.RequestAborted));
21+
.NodeResolver((ctx, id) => ctx
22+
.DataLoader<BreweryByIdDataLoader>()
23+
.LoadAsync(id, ctx.RequestAborted));
2224

2325
descriptor.Field("nearby")
2426
.Argument(

dotnet/OpenBreweryDB.API/GraphQL/Errors/ResultErrorFilter.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using System.Linq;
21
using AndcultureCode.CSharp.Core.Interfaces;
32

43
namespace OpenBreweryDB.API.GraphQL.Errors
@@ -8,8 +7,8 @@ public class ResultErrorFilter : HotChocolate.IErrorFilter
87
public HotChocolate.IError OnError(HotChocolate.IError error)
98
{
109
return error.Exception is ResultException resultException
11-
&& resultException.Errors.FirstOrDefault() is IError firstError
12-
? error.WithCode(firstError.Key).WithMessage(firstError.Message)
10+
&& resultException.Error is IError resultError
11+
? error.WithCode(resultError.Key).WithMessage(resultError.Message)
1312
: error;
1413
}
1514
}
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
using System;
2-
using System.Collections.Generic;
32
using AndcultureCode.CSharp.Core.Interfaces;
43

54
namespace OpenBreweryDB.API.GraphQL.Errors
65
{
76
public class ResultException : Exception
87
{
9-
public ResultException(List<IError> errors)
8+
public ResultException(IError error)
109
{
11-
Errors = errors;
10+
Error = error;
1211
}
1312

14-
public List<IError> Errors { get; }
13+
public IError Error { get; }
1514
}
1615
}

0 commit comments

Comments
 (0)