using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing;
using Microsoft.eShopWeb.ApplicationCore.Entities;
using Microsoft.eShopWeb.ApplicationCore.Interfaces;
using MinimalApi.Endpoint;
namespace Microsoft.eShopWeb.PublicApi.CatalogItemEndpoints;
///
/// Get a Catalog Item by Id
///
public class CatalogItemGetByIdEndpoint : IEndpoint>
{
private readonly IUriComposer _uriComposer;
public CatalogItemGetByIdEndpoint(IUriComposer uriComposer)
{
_uriComposer = uriComposer;
}
public void AddRoute(IEndpointRouteBuilder app)
{
app.MapGet("api/catalog-items/{catalogItemId}",
async (int catalogItemId, IRepository itemRepository) =>
{
return await HandleAsync(new GetByIdCatalogItemRequest(catalogItemId), itemRepository);
})
.Produces()
.WithTags("CatalogItemEndpoints");
}
public async Task HandleAsync(GetByIdCatalogItemRequest request, IRepository itemRepository)
{
var response = new GetByIdCatalogItemResponse(request.CorrelationId());
var item = await itemRepository.GetByIdAsync(request.CatalogItemId);
if (item is null)
return Results.NotFound();
response.CatalogItem = new CatalogItemDto
{
Id = item.Id,
CatalogBrandId = item.CatalogBrandId,
CatalogTypeId = item.CatalogTypeId,
Description = item.Description,
Name = item.Name,
PictureUri = _uriComposer.ComposePicUri(item.PictureUri),
Price = item.Price
};
return Results.Ok(response);
}
}