feat: Updated endpoint endpoints/fruits.get.py via AI

This commit is contained in:
Backend IM Bot 2025-04-11 23:45:36 +00:00
parent c4b3943d67
commit 68dfdf4a4f
3 changed files with 46 additions and 25 deletions

View File

@ -1,19 +1,12 @@
from fastapi import APIRouter, Depends from fastapi import APIRouter
from sqlalchemy.orm import Session
from typing import List from typing import List
from core.database import get_db
from schemas.fruit import FruitSchema from schemas.fruit import FruitSchema
from helpers.fruit_helpers import get_all_fruits from helpers.fruit_helpers import get_all_fruits
router = APIRouter() router = APIRouter()
@router.get("/fruits", response_model=List[FruitSchema]) @router.get("/fruits", status_code=200, response_model=List[FruitSchema])
async def get_fruits( async def get_fruits():
skip: int = 0, """Get all fruits"""
limit: int = 100, fruits = get_all_fruits()
sort_by: str = "created_at",
sort_desc: bool = True,
db: Session = Depends(get_db)
):
fruits = get_all_fruits(db, skip=skip, limit=limit, sort_by=sort_by, sort_desc=sort_desc)
return fruits return fruits

View File

@ -1,38 +1,66 @@
from typing import List, Optional, Dict, Any from typing import List, Optional, Dict, Any
from uuid import UUID from uuid import UUID
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from sqlalchemy import desc from datetime import datetime
from models.fruit import Fruit from models.fruit import Fruit
from schemas.fruit import FruitCreate, FruitUpdate from schemas.fruit import FruitCreate, FruitUpdate, FruitSchema
def get_all_fruits( def get_all_fruits(
db: Session,
skip: int = 0, skip: int = 0,
limit: int = 100, limit: int = 100,
sort_by: str = "created_at", sort_by: str = "created_at",
sort_desc: bool = True sort_desc: bool = True
) -> List[Fruit]: ) -> List[FruitSchema]:
""" """
Retrieves all fruits from the database with pagination and sorting. Returns a static list of fruits with pagination and sorting.
Args: Args:
db (Session): The database session
skip (int): Number of records to skip skip (int): Number of records to skip
limit (int): Maximum number of records to return limit (int): Maximum number of records to return
sort_by (str): Field to sort by sort_by (str): Field to sort by
sort_desc (bool): Sort in descending order if True sort_desc (bool): Sort in descending order if True
Returns: Returns:
List[Fruit]: List of fruit objects List[FruitSchema]: List of fruit objects
""" """
query = db.query(Fruit) # Static list of fruits
static_fruits = [
{
"id": UUID("f47ac10b-58cc-4372-a567-0e02b2c3d479"),
"name": "Apple",
"description": "A sweet and crunchy fruit",
"created_at": datetime(2023, 1, 1, 12, 0),
"updated_at": datetime(2023, 1, 1, 12, 0)
},
{
"id": UUID("f47ac10b-58cc-4372-a567-0e02b2c3d480"),
"name": "Banana",
"description": "A yellow tropical fruit",
"created_at": datetime(2023, 1, 2, 12, 0),
"updated_at": datetime(2023, 1, 2, 12, 0)
},
{
"id": UUID("f47ac10b-58cc-4372-a567-0e02b2c3d481"),
"name": "Orange",
"description": "A citrus fruit rich in vitamin C",
"created_at": datetime(2023, 1, 3, 12, 0),
"updated_at": datetime(2023, 1, 3, 12, 0)
}
]
if hasattr(Fruit, sort_by): # Convert dictionary items to FruitSchema objects
order_criteria = desc(getattr(Fruit, sort_by)) if sort_desc else getattr(Fruit, sort_by) fruits = [FruitSchema(**fruit) for fruit in static_fruits]
query = query.order_by(order_criteria)
return query.offset(skip).limit(limit).all() # Sort the fruits
if sort_by in FruitSchema.__fields__:
fruits.sort(
key=lambda x: getattr(x, sort_by),
reverse=sort_desc
)
# Apply pagination
return fruits[skip:skip + limit]
def get_fruit_by_id(db: Session, fruit_id: UUID) -> Optional[Fruit]: def get_fruit_by_id(db: Session, fruit_id: UUID) -> Optional[Fruit]:
""" """

View File

@ -20,7 +20,7 @@ class FruitSchema(FruitBase):
updated_at: datetime updated_at: datetime
class Config: class Config:
orm_mode = True from_attributes = True
schema_extra = { schema_extra = {
"example": { "example": {
"id": "f47ac10b-58cc-4372-a567-0e02b2c3d479", "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",