Skip to content

Commit 8038755

Browse files
committed
Used Minimal APIs builders instead of custom one in Warehouse CQRS example
1 parent bb6c3fe commit 8038755

File tree

7 files changed

+31
-138
lines changed

7 files changed

+31
-138
lines changed

Sample/Warehouse/Warehouse.Api.Tests/Products/GettingProductDetails/GetProductDetailsTests.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,15 @@ public async Task ValidRequest_With_NoParams_ShouldReturn_200()
6363
[Theory]
6464
[InlineData(12)]
6565
[InlineData("not-a-guid")]
66-
public async Task InvalidGuidId_ShouldReturn_400(object invalidId)
66+
public async Task InvalidGuidId_ShouldReturn_404(object invalidId)
6767
{
6868
// Given
6969

7070
// When
7171
var response = await fixture.Get($"{invalidId}");
7272

7373
// Then
74-
response.StatusCode.Should().Be(HttpStatusCode.BadRequest);
74+
response.StatusCode.Should().Be(HttpStatusCode.NotFound);
7575
}
7676

7777
[Fact]
@@ -86,4 +86,4 @@ public async Task NotExistingId_ShouldReturn_404()
8686
// Then
8787
response.StatusCode.Should().Be(HttpStatusCode.NotFound);
8888
}
89-
}
89+
}

Sample/Warehouse/Warehouse.Api/Program.cs

+6-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@
88
.ConfigureServices(services =>
99
{
1010
services.AddRouting()
11-
.AddWarehouseServices();
11+
.AddWarehouseServices()
12+
.AddEndpointsApiExplorer()
13+
.AddSwaggerGen();
1214
})
1315
.Configure(app =>
1416
{
@@ -18,7 +20,9 @@
1820
{
1921
endpoints.UseWarehouseEndpoints();
2022
})
21-
.ConfigureWarehouse();
23+
.ConfigureWarehouse()
24+
.UseSwagger()
25+
.UseSwaggerUI();
2226
});
2327
})
2428
.Build();

Sample/Warehouse/Warehouse/Configuration.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public static IApplicationBuilder ConfigureWarehouse(this IApplicationBuilder ap
2424

2525
if (environment == "Development")
2626
{
27-
app.ApplicationServices.GetRequiredService<WarehouseDBContext>().Database.Migrate();
27+
app.ApplicationServices.CreateScope().ServiceProvider.GetRequiredService<WarehouseDBContext>().Database.Migrate();
2828
}
2929

3030
return app;

Sample/Warehouse/Warehouse/Core/Extensions/HttpExtensions.cs

-100
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,24 @@
11
using Microsoft.AspNetCore.Builder;
2+
using Microsoft.AspNetCore.Http;
23
using Microsoft.AspNetCore.Routing;
3-
using Warehouse.Core.Extensions;
44
using Warehouse.Core.Queries;
5+
using static Microsoft.AspNetCore.Http.Results;
56

67
namespace Warehouse.Products.GettingProductDetails;
78

89
public static class Route
910
{
1011
internal static IEndpointRouteBuilder UseGetProductDetailsEndpoint(this IEndpointRouteBuilder endpoints)
1112
{
12-
endpoints.MapGet("/api/products/{id}", async context =>
13+
endpoints.MapGet("/api/products/{id:guid}", async (HttpContext context, Guid id) =>
1314
{
14-
// var dbContext = WarehouseDBContextFactory.Create();
15-
// var handler = new HandleGetProductDetails(dbContext.Set<Product>().AsQueryable());
16-
17-
var productId = context.FromRoute<Guid>("id");
18-
var query = GetProductDetails.Create(productId);
15+
var query = GetProductDetails.Create(id);
1916

2017
var result = await context
2118
.SendQuery<GetProductDetails, ProductDetails?>(query);
2219

23-
if (result == null)
24-
{
25-
context.NotFound();
26-
return;
27-
}
28-
29-
await context.OK(result);
20+
return result != null ? Ok(result) : NotFound();
3021
});
3122
return endpoints;
3223
}
33-
}
24+
}
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,25 @@
11
using Microsoft.AspNetCore.Builder;
2+
using Microsoft.AspNetCore.Http;
3+
using Microsoft.AspNetCore.Mvc;
24
using Microsoft.AspNetCore.Routing;
3-
using Warehouse.Core.Extensions;
45
using Warehouse.Core.Queries;
6+
using static Microsoft.AspNetCore.Http.Results;
57

68
namespace Warehouse.Products.GettingProducts;
79

810
public static class Route
911
{
1012
internal static IEndpointRouteBuilder UseGetProductsEndpoint(this IEndpointRouteBuilder endpoints)
1113
{
12-
endpoints.MapGet("/api/products", async context =>
14+
endpoints.MapGet("/api/products", async (HttpContext context, [FromQuery]string? filter, [FromQuery]int? page, [FromQuery]int? pageSize) =>
1315
{
14-
// var dbContext = WarehouseDBContextFactory.Create();
15-
// var handler = new HandleGetProducts(dbContext.Set<Product>().AsQueryable());
16-
17-
var filter = context.FromQuery("filter");
18-
var page = context.FromQuery<int>("page");
19-
var pageSize = context.FromQuery<int>("pageSize");
20-
2116
var query = GetProducts.Create(filter, page, pageSize);
2217

2318
var result = await context
2419
.SendQuery<GetProducts, IReadOnlyList<ProductListItem>>(query);
2520

26-
await context.OK(result);
21+
return Ok(result);
2722
});
2823
return endpoints;
2924
}
30-
}
25+
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
using Microsoft.AspNetCore.Builder;
1+
using System.Net;
2+
using Microsoft.AspNetCore.Builder;
3+
using Microsoft.AspNetCore.Http;
24
using Microsoft.AspNetCore.Routing;
35
using Warehouse.Core.Commands;
4-
using Warehouse.Core.Extensions;
6+
using static Microsoft.AspNetCore.Http.Results;
57

68
namespace Warehouse.Products.RegisteringProduct;
79

@@ -15,18 +17,19 @@ internal static class Route
1517
{
1618
internal static IEndpointRouteBuilder UseRegisterProductEndpoint(this IEndpointRouteBuilder endpoints)
1719
{
18-
endpoints.MapPost("api/products/", async context =>
20+
endpoints.MapPost("api/products/", async (HttpContext context, RegisterProductRequest request) =>
1921
{
20-
var (sku, name, description) = await context.FromBody<RegisterProductRequest>();
22+
var (sku, name, description) = request;
2123
var productId = Guid.NewGuid();
2224

2325
var command = RegisterProduct.Create(productId, sku, name, description);
2426

2527
await context.SendCommand(command);
2628

27-
await context.Created(productId);
29+
return Created($"/api/products/{productId}", productId);
2830
});
2931

32+
3033
return endpoints;
3134
}
32-
}
35+
}

0 commit comments

Comments
 (0)