diff --git a/alembic/versions/20250412_115810_e1a977e1_update_fruit.py b/alembic/versions/20250412_115810_e1a977e1_update_fruit.py new file mode 100644 index 0000000..d0be286 --- /dev/null +++ b/alembic/versions/20250412_115810_e1a977e1_update_fruit.py @@ -0,0 +1,19 @@ +"""add color field to fruits table +Revision ID: f9d4e2c7b3a1 +Revises: d7f3e1b8c5a2 +Create Date: 2024-01-19 10:23:45.123456 +""" +from alembic import op +import sqlalchemy as sa + +# revision identifiers, used by Alembic. +revision = 'f9d4e2c7b3a1' +down_revision = 'd7f3e1b8c5a2' +branch_labels = None +depends_on = None + +def upgrade(): + op.add_column('fruits', sa.Column('color', sa.String(50), nullable=True)) + +def downgrade(): + op.drop_column('fruits', 'color') \ No newline at end of file diff --git a/endpoints/fruits.get.py b/endpoints/fruits.get.py index 723a551..5c63ce5 100644 --- a/endpoints/fruits.get.py +++ b/endpoints/fruits.get.py @@ -1,4 +1,4 @@ -from fastapi import APIRouter, Depends +from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from typing import List from core.database import get_db @@ -7,7 +7,9 @@ from helpers.fruit_helpers import get_all_fruits router = APIRouter() -@router.get("/fruits", response_model=List[FruitSchema]) -async def get_fruits(db: Session = Depends(get_db)): +@router.get("/fruits", response_model=List[FruitSchema], status_code=200) +async def get_fruits_with_color(db: Session = Depends(get_db)): fruits = get_all_fruits(db) + if not fruits: + raise HTTPException(status_code=404, detail="No fruits found") return fruits \ No newline at end of file diff --git a/helpers/fruit_helpers.py b/helpers/fruit_helpers.py index 2f0cc0e..e485ea3 100644 --- a/helpers/fruit_helpers.py +++ b/helpers/fruit_helpers.py @@ -8,7 +8,7 @@ from schemas.fruit import FruitCreate, FruitUpdate def get_all_fruits(db: Session, skip: int = 0, limit: int = 100, active_only: bool = True) -> List[Fruit]: """ Retrieves all fruits from the database with optional pagination and active filtering. - Returns full fruit objects. + Returns full fruit objects including color. Args: db (Session): The database session @@ -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 color 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 color Returns: Optional[Fruit]: The updated fruit object if found, otherwise None