From ccd764291df3a0cda8fde61fc7e84f7002a7d0c1 Mon Sep 17 00:00:00 2001 From: Backend IM Bot Date: Sat, 12 Apr 2025 02:19:55 +0000 Subject: [PATCH] feat: Updated endpoint endpoints/fruits.get.py via AI --- .../20250412_021951_28878fb8_update_fruit.py | 19 +++++++++++++++++++ endpoints/fruits.get.py | 9 +++------ helpers/fruit_helpers.py | 16 ++++++++-------- models/fruit.py | 1 + schemas/fruit.py | 3 +++ 5 files changed, 34 insertions(+), 14 deletions(-) create mode 100644 alembic/versions/20250412_021951_28878fb8_update_fruit.py diff --git a/alembic/versions/20250412_021951_28878fb8_update_fruit.py b/alembic/versions/20250412_021951_28878fb8_update_fruit.py new file mode 100644 index 0000000..e8a58ca --- /dev/null +++ b/alembic/versions/20250412_021951_28878fb8_update_fruit.py @@ -0,0 +1,19 @@ +"""add is_ripe field to fruits table +Revision ID: 9b5e3d82 +Revises: 8a4f2c91 +Create Date: 2024-01-22 10:23:45.123456 +""" +from alembic import op +import sqlalchemy as sa + +# revision identifiers, used by Alembic. +revision = '9b5e3d82' +down_revision = '8a4f2c91' +branch_labels = None +depends_on = None + +def upgrade(): + op.add_column('fruits', sa.Column('is_ripe', sa.Boolean(), server_default='false', nullable=False)) + +def downgrade(): + op.drop_column('fruits', 'is_ripe') \ No newline at end of file diff --git a/endpoints/fruits.get.py b/endpoints/fruits.get.py index b52f233..828895d 100644 --- a/endpoints/fruits.get.py +++ b/endpoints/fruits.get.py @@ -8,11 +8,8 @@ from helpers.fruit_helpers import get_all_fruits router = APIRouter() @router.get("/fruits", response_model=List[FruitSchema]) -async def get_fruits( - color: str | None = None, - db: Session = Depends(get_db) -): +async def get_fruits_with_ripeness(db: Session = Depends(get_db)): fruits = get_all_fruits(db) - if color: - fruits = [fruit for fruit in fruits if fruit.color == color] + for fruit in fruits: + fruit.is_ripe = fruit.ripeness > 0.7 return fruits \ No newline at end of file diff --git a/helpers/fruit_helpers.py b/helpers/fruit_helpers.py index 87856d0..a133f1c 100644 --- a/helpers/fruit_helpers.py +++ b/helpers/fruit_helpers.py @@ -5,10 +5,10 @@ from sqlalchemy import and_ from models.fruit import Fruit from schemas.fruit import FruitCreate, FruitUpdate -def get_all_fruits(db: Session, skip: int = 0, limit: int = 100, active_only: bool = True) -> List[str]: +def get_all_fruits(db: Session, skip: int = 0, limit: int = 100, active_only: bool = True) -> List[Fruit]: """ - Retrieves all fruit names from the database with optional pagination and active filtering. - Returns only the names of the fruits. + Retrieves all fruits from the database with optional pagination and active filtering. + Returns full fruit objects including the is_ripe status. Args: db (Session): The database session @@ -17,12 +17,12 @@ def get_all_fruits(db: Session, skip: int = 0, limit: int = 100, active_only: bo active_only (bool): If True, returns only active fruits Returns: - List[str]: List of fruit names + List[Fruit]: List of fruit objects """ - query = db.query(Fruit.name) + query = db.query(Fruit) if active_only: query = query.filter(Fruit.is_active) - return [fruit[0] for fruit in query.offset(skip).limit(limit).all()] + return query.offset(skip).limit(limit).all() def get_fruit_by_id(db: Session, fruit_id: UUID) -> Optional[Fruit]: """ @@ -56,7 +56,7 @@ def create_fruit(db: Session, fruit_data: FruitCreate) -> Fruit: Args: db (Session): The database session - fruit_data (FruitCreate): The data for the fruit to create, including optional color + fruit_data (FruitCreate): The data for the fruit to create, including optional color and is_ripe status Returns: Fruit: The newly created fruit object @@ -74,7 +74,7 @@ def update_fruit(db: Session, fruit_id: UUID, fruit_data: FruitUpdate) -> Option Args: db (Session): The database session fruit_id (UUID): The ID of the fruit to update - fruit_data (FruitUpdate): The update data for the fruit, including optional color + fruit_data (FruitUpdate): The update data for the fruit, including optional color and is_ripe status Returns: Optional[Fruit]: The updated fruit object if found, otherwise None diff --git a/models/fruit.py b/models/fruit.py index 4e678ec..3ed1fb7 100644 --- a/models/fruit.py +++ b/models/fruit.py @@ -12,5 +12,6 @@ class Fruit(Base): description = Column(String, nullable=True) color = Column(String, nullable=True) is_active = Column(Boolean, default=True) + is_ripe = Column(Boolean, default=False) created_at = Column(DateTime, default=func.now()) updated_at = Column(DateTime, default=func.now(), onupdate=func.now()) \ No newline at end of file diff --git a/schemas/fruit.py b/schemas/fruit.py index ba77684..3b66925 100644 --- a/schemas/fruit.py +++ b/schemas/fruit.py @@ -11,6 +11,7 @@ class FruitBase(BaseModel): description: Optional[str] = Field(None, description="Fruit description") color: Optional[str] = Field(None, description="Fruit color") is_active: bool = Field(True, description="Whether the fruit is active") + is_ripe: bool = Field(False, description="Whether the fruit is ripe") class FruitCreate(FruitBase): pass @@ -20,6 +21,7 @@ class FruitUpdate(BaseModel): description: Optional[str] = Field(None, description="Fruit description") color: Optional[str] = Field(None, description="Fruit color") is_active: Optional[bool] = Field(None, description="Whether the fruit is active") + is_ripe: Optional[bool] = Field(None, description="Whether the fruit is ripe") class FruitSchema(FruitBase): id: UUID @@ -35,6 +37,7 @@ class FruitSchema(FruitBase): "description": "A sweet, edible fruit produced by an apple tree", "color": "Red", "is_active": True, + "is_ripe": False, "created_at": "2023-01-01T12:00:00", "updated_at": "2023-01-01T12:00:00" }