GrowthPanelBackend / routers /services.py
hisham-cmd's picture
Upload routers/services.py
debbf8b verified
Raw
History Blame Contribute Delete
1.72 kB
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select
from typing import List, Optional
from database.session import get_db
from database.models import Category as CategoryModel, Service as ServiceModel
import schemas
router = APIRouter(
prefix="/services",
tags=["services"]
)
@router.get("/categories", response_model=List[schemas.Category])
async def get_categories(db: AsyncSession = Depends(get_db)):
"""
Get all active categories.
"""
result = await db.execute(
select(CategoryModel)
.where(CategoryModel.is_active == True)
.order_by(CategoryModel.sort_order)
)
return result.scalars().all()
@router.get("/", response_model=List[schemas.Service])
async def get_services(
category_id: Optional[int] = None,
db: AsyncSession = Depends(get_db)
):
"""
Get all active services, optionally filtered by category.
"""
query = select(ServiceModel).where(ServiceModel.status == "active")
if category_id:
query = query.where(ServiceModel.category_id == category_id)
result = await db.execute(query)
return result.scalars().all()
@router.get("/{service_id}", response_model=schemas.Service)
async def get_service(service_id: int, db: AsyncSession = Depends(get_db)):
"""
Get a specific service by ID.
"""
result = await db.execute(
select(ServiceModel).where(ServiceModel.id == service_id)
)
service = result.scalar_one_or_none()
if not service:
raise HTTPException(status_code=404, detail="Service not found")
return service