File size: 1,723 Bytes
debbf8b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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