using Netina.Domain.CommandQueries.Commands; using Netina.Domain.CommandQueries.Queries; using Netina.Domain.Models.Claims; namespace Netina.Api.Controller; public class ProductReviewController : ICarterModule { public void AddRoutes(IEndpointRouteBuilder app) { var group = app.NewVersionedApi("ProductReview") .MapGroup("product/review"); group.MapGet("{id}", GetAsync) .WithDisplayName("GetOneAsync") .RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser().RequireClaim(CustomClaimType.Permission, ApplicationPermission.ViewAllReviews,ApplicationPermission.ManageReview)) .HasApiVersion(1.0); group.MapGet("", GetAllAsync) .WithDisplayName("GetAllAsync") .RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser().RequireClaim(CustomClaimType.Permission, ApplicationPermission.ViewAllReviews, ApplicationPermission.ManageReview)) .HasApiVersion(1.0); group.MapPost("", PostAsync) .WithDisplayName("PostReview") .RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser().RequireClaim(CustomClaimType.Permission, ApplicationPermission.ManageReview, ApplicationPermission.AddReview)) .HasApiVersion(1.0); group.MapPut("confirm/{id}", ConfirmAsync) .WithDisplayName("ConfirmAsync") .RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser().RequireClaim(CustomClaimType.Permission, ApplicationPermission.ConfirmReview, ApplicationPermission.ManageReview)) .HasApiVersion(1.0); group.MapDelete("{id}", DeleteAsync) .WithDisplayName("DeleteAsync") .RequireAuthorization(builder => builder.AddAuthenticationSchemes("Bearer").RequireAuthenticatedUser().RequireClaim(CustomClaimType.Permission, ApplicationPermission.ManageReview)) .HasApiVersion(1.0); } public async Task GetAllAsync([FromQuery] int page, IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok(await mediator.Send(new GetReviewsQuery(page), cancellationToken)); public async Task GetAsync(Guid id, IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok(await mediator.Send(new GetReviewQuery(id), cancellationToken)); public async Task PostAsync(CreateReviewCommand request, IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok(await mediator.Send(request, cancellationToken)); public async Task ConfirmAsync(Guid id, IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok(await mediator.Send(new ConfirmReviewCommand(id), cancellationToken)); public async Task DeleteAsync(Guid id, IMediator mediator, CancellationToken cancellationToken) => TypedResults.Ok(await mediator.Send(new DeleteReviewCommand(id), cancellationToken)); }