Source code for endpoints.therapy_methods

"""This module contains the therapy_methods endpoint for retrieving therapy methods."""
from fastapi import APIRouter, Query, Depends
from sqlalchemy.orm import Session
from data.models import TherapyMethod, TherapyMethodCluster
from app.utils.validate_api_key import validate_api_key
from app.utils.db_session import get_db

# ------------------------------
# Endpoint definition
# ------------------------------

router = APIRouter()

[docs] @router.get("/therapy_methods") def get_therapy_methods( _api_key: str = Depends(validate_api_key), # unused argument db: Session = Depends(get_db), limit: int = Query(25), offset: int = Query(0), method_name: str = Query(None), cluster_short: str = Query(None), ): """ Retrieve a list of therapy methods with optional filtering. :param api_key: API key for authentication (validated). :param limit: Maximum number of results to return (default is 25). :param offset: Number of results to skip for pagination (default is 0). :param method_name: Filter by specific therapy method name. :param cluster_short: Filter by therapy cluster short code. :param db: Database session dependency. :return: List of therapy methods matching the criteria. :rtype: List[TherapyMethod] """ # Base query query = db.query(TherapyMethod) # Filter by method name or therapy cluster if method_name: query = query.filter(TherapyMethod.method_name == method_name) if cluster_short: query = query.join( TherapyMethod.therapy_cluster).filter( TherapyMethodCluster.cluster_short == cluster_short ) # Apply pagination therapy_methods = query.offset(offset).limit(limit).all() return therapy_methods