78 lines
2.0 KiB
C#
78 lines
2.0 KiB
C#
|
|
using Commerce.Contracts.DTOs;
|
|
using Commerce.Core.Services;
|
|
using Generic.Contracts.Generics;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace Commerce.Endpoints.v1;
|
|
|
|
public static class ProductMap
|
|
{
|
|
public static RouteGroupBuilder ProductEndpoints(this RouteGroupBuilder group)
|
|
{
|
|
|
|
|
|
// No Fetch
|
|
group.MapGet(
|
|
"products",
|
|
async (
|
|
[AsParameters] ProductFilter productFilter,
|
|
[AsParameters] Pagination pagination,
|
|
HttpContext httpContext,
|
|
ProductService productService
|
|
) =>
|
|
{
|
|
var result = await productService.FetchProduct(productFilter, pagination);
|
|
httpContext.Response.Headers["X-Pagination"] = result.Item2.ToString();
|
|
|
|
return result.Item1;
|
|
}
|
|
);
|
|
|
|
|
|
// No Get
|
|
group.MapGet(
|
|
"product/{id}",
|
|
async (Guid id, ProductService productService) =>
|
|
{
|
|
return await productService.GetProduct(id);
|
|
}
|
|
);
|
|
|
|
|
|
|
|
// No Delete
|
|
group.MapDelete(
|
|
"product/{id}",
|
|
async (Guid id, HttpContext httpContext, ProductService productService) =>
|
|
{
|
|
var userId = httpContext.User.Claims.First(x => x.Type == "uid").Value;
|
|
await productService.RemoveProduct(id);
|
|
}
|
|
)
|
|
.RequireAuthorization();
|
|
|
|
// No Put
|
|
group.MapPut(
|
|
"product",
|
|
async ([FromBody] ProductVM product, ProductService productService) =>
|
|
{
|
|
await productService.UpdateProduct(product);
|
|
}
|
|
);
|
|
|
|
|
|
|
|
// No Post
|
|
group.MapPost(
|
|
"product",
|
|
async ([FromBody] ProductVM product, ProductService productService) =>
|
|
{
|
|
await productService.CreateProduct(product);
|
|
}
|
|
);
|
|
|
|
return group;
|
|
}
|
|
}
|