Skip to content

Commit ab99125

Browse files
authored
Merge pull request #62 from futurum-dev/feature/WebApiEndpointExecutorService-code-cleanup
WebApiEndpointExecutorService - code cleanup
2 parents 01a9ca2 + 7f58a90 commit ab99125

File tree

3 files changed

+38
-31
lines changed

3 files changed

+38
-31
lines changed

benchmark/Futurum.WebApiEndpoint.Benchmark.WebApiEndpoint/NoOpWebApiEndpointLogger.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ public void Error(string path, IResultError error)
2020
{
2121
}
2222

23-
public void Error(Exception exception, IWebApiEndpointLogger.WebApiRouteErrorData errorData)
23+
public void ErrorUnhandled(Exception exception, string route, string path, string status, int statusCode, string reason)
2424
{
2525
}
2626

27-
public void Error(IWebApiEndpointLogger.WebApiEndpointNotFoundData errorData)
27+
public void ErrorWebApiEndpointNotFound(string path, string httpMethod)
2828
{
2929
}
3030

src/Futurum.WebApiEndpoint/Internal/WebApiEndpointExecutorService.cs

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,30 @@ namespace Futurum.WebApiEndpoint.Internal;
99

1010
internal static class WebApiEndpointExecutorService
1111
{
12-
public static async Task ExecuteAsync(HttpContext httpContext, MetadataDefinition? metadataDefinition, string routePath, CancellationToken cancellationToken)
12+
public static Task ExecuteAsync(HttpContext httpContext, MetadataDefinition? metadataDefinition, string routePath, CancellationToken cancellationToken) =>
13+
metadataDefinition != null
14+
? WebApiEndpointAsync(httpContext, metadataDefinition, routePath, cancellationToken)
15+
: WebApiEndpointNotFoundAsync(httpContext, routePath, cancellationToken);
16+
17+
private static async Task WebApiEndpointAsync(HttpContext httpContext, MetadataDefinition metadataDefinition, string routePath, CancellationToken cancellationToken)
1318
{
1419
try
1520
{
16-
if (metadataDefinition != null)
17-
await CallWebApiEndpointAsync(httpContext, metadataDefinition, cancellationToken).UnwrapAsync();
18-
else
19-
await WebApiEndpointNotFoundAsync(httpContext, routePath, cancellationToken);
21+
await CallWebApiEndpointAsync(httpContext, metadataDefinition, cancellationToken).UnwrapAsync();
2022
}
2123
catch (Exception exception)
2224
{
23-
var errorData = new IWebApiEndpointLogger.WebApiRouteErrorData(routePath, httpContext.Request.Path, "Internal Server Error", (int)HttpStatusCode.InternalServerError, exception.Message);
25+
const HttpStatusCode internalServerError = HttpStatusCode.InternalServerError;
26+
27+
string requestPath = httpContext.Request.Path;
2428

2529
var webApiEndpointLogger = httpContext.RequestServices.GetService<IWebApiEndpointLogger>();
26-
webApiEndpointLogger.Error(exception, errorData);
30+
webApiEndpointLogger.ErrorUnhandled(exception, routePath, requestPath, "Internal Server Error", (int)internalServerError, exception.Message);
2731

28-
var errorResponse = HttpStatusCode.InternalServerError.ToResultError(exception.ToResultError())
29-
.ToProblemDetails((int)HttpStatusCode.InternalServerError, httpContext.Request.Path);
32+
var errorResponse = internalServerError.ToResultError(exception.ToResultError())
33+
.ToProblemDetails((int)internalServerError, requestPath);
3034

31-
httpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
35+
httpContext.Response.StatusCode = (int)internalServerError;
3236

3337
httpContext.Response.ContentType = WebApiEndpointContentType.ProblemJson;
3438

@@ -38,22 +42,21 @@ public static async Task ExecuteAsync(HttpContext httpContext, MetadataDefinitio
3842

3943
private static Task<Result<IWebApiEndpointDispatcher>> CallWebApiEndpointAsync(HttpContext httpContext, MetadataDefinition metadataDefinition, CancellationToken cancellationToken) =>
4044
httpContext.RequestServices.TryGetService<IWebApiEndpointDispatcher>(metadataDefinition.MetadataTypeDefinition.WebApiEndpointExecutorServiceType)
41-
.ThenAsync(webApiEndpointDispatcher => webApiEndpointDispatcher.ExecuteAsync(metadataDefinition, httpContext, cancellationToken));
45+
.ThenAsync(webApiEndpointDispatcher => webApiEndpointDispatcher.ExecuteAsync(metadataDefinition, httpContext, cancellationToken));
4246

4347
private static Task WebApiEndpointNotFoundAsync(HttpContext httpContext, string routePath, CancellationToken cancellationToken)
4448
{
45-
var eventData = new IWebApiEndpointLogger.WebApiEndpointNotFoundData(routePath, httpContext.Request.Method);
49+
const HttpStatusCode failedStatusCode = HttpStatusCode.BadRequest;
50+
51+
string requestPath = httpContext.Request.Path;
4652

4753
var webApiEndpointLogger = httpContext.RequestServices.GetService<IWebApiEndpointLogger>();
48-
webApiEndpointLogger.Error(eventData);
54+
webApiEndpointLogger.ErrorWebApiEndpointNotFound(routePath, httpContext.Request.Method);
4955

50-
var failedStatusCode = (int)HttpStatusCode.BadRequest;
56+
var errorResponse = $"WebApiEndpoint - Unable to find WebApiEndpoint for route : '{routePath}'".ToResultError()
57+
.ToProblemDetails((int)failedStatusCode, requestPath);
5158

52-
var errorResponse = $"WebApiEndpoint - Unable to find WebApiEndpoint for route : '{routePath}'"
53-
.ToResultError()
54-
.ToProblemDetails(failedStatusCode, httpContext.Request.Path);
55-
56-
httpContext.Response.StatusCode = failedStatusCode;
59+
httpContext.Response.StatusCode = (int)failedStatusCode;
5760

5861
httpContext.Response.ContentType = WebApiEndpointContentType.ProblemJson;
5962

src/Futurum.WebApiEndpoint/WebApiEndpointLogger.cs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,11 @@ public interface IWebApiEndpointLogger : IApiEndpointLogger
1616

1717
void Error(string path, IResultError error);
1818

19-
void Error(Exception exception, WebApiRouteErrorData errorData);
19+
void ErrorUnhandled(Exception exception, string route, string path, string status, int statusCode, string reason);
2020

21-
void Error(WebApiEndpointNotFoundData errorData);
21+
void ErrorWebApiEndpointNotFound(string path, string httpMethod);
2222

2323
void EndpointConfiguring(string route, MetadataRouteDefinition metadataRouteDefinition);
24-
25-
public record struct WebApiEndpointNotFoundData(string RoutePath, string HttpMethod);
26-
27-
public record struct WebApiRouteErrorData(string Route, string Path, string Status, int StatusCode, string Reason);
2824
}
2925

3026
[ExcludeFromCodeCoverage]
@@ -58,14 +54,18 @@ public void Error(string path, IResultError error)
5854
_logger.Error("WebApiEndpoint error {@eventData}", eventData);
5955
}
6056

61-
public void Error(Exception exception, IWebApiEndpointLogger.WebApiRouteErrorData errorData)
57+
public void ErrorUnhandled(Exception exception, string Route, string Path, string Status, int StatusCode, string Reason)
6258
{
63-
_logger.Error(exception, "WebApiEndpoint error - {@eventData}", errorData);
59+
var eventData = new WebApiRouteErrorData(Route, Path, Status, StatusCode, Reason);
60+
61+
_logger.Error(exception, "WebApiEndpoint error - {@eventData}", eventData);
6462
}
6563

66-
public void Error(IWebApiEndpointLogger.WebApiEndpointNotFoundData errorData)
64+
public void ErrorWebApiEndpointNotFound(string path, string httpMethod)
6765
{
68-
_logger.Error("Unable to find WebApiEndpoint - {@eventData}", errorData);
66+
var eventData = new WebApiEndpointNotFoundData(path, httpMethod);
67+
68+
_logger.Error("Unable to find WebApiEndpoint - {@eventData}", eventData);
6969
}
7070

7171
public void ApiEndpointDebugLog(string apiEndpointDebugLog)
@@ -88,6 +88,10 @@ private record struct ResponseSentData<TResponse>(Type RequestType, Type Respons
8888

8989
private record struct ErrorData(string Path, string Error);
9090

91+
private record struct WebApiEndpointNotFoundData(string Path, string HttpMethod);
92+
93+
private record struct WebApiRouteErrorData(string Route, string Path, string Status, int StatusCode, string Reason);
94+
9195
private record struct ApiEndpoints(string Log);
9296

9397
private record struct EndpointConfiguringData(string Route, MetadataRouteDefinition MetadataRouteDefinition);

0 commit comments

Comments
 (0)