Added x-total-count response header

This commit is contained in:
Donkie
2023-08-26 11:58:06 +02:00
parent 557ea82171
commit e2d937aaf1
7 changed files with 94 additions and 29 deletions

View File

@@ -4,6 +4,7 @@ import logging
from typing import Annotated, Optional
from fastapi import APIRouter, Depends, Query
from fastapi.encoders import jsonable_encoder
from fastapi.exceptions import RequestValidationError
from fastapi.responses import JSONResponse
from pydantic import BaseModel, Field, validator
@@ -109,6 +110,7 @@ class FilamentUpdateParameters(FilamentParameters):
name="Find filaments",
description="Get a list of filaments that matches the search query.",
response_model_exclude_none=True,
response_model=list[Filament],
)
async def find(
*,
@@ -156,14 +158,14 @@ async def find(
title="Offset",
description="Offset in the full result set if a limit is set.",
),
) -> list[Filament]:
) -> JSONResponse:
sort_by: dict[str, SortOrder] = {}
if sort is not None:
for sort_item in sort.split(","):
field, direction = sort_item.split(":")
sort_by[field] = SortOrder[direction.upper()]
db_items = await filament.find(
db_items, total_count = await filament.find(
db=db,
vendor_name=vendor_name,
vendor_id=vendor_id,
@@ -174,7 +176,15 @@ async def find(
limit=limit,
offset=offset,
)
return [Filament.from_db(db_item) for db_item in db_items]
# Set x-total-count header for pagination
return JSONResponse(
content=jsonable_encoder(
(Filament.from_db(db_item) for db_item in db_items),
exclude_none=True,
),
headers={"x-total-count": str(total_count)},
)
@router.get(