diff --git a/src/GeekLearning.Domain.EntityFramework/GeekLearning.Domain.EntityFramework.csproj b/src/GeekLearning.Domain.EntityFramework/GeekLearning.Domain.EntityFramework.csproj
index b2c644d..8202e70 100644
--- a/src/GeekLearning.Domain.EntityFramework/GeekLearning.Domain.EntityFramework.csproj
+++ b/src/GeekLearning.Domain.EntityFramework/GeekLearning.Domain.EntityFramework.csproj
@@ -4,7 +4,7 @@
EntityFramework Core helper library to deal with a Domain layer.
0.0.1
Geek Learning;Adrien Siffermann;Cyprien Autexier;Anna Yafi
- netstandard2.0
+ netstandard2.1
https://github.com/geeklearningio/gl-dotnet-domain
https://github.com/geeklearningio/gl-dotnet-domain/blob/master/LICENSE.md
@@ -14,7 +14,7 @@
-
+
diff --git a/src/GeekLearning.Domain.EntityFramework/PagingExtensions.cs b/src/GeekLearning.Domain.EntityFramework/PagingExtensions.cs
index d0484b2..d9cf3b4 100644
--- a/src/GeekLearning.Domain.EntityFramework/PagingExtensions.cs
+++ b/src/GeekLearning.Domain.EntityFramework/PagingExtensions.cs
@@ -12,7 +12,7 @@ public static async Task> ToPageAsync(this I
return new Page(
pageIndex,
pageSize,
- await query.Skip(pageIndex * pageSize).Take(pageSize).ToAsyncEnumerable().Select(selector).ToList(),
+ (await query.Skip(pageIndex * pageSize).Take(pageSize).ToListAsync()).Select(selector).ToList(),
await query.CountAsync()
);
}
diff --git a/src/GeekLearning.Domain.FluentValidation/GeekLearning.Domain.FluentValidation.csproj b/src/GeekLearning.Domain.FluentValidation/GeekLearning.Domain.FluentValidation.csproj
index 4bab1e4..74315c8 100644
--- a/src/GeekLearning.Domain.FluentValidation/GeekLearning.Domain.FluentValidation.csproj
+++ b/src/GeekLearning.Domain.FluentValidation/GeekLearning.Domain.FluentValidation.csproj
@@ -15,7 +15,7 @@
-
+
diff --git a/src/GeekLearning.Domain.Primitives/Extensions/MaybeExtensions.cs b/src/GeekLearning.Domain.Primitives/Extensions/MaybeExtensions.cs
index 9026ec1..a4bcce1 100644
--- a/src/GeekLearning.Domain.Primitives/Extensions/MaybeExtensions.cs
+++ b/src/GeekLearning.Domain.Primitives/Extensions/MaybeExtensions.cs
@@ -1,5 +1,6 @@
namespace GeekLearning.Domain
{
+ using System;
using System.Threading.Tasks;
public static class MaybeExtensions
@@ -8,5 +9,61 @@ public async static Task ValueAsync(this Task> maybeTask) where T
{
return (await maybeTask).Value;
}
+
+ public async static Task> MapAsync(this Task> maybeTask, Func transform) where T : class where R : class
+ {
+ var maybe = await maybeTask;
+
+ if (maybe.HasValue)
+ {
+ return transform(maybe.Value);
+ }
+ else
+ {
+ return maybe.Explanation;
+ }
+ }
+
+ public async static Task> MapAsync(this Task> maybeTask, Func> transform) where T : class where R : class
+ {
+ var maybe = await maybeTask;
+
+ if (maybe.HasValue)
+ {
+ return transform(maybe.Value);
+ }
+ else
+ {
+ return maybe.Explanation;
+ }
+ }
+
+ public async static Task> MapAsync(this Task> maybeTask, Func>> transform) where T : class where R : class
+ {
+ var maybe = await maybeTask;
+
+ if (maybe.HasValue)
+ {
+ return await transform(maybe.Value);
+ }
+ else
+ {
+ return maybe.Explanation;
+ }
+ }
+
+ public async static Task> MapAsync(this Task> maybeTask, Func> transform) where T : class where R : class
+ {
+ var maybe = await maybeTask;
+
+ if (maybe.HasValue)
+ {
+ return await transform(maybe.Value);
+ }
+ else
+ {
+ return maybe.Explanation;
+ }
+ }
}
}
diff --git a/tests/GeekLearning.Domain.Tests/MaybeExtensionsTests.cs b/tests/GeekLearning.Domain.Tests/MaybeExtensionsTests.cs
new file mode 100644
index 0000000..92fa0fb
--- /dev/null
+++ b/tests/GeekLearning.Domain.Tests/MaybeExtensionsTests.cs
@@ -0,0 +1,153 @@
+using System;
+using System.Collections.Generic;
+using System.Linq.Expressions;
+using System.Text;
+using System.Threading.Tasks;
+using GeekLearning.Domain;
+using GeekLearning.Domain.AspnetCore;
+using GeekLearning.Domain.Explanations;
+using Microsoft.Extensions.DependencyModel;
+using Xunit;
+
+namespace GeekLearning.Domain.Tests
+{
+ public class MaybeExtensionsTests
+ {
+
+ private class DataClass
+ {
+ public Guid Id { get; set; } = Guid.NewGuid();
+ }
+
+ private class DataTransformedClass
+ {
+ public String Id { get; set; }
+ }
+
+ [Fact]
+ public async Task MapAsync_Value()
+ {
+ var source = new DataClass();
+ var task = Task.FromResult(Maybe.Some(source));
+
+ var examinee = await task.MapAsync(x => new DataTransformedClass { Id = x.Id.ToString() });
+
+ Assert.True(examinee.HasValue);
+ Assert.Equal(source.Id, Guid.Parse(examinee.Value.Id));
+ }
+
+ [Fact]
+ public async Task MapAsync_NoValue()
+ {
+ var source = new NotFound();
+ var task = Task.FromResult((Maybe)source);
+
+ var examinee = await task.MapAsync(x => new DataTransformedClass { Id = x.Id.ToString() });
+
+ Assert.False(examinee.HasValue);
+ Assert.Equal(source, examinee.Explanation);
+ }
+
+ [Fact]
+ public async Task MapAsync_MaybeValueWithoutTransformationValue()
+ {
+ var source = new DataClass();
+ var tranformationResult = new NotFound();
+ var task = Task.FromResult(Maybe.Some(source));
+
+ var examinee = await task.MapAsync(x => (Maybe)tranformationResult);
+
+ Assert.False(examinee.HasValue);
+ Assert.Equal(tranformationResult, examinee.Explanation);
+
+ }
+
+ [Fact]
+ public async Task MapAsync_MaybeValue()
+ {
+ var source = new DataClass();
+ var task = Task.FromResult(Maybe.Some(source));
+
+ var examinee = await task.MapAsync(x => Maybe.Some(new DataTransformedClass { Id = x.Id.ToString() }));
+
+ Assert.True(examinee.HasValue);
+ Assert.Equal(source.Id, Guid.Parse(examinee.Value.Id));
+ }
+
+ [Fact]
+ public async Task MapAsync_MaybeNoValue()
+ {
+ var source = new NotFound();
+ var task = Task.FromResult((Maybe)source);
+
+ var examinee = await task.MapAsync(x => Maybe.Some(new DataTransformedClass { Id = x.Id.ToString() }));
+
+ Assert.False(examinee.HasValue);
+ Assert.Equal(source, examinee.Explanation);
+ }
+
+ [Fact]
+ public async Task MapAsync_AsyncTranformationValue()
+ {
+ var source = new DataClass();
+ var task = Task.FromResult(Maybe.Some(source));
+
+ var examinee = await task.MapAsync(x => Task.FromResult(new DataTransformedClass { Id = x.Id.ToString() }));
+
+ Assert.True(examinee.HasValue);
+ Assert.Equal(source.Id, Guid.Parse(examinee.Value.Id));
+ }
+
+ [Fact]
+ public async Task MapAsync_AsyncTransformationNoValue()
+ {
+ var source = new NotFound();
+ var task = Task.FromResult((Maybe)source);
+
+ var examinee = await task.MapAsync(x => Task.FromResult(new DataTransformedClass { Id = x.Id.ToString() }));
+
+ Assert.False(examinee.HasValue);
+ Assert.Equal(source, examinee.Explanation);
+ }
+
+ [Fact]
+ public async Task MapAsync_MaybeAsyncTranformationValue()
+ {
+ var source = new DataClass();
+ var task = Task.FromResult(Maybe.Some(source));
+
+ var examinee = await task.MapAsync(x => Task.FromResult(Maybe.Some(new DataTransformedClass { Id = x.Id.ToString() })));
+
+ Assert.True(examinee.HasValue);
+ Assert.Equal(source.Id, Guid.Parse(examinee.Value.Id));
+ }
+
+ [Fact]
+ public async Task MapAsync_MaybeAsyncTransformationNoValue()
+ {
+ var source = new NotFound();
+ var task = Task.FromResult((Maybe)source);
+
+ var examinee = await task.MapAsync(x => Task.FromResult(Maybe.Some(new DataTransformedClass { Id = x.Id.ToString() })));
+
+ Assert.False(examinee.HasValue);
+ Assert.Equal(source, examinee.Explanation);
+ }
+
+
+ [Fact]
+ public async Task MapAsync_MapAsync_MaybeAsyncTranformationValueWithoutTransformationValue()
+ {
+ var source = new DataClass();
+ var tranformationResult = new NotFound();
+ var task = Task.FromResult(Maybe.Some(source));
+
+ var examinee = await task.MapAsync(x => Task.FromResult((Maybe)tranformationResult));
+
+ Assert.False(examinee.HasValue);
+ Assert.Equal(tranformationResult, examinee.Explanation);
+
+ }
+
+ }
+}