Spaces:
Sleeping
Sleeping
File size: 1,816 Bytes
6cc8ae1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | """
Breed metadata endpoints.
GET /breeds - List all breeds
GET /breeds/{name} - Get breed details
"""
from fastapi import APIRouter, HTTPException, Query
from typing import Optional
from backend.app.schemas.breed import BreedDetail, BreedListItem, BreedsListResponse
from backend.app.services.breed_info import breed_info_service
router = APIRouter(prefix="/breeds", tags=["Breeds"])
@router.get("", response_model=BreedsListResponse)
async def list_breeds(
animal_type: Optional[str] = Query(None, description="Filter by animal type (Cow/Buffalo)"),
search: Optional[str] = Query(None, description="Search by breed name"),
):
"""List all breeds with optional filtering."""
breeds = breed_info_service.get_all()
if animal_type:
breeds = [b for b in breeds if b['animal_type'].lower() == animal_type.lower()]
if search:
search_lower = search.lower()
breeds = [b for b in breeds if search_lower in b['breed_name'].lower()]
items = [
BreedListItem(
breed_id=b['breed_id'],
breed_name=b['breed_name'],
animal_type=b['animal_type'],
region=b['region'],
primary_use=b['primary_use'],
)
for b in breeds
]
return BreedsListResponse(total=len(items), breeds=items)
@router.get("/{breed_name}", response_model=BreedDetail)
async def get_breed(breed_name: str):
"""Get detailed info for a specific breed."""
info = breed_info_service.get_breed(breed_name)
if info is None:
# Try case-insensitive search
results = breed_info_service.search(breed_name)
if results:
info = results[0]
else:
raise HTTPException(status_code=404, detail=f"Breed not found: {breed_name}")
return BreedDetail(**info)
|