using Commerce.Contracts.DTOs; using Commerce.Core.Services; using Commerce.Domain.Entities; using Generic.Contracts.Generics; using Microsoft.AspNetCore.Mvc; namespace Commerce.Endpoints.v1; public static class CategoryMap { public static RouteGroupBuilder CategoryEndpoints(this RouteGroupBuilder group) { // No Fetch group.MapGet( "categories", async ( [AsParameters] CategoryFilter categoryFilter, [AsParameters] Pagination pagination, CategoryService categoryService, HttpContext httpContext ) => { var result = await categoryService.FetchCategory(categoryFilter, pagination); httpContext.Response.Headers["X-Pagination"] = result.Item2.ToString(); return result.Item1; } ); group.MapGet( "categories/tree", async (string? name, CategoryService categoryService) => { var result = await categoryService.GetAllCategories_Tree(name ?? ""); return result.Select(x => Category.ToVM(x)).ToList(); } ); // No Get group.MapGet( "category/{id}", async (Guid id, CategoryService categoryService) => { return await categoryService.GetCategory(id); } ); // No Delete group .MapDelete( "category/{id}", async (Guid id, HttpContext httpContext, CategoryService categoryService) => { var userId = httpContext.User.Claims.First(x => x.Type == "uid").Value; await categoryService.RemoveCategory(id); } ) .RequireAuthorization(); // No Put group.MapPut( "category", async ([FromBody] CategoryVM category, CategoryService categoryService) => { await categoryService.UpdateCategory(category); } ); // No Post group.MapPost( "category", async ([FromBody] CategoryVM category, CategoryService categoryService) => { await categoryService.CreateCategory(category); } ); return group; } }