Skip to content

Commit

Permalink
add schema to endpoint response
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Ford committed Jan 19, 2024
1 parent 344b909 commit b86b1c8
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 31 deletions.
11 changes: 11 additions & 0 deletions src/dusa_backend/infrastructure/schemas/records.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,18 @@

from pydantic import BaseModel

from src.dusa_backend.domain.models import Record


class PostRecordPayload(BaseModel):
category_item_id: UUID
value: Decimal


class RecordListItem(Record):
category_item_name: str
category_name: str


class GetRecordListResponse(BaseModel):
records: list[RecordListItem]
28 changes: 16 additions & 12 deletions src/dusa_backend/presentation/record.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from src.dusa_backend.infrastructure.database.session import get_db
from src.dusa_backend.infrastructure.database.tables import RecordTable, CategoryItemTable
from src.dusa_backend.infrastructure.schemas.common import MessageResponse
from src.dusa_backend.infrastructure.schemas.records import PostRecordPayload
from src.dusa_backend.infrastructure.schemas.records import PostRecordPayload, GetRecordListResponse, RecordListItem

router = APIRouter(prefix="/record", tags=["Record"])
logger = logging.getLogger(__name__)
Expand All @@ -24,15 +24,19 @@ def create_record(payload: PostRecordPayload, db_session: Session = Depends(get_


@router.get("/")
def get_records(db_session: Session = Depends(get_db)) -> list:
def get_records(db_session: Session = Depends(get_db)) -> GetRecordListResponse:
records = RecordRepository(db_session).order_by(RecordTable.created.desc())[:10]
return [
{
"id": record.id,
"value": record.value,
"created": record.created,
"category_item_name": record.category_item.name,
"category_name": record.category_item.category.name,
}
for record in records
]
return GetRecordListResponse(
records=[
RecordListItem(
**{
"id": record.id,
"value": record.value,
"created": record.created,
"category_item_name": record.category_item.name,
"category_name": record.category_item.category.name,
}
)
for record in records
]
)
40 changes: 21 additions & 19 deletions tests/presentation/test_record.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,38 +26,40 @@ def test_get_records_list_empty(client, db):

r = client.get("/record")
assert r.status_code == 200
assert r.json() == []
assert r.json() == {"records": []}


def test_get_records(client, db):
record1 = RecordFactory()
record2 = RecordFactory()
r = client.get("/record")
assert r.status_code == 200
assert r.json() == [
{
"id": str(record2.id),
"value": str(record2.value),
"created": record2.created.isoformat(),
"category_item_name": record2.category_item.name,
"category_name": record2.category_item.category.name,
},
{
"id": str(record1.id),
"value": str(record1.value),
"created": record1.created.isoformat(),
"category_item_name": record1.category_item.name,
"category_name": record1.category_item.category.name,
},
]
assert r.json() == {
"records": [
{
"id": str(record2.id),
"value": str(record2.value),
"created": record2.created.isoformat(),
"category_item_name": record2.category_item.name,
"category_name": record2.category_item.category.name,
},
{
"id": str(record1.id),
"value": str(record1.value),
"created": record1.created.isoformat(),
"category_item_name": record1.category_item.name,
"category_name": record1.category_item.category.name,
},
]
}

for _ in range(15):
RecordFactory()

r = client.get("/record")
assert r.status_code == 200
assert len(r.json()) == 10
assert len(r.json()["records"]) == 10

for record in r.json():
for record in r.json()["records"]:
assert str(record1.id) != record["id"]
assert str(record2.id) != record["id"]

0 comments on commit b86b1c8

Please sign in to comment.