namespace HiVakil.Api.Controller; public class BlogController : ICarterModule { public void AddRoutes(IEndpointRouteBuilder app) { var group = app.NewVersionedApi("Blog") .MapGroup("api/blog"); group.MapGet("", GetBlogsAsync) .WithDisplayName("GetBlogs") .HasApiVersion(1.0); group.MapGet("{id}", GetBlogAsync) .WithDisplayName("GetBlog") .HasApiVersion(1.0); group.MapPost("", CreateBlogAsync) .WithDisplayName("CreateBlog") .RequireAuthorization(builder=>builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser().RequireClaim(CustomClaimType.Permission,ApplicationPermission.ManageBlogs)) .HasApiVersion(1.0); group.MapPut("", UpdateBlogAsync) .WithDisplayName("UpdateBlog") .RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser().RequireClaim(CustomClaimType.Permission, ApplicationPermission.ManageBlogs)) .HasApiVersion(1.0); group.MapDelete("{id}", DeleteBlogAsync) .WithDisplayName("DeleteBlog") .RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser().RequireClaim(CustomClaimType.Permission, ApplicationPermission.ManageBlogs)) .HasApiVersion(1.0); } private async Task GetBlogsAsync([FromQuery] int page, [FromServices] IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok(await mediator.Send(new GetBlogsQuery(Page : page),cancellationToken)); private async Task GetBlogAsync(Guid id, [FromServices] IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok(await mediator.Send(new GetBlogQuery(id),cancellationToken)); private async Task CreateBlogAsync(CreateBlogCommand request, [FromServices] IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok(await mediator.Send(request, cancellationToken)); private async Task UpdateBlogAsync(UpdateBlogCommand request, [FromServices] IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok(await mediator.Send(request, cancellationToken)); private async Task DeleteBlogAsync(Guid id, [FromServices] IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok(await mediator.Send(new DeleteBlogCommand(id), cancellationToken)); }