diff options
Diffstat (limited to 'code/api/src/Utilities')
| -rw-r--r-- | code/api/src/Utilities/PaginationOperationFilter.cs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/code/api/src/Utilities/PaginationOperationFilter.cs b/code/api/src/Utilities/PaginationOperationFilter.cs new file mode 100644 index 0000000..ad02a3d --- /dev/null +++ b/code/api/src/Utilities/PaginationOperationFilter.cs @@ -0,0 +1,39 @@ +using Microsoft.Extensions.Options; +using MR.AspNetCore.Pagination; +using Swashbuckle.AspNetCore.SwaggerGen; + +namespace IOL.GreatOffice.Api.Utilities; + +public class PaginationOperationFilter : IOperationFilter +{ + private readonly PaginationOptions _paginationOptions; + + public PaginationOperationFilter( + IOptions<PaginationOptions> paginationOptions) { + _paginationOptions = paginationOptions.Value; + } + + public void Apply(OpenApiOperation operation, OperationFilterContext context) { + var boolSchema = context.SchemaGenerator.GenerateSchema(typeof(bool), context.SchemaRepository); + var intSchema = context.SchemaGenerator.GenerateSchema(typeof(int), context.SchemaRepository); + + if (PaginationActionDetector.IsKeysetPaginationResultAction(context.MethodInfo, out _)) { + CreateParameter(_paginationOptions.FirstQueryParameterName, "true if you want the first page", boolSchema); + CreateParameter(_paginationOptions.BeforeQueryParameterName, "Id of the reference entity you want results before"); + CreateParameter(_paginationOptions.AfterQueryParameterName, "Id of the reference entity you want results after"); + CreateParameter(_paginationOptions.LastQueryParameterName, "true if you want the last page", boolSchema); + } else if (PaginationActionDetector.IsOffsetPaginationResultAction(context.MethodInfo, out _)) { + CreateParameter(_paginationOptions.PageQueryParameterName, "The page", intSchema); + } + + void CreateParameter(string name, string description, OpenApiSchema schema = null) { + operation.Parameters.Add(new OpenApiParameter { + Required = false, + In = ParameterLocation.Query, + Name = name, + Description = description, + Schema = schema, + }); + } + } +}
\ No newline at end of file |
