Browse Source

Move the pic controller to a minimal API

davidfowl/common-services
David Fowler 1 year ago
committed by Reuben Bond
parent
commit
d5533c0ff9
11 changed files with 53 additions and 72 deletions
  1. +0
    -2
      src/ApiGateways/Web.Bff.Shopping/aggregator/Program.cs
  2. +1
    -0
      src/Directory.Packages.props
  3. +0
    -2
      src/Services/Basket/Basket.API/Program.cs
  4. +42
    -0
      src/Services/Catalog/Catalog.API/Apis/PicApi.cs
  5. +0
    -61
      src/Services/Catalog/Catalog.API/Controllers/PicController.cs
  6. +1
    -1
      src/Services/Catalog/Catalog.API/GlobalUsings.cs
  7. +1
    -2
      src/Services/Catalog/Catalog.API/Program.cs
  8. +0
    -2
      src/Services/Ordering/Ordering.API/Program.cs
  9. +7
    -1
      src/Services/Services.Common/CommonExtensions.cs
  10. +1
    -0
      src/Services/Services.Common/Services.Common.csproj
  11. +0
    -1
      src/Services/Webhooks/Webhooks.API/Program.cs

+ 0
- 2
src/ApiGateways/Web.Bff.Shopping/aggregator/Program.cs View File

@ -32,8 +32,6 @@ app.UseCors("CorsPolicy");
app.UseAuthentication();
app.UseAuthorization();
app.MapGet("/", () => Results.Redirect("/swagger"));
app.MapControllers();
app.MapReverseProxy();


+ 1
- 0
src/Directory.Packages.props View File

@ -49,6 +49,7 @@
<PackageVersion Include="Microsoft.AspNetCore.Identity.UI" Version="7.0.3" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.3" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="7.0.3" />
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="7.0.5" />
<PackageVersion Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="7.0.3" />
<PackageVersion Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="7.0.3" />
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Version="7.0.3" />


+ 0
- 2
src/Services/Basket/Basket.API/Program.cs View File

@ -19,8 +19,6 @@ var app = builder.Build();
app.UseServiceDefaults();
app.MapGet("/", () => Results.Redirect("/swagger"));
app.MapGrpcService<BasketService>();
app.MapControllers();


+ 42
- 0
src/Services/Catalog/Catalog.API/Apis/PicApi.cs View File

@ -0,0 +1,42 @@
using Microsoft.AspNetCore.Routing;
namespace Catalog.API.Apis;
public static class PicApi
{
public static IEndpointConventionBuilder MapPicApi(this IEndpointRouteBuilder routes)
{
return routes.MapGet("api/v1/catalog/items/{catalogItemId:int}/pic",
async (int catalogItemId, CatalogContext db, IWebHostEnvironment environment) =>
{
var item = await db.CatalogItems.FindAsync(catalogItemId);
if (item is null)
{
return Results.NotFound();
}
var path = Path.Combine(environment.ContentRootPath, "Pics", item.PictureFileName);
string imageFileExtension = Path.GetExtension(item.PictureFileName);
string mimetype = GetImageMimeTypeFromImageFileExtension(imageFileExtension);
return Results.File(path, mimetype);
})
.WithTags("Pic")
.Produces(404);
static string GetImageMimeTypeFromImageFileExtension(string extension) => extension switch
{
".png" => "image/png",
".gif" => "image/gif",
".jpg" or ".jpeg" => "image/jpeg",
".bmp" => "image/bmp",
".tiff" => "image/tiff",
".wmf" => "image/wmf",
".jp2" => "image/jp2",
".svg" => "image/svg+xml",
_ => "application/octet-stream",
};
}
}

+ 0
- 61
src/Services/Catalog/Catalog.API/Controllers/PicController.cs View File

