feat: Generated endpoint endpoints/create-fruit.post.py via AI for Fruit
This commit is contained in:
parent
e5917dc0c5
commit
7f5d260bff
@ -0,0 +1,30 @@
|
|||||||
|
from fastapi import APIRouter, HTTPException, status
|
||||||
|
from typing import Dict
|
||||||
|
from pydantic import BaseModel
|
||||||
|
|
||||||
|
from helpers.fruit_helpers import add_fruit, validate_fruit_data
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
|
||||||
|
class FruitCreate(BaseModel):
|
||||||
|
name: str
|
||||||
|
quantity: int
|
||||||
|
|
||||||
|
@router.post("/create-fruit", status_code=status.HTTP_201_CREATED, response_model=Dict[str, any])
|
||||||
|
async def create_fruit(fruit: FruitCreate):
|
||||||
|
"""Create a new fruit entry"""
|
||||||
|
try:
|
||||||
|
if not validate_fruit_data(fruit.name, fruit.quantity):
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=status.HTTP_400_BAD_REQUEST,
|
||||||
|
detail="Invalid fruit data provided"
|
||||||
|
)
|
||||||
|
|
||||||
|
new_fruit = add_fruit(fruit.name, fruit.quantity)
|
||||||
|
return new_fruit
|
||||||
|
|
||||||
|
except ValueError as e:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=status.HTTP_400_BAD_REQUEST,
|
||||||
|
detail=str(e)
|
||||||
|
)
|
115
helpers/generic_helpers.py
Normal file
115
helpers/generic_helpers.py
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
from typing import Dict, List, Optional
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
# In-memory store for fruits since no model was provided
|
||||||
|
_fruits_store: List[Dict[str, any]] = []
|
||||||
|
|
||||||
|
def add_fruit(fruit_name: str, quantity: int) -> Dict[str, any]:
|
||||||
|
"""
|
||||||
|
Adds a fruit to the in-memory store with the given quantity.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
fruit_name (str): Name of the fruit to add
|
||||||
|
quantity (int): Quantity of the fruit
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Dict[str, any]: The newly added fruit entry
|
||||||
|
"""
|
||||||
|
if not validate_fruit_data(fruit_name, quantity):
|
||||||
|
raise ValueError("Invalid fruit data provided")
|
||||||
|
|
||||||
|
new_fruit = {
|
||||||
|
"name": fruit_name.lower(),
|
||||||
|
"quantity": quantity,
|
||||||
|
"added_at": datetime.now()
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if fruit already exists
|
||||||
|
existing_fruit = get_fruit_by_name(fruit_name)
|
||||||
|
if existing_fruit:
|
||||||
|
existing_fruit["quantity"] += quantity
|
||||||
|
existing_fruit["updated_at"] = datetime.now()
|
||||||
|
return existing_fruit
|
||||||
|
|
||||||
|
_fruits_store.append(new_fruit)
|
||||||
|
return new_fruit
|
||||||
|
|
||||||
|
def get_fruit_by_name(fruit_name: str) -> Optional[Dict[str, any]]:
|
||||||
|
"""
|
||||||
|
Retrieves a fruit by its name from the in-memory store.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
fruit_name (str): Name of the fruit to retrieve
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Optional[Dict[str, any]]: The fruit entry if found, None otherwise
|
||||||
|
"""
|
||||||
|
fruit_name = fruit_name.lower()
|
||||||
|
for fruit in _fruits_store:
|
||||||
|
if fruit["name"] == fruit_name:
|
||||||
|
return fruit
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_all_fruits() -> List[Dict[str, any]]:
|
||||||
|
"""
|
||||||
|
Retrieves all fruits from the in-memory store.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List[Dict[str, any]]: List of all fruit entries
|
||||||
|
"""
|
||||||
|
return _fruits_store
|
||||||
|
|
||||||
|
def update_fruit_quantity(fruit_name: str, new_quantity: int) -> Optional[Dict[str, any]]:
|
||||||
|
"""
|
||||||
|
Updates the quantity of a specific fruit.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
fruit_name (str): Name of the fruit to update
|
||||||
|
new_quantity (int): New quantity value
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Optional[Dict[str, any]]: Updated fruit entry if found, None otherwise
|
||||||
|
"""
|
||||||
|
if not validate_fruit_data(fruit_name, new_quantity):
|
||||||
|
raise ValueError("Invalid fruit data provided")
|
||||||
|
|
||||||
|
fruit = get_fruit_by_name(fruit_name)
|
||||||
|
if fruit:
|
||||||
|
fruit["quantity"] = new_quantity
|
||||||
|
fruit["updated_at"] = datetime.now()
|
||||||
|
return fruit
|
||||||
|
return None
|
||||||
|
|
||||||
|
def delete_fruit(fruit_name: str) -> bool:
|
||||||
|
"""
|
||||||
|
Deletes a fruit from the in-memory store.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
fruit_name (str): Name of the fruit to delete
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: True if fruit was deleted, False if not found
|
||||||
|
"""
|
||||||
|
fruit_name = fruit_name.lower()
|
||||||
|
for i, fruit in enumerate(_fruits_store):
|
||||||
|
if fruit["name"] == fruit_name:
|
||||||
|
_fruits_store.pop(i)
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
def validate_fruit_data(fruit_name: str, quantity: int) -> bool:
|
||||||
|
"""
|
||||||
|
Validates fruit data before processing.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
fruit_name (str): Name of the fruit to validate
|
||||||
|
quantity (int): Quantity to validate
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: True if data is valid, False otherwise
|
||||||
|
"""
|
||||||
|
if not fruit_name or not isinstance(fruit_name, str) or len(fruit_name.strip()) == 0:
|
||||||
|
return False
|
||||||
|
if not isinstance(quantity, int) or quantity < 0:
|
||||||
|
return False
|
||||||
|
return True
|
14
models/fruit.py
Normal file
14
models/fruit.py
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
from sqlalchemy import Column, String, Integer, DateTime
|
||||||
|
from sqlalchemy.dialects.postgresql import UUID
|
||||||
|
from sqlalchemy.sql import func
|
||||||
|
from core.database import Base
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
class Fruit(Base):
|
||||||
|
__tablename__ = "fruits"
|
||||||
|
|
||||||
|
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||||
|
name = Column(String, nullable=False, index=True)
|
||||||
|
quantity = Column(Integer, nullable=False, default=0)
|
||||||
|
created_at = Column(DateTime, default=func.now())
|
||||||
|
updated_at = Column(DateTime, default=func.now(), onupdate=func.now())
|
Loading…
x
Reference in New Issue
Block a user