|
1 | 1 | from uuid import UUID
|
2 | 2 |
|
3 |
| -from fastapi import APIRouter, Depends, HTTPException |
| 3 | +from fastapi import APIRouter, Depends, HTTPException, Query |
| 4 | +from fastapi_pagination import Page, Params |
| 5 | +from fastapi_pagination.ext.sqlalchemy import apaginate |
4 | 6 | from sqlalchemy.ext.asyncio import AsyncSession
|
5 | 7 | from sqlalchemy.future import select
|
6 | 8 |
|
|
12 | 14 | router = APIRouter(tags=["item"])
|
13 | 15 |
|
14 | 16 |
|
15 |
| -@router.get("/", response_model=list[ItemRead]) |
| 17 | +def transform_items(items): |
| 18 | + return [ItemRead.model_validate(item) for item in items] |
| 19 | + |
| 20 | + |
| 21 | +@router.get("/", response_model=Page[ItemRead]) |
16 | 22 | async def read_item(
|
17 | 23 | db: AsyncSession = Depends(get_async_session),
|
18 | 24 | user: User = Depends(current_active_user),
|
| 25 | + page: int = Query(1, ge=1, description="Page number"), |
| 26 | + size: int = Query(10, ge=1, le=100, description="Page size"), |
19 | 27 | ):
|
20 |
| - result = await db.execute(select(Item).filter(Item.user_id == user.id)) |
21 |
| - items = result.scalars().all() |
22 |
| - return [ItemRead.model_validate(item) for item in items] |
| 28 | + params = Params(page=page, size=size) |
| 29 | + query = select(Item).filter(Item.user_id == user.id) |
| 30 | + return await apaginate(db, query, params, transformer=transform_items) |
23 | 31 |
|
24 | 32 |
|
25 | 33 | @router.post("/", response_model=ItemRead)
|
|
0 commit comments