Skip to content

Commit 5487af1

Browse files
authored
Added new query results (#91)
1 parent 5d8831b commit 5487af1

4 files changed

Lines changed: 51 additions & 13 deletions

File tree

source/EasyWay.WebApi/Internals/WebApiResultMapper.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public IResult Map(CommandResult commandResult)
1818
CommandErrorEnum.OperationCanceled => Results.StatusCode(499),
1919
CommandErrorEnum.NotFound => Results.StatusCode(404),
2020
CommandErrorEnum.Forbidden => Results.StatusCode(404),
21-
_ => Results.StatusCode(500),
21+
CommandErrorEnum.UnknownException or _ => Results.StatusCode(500),
2222
};
2323
}
2424

@@ -33,7 +33,7 @@ public IResult Map<TOperationResult>(CommandResult<TOperationResult> commandResu
3333
CommandErrorEnum.OperationCanceled => Results.StatusCode(499),
3434
CommandErrorEnum.NotFound => Results.StatusCode(404),
3535
CommandErrorEnum.Forbidden => Results.StatusCode(404),
36-
_ => Results.StatusCode(500),
36+
CommandErrorEnum.UnknownException or _ => Results.StatusCode(500),
3737
};
3838
}
3939

@@ -43,9 +43,10 @@ public IResult Map<TReadModel>(QueryResult<TReadModel> queryResult) where TReadM
4343
{
4444
QueryErrorEnum.None => Results.Ok(queryResult.ReadModel),
4545
QueryErrorEnum.Validation => Results.BadRequest(queryResult.ValidationErrors),
46+
QueryErrorEnum.OperationCanceled => Results.StatusCode(499),
4647
QueryErrorEnum.NotFound => Results.StatusCode(404),
4748
QueryErrorEnum.Forbidden => Results.StatusCode(404),
48-
_ => Results.StatusCode(500),
49+
QueryErrorEnum.UnknownException or _ => Results.StatusCode(500),
4950
};
5051
}
5152
}

source/EasyWay/Internals/Queries/QueryExecutor.cs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public QueryExecutor(IServiceProvider serviceProvider)
1212
_serviceProvider = serviceProvider;
1313
}
1414

15-
public Task<QueryResult<TReadModel>> Execute<TModule, TQuery, TReadModel>(TQuery query, CancellationToken cancellationToken = default)
15+
public async Task<QueryResult<TReadModel>> Execute<TModule, TQuery, TReadModel>(TQuery query, CancellationToken cancellationToken = default)
1616
where TModule : EasyWayModule
1717
where TQuery : Query<TReadModel>
1818
where TReadModel : ReadModel
@@ -27,11 +27,26 @@ public Task<QueryResult<TReadModel>> Execute<TModule, TQuery, TReadModel>(TQuery
2727

2828
if (errors.Any())
2929
{
30-
return Task.FromResult(QueryResult<TReadModel>.Validation(errors));
30+
return QueryResult<TReadModel>.Validation(errors);
3131
}
3232
}
3333

34-
return _serviceProvider.GetRequiredService<QueryHandler<TQuery, TReadModel>>().Handle(query);
34+
QueryResult<TReadModel> result;
35+
36+
try
37+
{
38+
result = await _serviceProvider.GetRequiredService<QueryHandler<TQuery, TReadModel>>().Handle(query);
39+
}
40+
catch (OperationCanceledException)
41+
{
42+
return QueryResult<TReadModel>.OperationCanceled();
43+
}
44+
catch (Exception exception)
45+
{
46+
return QueryResult<TReadModel>.UnknownException(exception);
47+
}
48+
49+
return result;
3550
}
3651
}
3752
}
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
namespace EasyWay.Internals.Queries.Results
22
{
3-
internal enum QueryErrorEnum
3+
internal enum QueryErrorEnum : byte
44
{
5-
None,
6-
Validation,
7-
NotFound,
8-
Forbidden,
5+
None = 1,
6+
Validation = 2,
7+
NotFound = 3,
8+
Forbidden = 4,
9+
OperationCanceled = 5,
10+
UnknownException = 6
911
}
1012
}

source/EasyWay/QueryResult.cs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,54 @@ namespace EasyWay
55
public sealed class QueryResult<TReadModel>
66
where TReadModel : ReadModel
77
{
8-
internal TReadModel ReadModel { get; }
8+
internal TReadModel? ReadModel { get; }
99

1010
internal QueryErrorEnum Error { get; }
1111

1212
internal IDictionary<string, string[]> ValidationErrors;
1313

14+
internal Exception? Exception { get; }
15+
1416
private QueryResult(TReadModel readModel)
1517
{
1618
ReadModel = readModel;
19+
ValidationErrors = new Dictionary<string, string[]>();
1720
Error = QueryErrorEnum.None;
21+
Exception = null;
1822
}
1923

2024
private QueryResult(QueryErrorEnum queryError)
2125
{
2226
ReadModel = null;
27+
ValidationErrors = new Dictionary<string, string[]>();
2328
Error = queryError;
29+
Exception = null;
2430
}
2531

2632
private QueryResult(IDictionary<string, string[]> validationErrors)
2733
{
34+
ReadModel = null;
2835
ValidationErrors = validationErrors;
2936
Error = QueryErrorEnum.Validation;
37+
Exception = null;
3038
}
3139

32-
public static QueryResult<TReadModel> Ok(TReadModel readModel) => new QueryResult<TReadModel>(readModel);
40+
private QueryResult(Exception exception)
41+
{
42+
ReadModel = null;
43+
ValidationErrors = new Dictionary<string, string[]>();
44+
Error = QueryErrorEnum.UnknownException;
45+
Exception = exception;
46+
}
3347

3448
internal static QueryResult<TReadModel> Validation(IDictionary<string, string[]> validationErrors) => new QueryResult<TReadModel>(validationErrors);
3549

50+
internal static QueryResult<TReadModel> OperationCanceled() => new QueryResult<TReadModel>(QueryErrorEnum.OperationCanceled);
51+
52+
internal static QueryResult<TReadModel> UnknownException(Exception exception) => new QueryResult<TReadModel>(exception);
53+
54+
public static QueryResult<TReadModel> Ok(TReadModel readModel) => new QueryResult<TReadModel>(readModel);
55+
3656
public static QueryResult<TReadModel> NotFound => new QueryResult<TReadModel>(QueryErrorEnum.NotFound);
3757

3858
public static QueryResult<TReadModel> Forbidden => new QueryResult<TReadModel>(QueryErrorEnum.Forbidden);

0 commit comments

Comments
 (0)