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

This commit is contained in:
Backend IM Bot 2025-04-12 02:19:55 +00:00
parent ba10c64955
commit ccd764291d
5 changed files with 34 additions and 14 deletions

View File

@ -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')

View File

@ -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

View File

@ -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

View File

@ -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())

View File

@ -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"
}