@ -1,61 +0,0 @@
// For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860
namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers;
[ApiController]
public class PicController : ControllerBase
{
private readonly IWebHostEnvironment _env;
private readonly CatalogContext _catalogContext;
public PicController(IWebHostEnvironment env,
CatalogContext catalogContext)
{
_env = env;
_catalogContext = catalogContext;
}
[HttpGet]
[Route("api/v1/catalog/items/{catalogItemId:int}/pic")]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
[ProducesResponseType((int)HttpStatusCode.BadRequest)]
// GET: /<controller>/
public async Task<ActionResult> GetImageAsync(int catalogItemId)
{
if (catalogItemId <= 0)
{
return BadRequest();
}
var item = await _catalogContext.CatalogItems
.SingleOrDefaultAsync(ci => ci.Id == catalogItemId);
if (item != null)
{
var path = Path.Combine(_env.ContentRootPath, "Pics", item.PictureFileName);
string imageFileExtension = Path.GetExtension(item.PictureFileName);
string mimetype = GetImageMimeTypeFromImageFileExtension(imageFileExtension);
return PhysicalFile(path, mimetype);
}
return NotFound();
}
private string GetImageMimeTypeFromImageFileExtension(string extension)
{
string mimetype = extension switch
{
".png" => "image/png",
".gif" => "image/gif",
".jpg" or ".jpeg" => "image/jpeg",
".bmp" => "image/bmp",
".tiff" => "image/tiff",
".wmf" => "image/wmf",
".jp2" => "image/jp2",
".svg" => "image/svg+xml",
_ => "application/octet-stream",
};
return mimetype;
}
}

+ 1
- 1
src/Services/Catalog/Catalog.API/GlobalUsings.cs View File

@ -35,9 +35,9 @@ global using Microsoft.eShopOnContainers.Services.Catalog.API.Model;
global using Microsoft.eShopOnContainers.Services.Catalog.API.ViewModel;
global using Microsoft.Extensions.Configuration;
global using Microsoft.Extensions.DependencyInjection;
global using Microsoft.Extensions.FileProviders;
global using Microsoft.Extensions.Logging;
global using Microsoft.Extensions.Options;
global using Polly;
global using Polly.Retry;
global using Services.Common;
global using Catalog.API.Apis;

+ 1
- 2
src/Services/Catalog/Catalog.API/Program.cs View File

@ -18,8 +18,7 @@ var app = builder.Build();
app.UseServiceDefaults();
app.MapGet("/", () => Results.Redirect("/swagger"));
app.MapPicApi();
app.MapControllers();
app.MapGrpcService<CatalogService>();


+ 0
- 2
src/Services/Ordering/Ordering.API/Program.cs View File

@ -44,8 +44,6 @@ var app = builder.Build();
app.UseServiceDefaults();
app.MapGet("/", () => Results.Redirect("/swagger"));
app.MapGrpcService<OrderingService>();
app.MapControllers();


+ 7
- 1
src/Services/Services.Common/CommonExtensions.cs View File

@ -4,6 +4,7 @@ using HealthChecks.UI.Client;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Diagnostics.HealthChecks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus;
using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions;
@ -100,7 +101,7 @@ public static class CommonExtensions
return true;
}
public static IApplicationBuilder UseDefaultOpenApi(this IApplicationBuilder app, IConfiguration configuration)
public static IApplicationBuilder UseDefaultOpenApi(this WebApplication app, IConfiguration configuration)
{
var openApiSection = configuration.GetSection("OpenApi");
@ -139,6 +140,9 @@ public static class CommonExtensions
}
});
// Add a redirect from the root of the app to the swagger endpoint
app.MapGet("/", () => Results.Redirect("/swagger")).ExcludeFromDescription();
return app;
}
@ -151,6 +155,8 @@ public static class CommonExtensions
return services;
}
services.AddEndpointsApiExplorer();
return services.AddSwaggerGen(options =>
{
/// {


+ 1
- 0
src/Services/Services.Common/Services.Common.csproj View File

@ -29,6 +29,7 @@
<PackageReference Include="Microsoft.AspNetCore.HealthChecks" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" />
<PackageReference Include="Microsoft.AspNetCore.Identity.UI" />
<PackageReference Include="Microsoft.AspNetCore.OpenApi" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>


+ 0
- 1
src/Services/Webhooks/Webhooks.API/Program.cs View File

@ -21,7 +21,6 @@ var app = builder.Build();
app.UseServiceDefaults();
app.MapGet("/", () => Results.Redirect("/swagger"));
app.MapControllers();
var eventBus = app.Services.GetRequiredService<IEventBus>();


Loading…
Cancel
Save