Spaces:
Sleeping
Sleeping
| 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"] | |
| ) | |
| 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() | |
| 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() | |
| 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 | |