Skip to content

Commit

Permalink
Used Minimal APIs builders instead of custom one in Warehouse CQRS ex…
Browse files Browse the repository at this point in the history
…ample
  • Loading branch information
oskardudycz committed May 14, 2022
1 parent bb6c3fe commit 8038755
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 138 deletions.
Expand Up @@ -63,15 +63,15 @@ public async Task ValidRequest_With_NoParams_ShouldReturn_200()
[Theory]
[InlineData(12)]
[InlineData("not-a-guid")]
public async Task InvalidGuidId_ShouldReturn_400(object invalidId)
public async Task InvalidGuidId_ShouldReturn_404(object invalidId)
{
// Given

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

// Then
response.StatusCode.Should().Be(HttpStatusCode.BadRequest);
response.StatusCode.Should().Be(HttpStatusCode.NotFound);
}

[Fact]
Expand All @@ -86,4 +86,4 @@ public async Task NotExistingId_ShouldReturn_404()
// Then
response.StatusCode.Should().Be(HttpStatusCode.NotFound);
}
}
}
8 changes: 6 additions & 2 deletions Sample/Warehouse/Warehouse.Api/Program.cs
Expand Up @@ -8,7 +8,9 @@
.ConfigureServices(services =>
{
services.AddRouting()
.AddWarehouseServices();
.AddWarehouseServices()
.AddEndpointsApiExplorer()
.AddSwaggerGen();
})
.Configure(app =>
{
Expand All @@ -18,7 +20,9 @@
{
endpoints.UseWarehouseEndpoints();
})
.ConfigureWarehouse();
.ConfigureWarehouse()
.UseSwagger()
.UseSwaggerUI();
});
})
.Build();
Expand Down
2 changes: 1 addition & 1 deletion Sample/Warehouse/Warehouse/Configuration.cs
Expand Up @@ -24,7 +24,7 @@ public static IApplicationBuilder ConfigureWarehouse(this IApplicationBuilder ap

if (environment == "Development")
{
app.ApplicationServices.GetRequiredService<WarehouseDBContext>().Database.Migrate();
app.ApplicationServices.CreateScope().ServiceProvider.GetRequiredService<WarehouseDBContext>().Database.Migrate();
}

return app;
Expand Down
100 changes: 0 additions & 100 deletions Sample/Warehouse/Warehouse/Core/Extensions/HttpExtensions.cs

This file was deleted.

21 changes: 6 additions & 15 deletions Sample/Warehouse/Warehouse/Products/GettingProductDetails/Route.cs
@@ -1,33 +1,24 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Warehouse.Core.Extensions;
using Warehouse.Core.Queries;
using static Microsoft.AspNetCore.Http.Results;

namespace Warehouse.Products.GettingProductDetails;

public static class Route
{
internal static IEndpointRouteBuilder UseGetProductDetailsEndpoint(this IEndpointRouteBuilder endpoints)
{
endpoints.MapGet("/api/products/{id}", async context =>
endpoints.MapGet("/api/products/{id:guid}", async (HttpContext context, Guid id) =>
{
// var dbContext = WarehouseDBContextFactory.Create();
// var handler = new HandleGetProductDetails(dbContext.Set<Product>().AsQueryable());
var productId = context.FromRoute<Guid>("id");
var query = GetProductDetails.Create(productId);
var query = GetProductDetails.Create(id);
var result = await context
.SendQuery<GetProductDetails, ProductDetails?>(query);
if (result == null)
{
context.NotFound();
return;
}
await context.OK(result);
return result != null ? Ok(result) : NotFound();
});
return endpoints;
}
}
}
17 changes: 6 additions & 11 deletions Sample/Warehouse/Warehouse/Products/GettingProducts/Route.cs
@@ -1,30 +1,25 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing;
using Warehouse.Core.Extensions;
using Warehouse.Core.Queries;
using static Microsoft.AspNetCore.Http.Results;

namespace Warehouse.Products.GettingProducts;

public static class Route
{
internal static IEndpointRouteBuilder UseGetProductsEndpoint(this IEndpointRouteBuilder endpoints)
{
endpoints.MapGet("/api/products", async context =>
endpoints.MapGet("/api/products", async (HttpContext context, [FromQuery]string? filter, [FromQuery]int? page, [FromQuery]int? pageSize) =>
{
// var dbContext = WarehouseDBContextFactory.Create();
// var handler = new HandleGetProducts(dbContext.Set<Product>().AsQueryable());
var filter = context.FromQuery("filter");
var page = context.FromQuery<int>("page");
var pageSize = context.FromQuery<int>("pageSize");
var query = GetProducts.Create(filter, page, pageSize);
var result = await context
.SendQuery<GetProducts, IReadOnlyList<ProductListItem>>(query);
await context.OK(result);
return Ok(result);
});
return endpoints;
}
}
}
15 changes: 9 additions & 6 deletions Sample/Warehouse/Warehouse/Products/RegisteringProduct/Route.cs
@@ -1,7 +1,9 @@
using Microsoft.AspNetCore.Builder;
using System.Net;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Warehouse.Core.Commands;
using Warehouse.Core.Extensions;
using static Microsoft.AspNetCore.Http.Results;

namespace Warehouse.Products.RegisteringProduct;

Expand All @@ -15,18 +17,19 @@ internal static class Route
{
internal static IEndpointRouteBuilder UseRegisterProductEndpoint(this IEndpointRouteBuilder endpoints)
{
endpoints.MapPost("api/products/", async context =>
endpoints.MapPost("api/products/", async (HttpContext context, RegisterProductRequest request) =>
{
var (sku, name, description) = await context.FromBody<RegisterProductRequest>();
var (sku, name, description) = request;
var productId = Guid.NewGuid();
var command = RegisterProduct.Create(productId, sku, name, description);
await context.SendCommand(command);
await context.Created(productId);
return Created($"/api/products/{productId}", productId);
});


return endpoints;
}
}
}

0 comments on commit 8038755

Please sign in to comment.