# app/modules/hosting/routes/api/admin_services.py """ Admin API routes for client service management. """ import logging from fastapi import APIRouter, Depends, Path from sqlalchemy.orm import Session from app.api.deps import get_current_admin_api from app.core.database import get_db from app.modules.hosting.schemas.client_service import ( ClientServiceCreate, ClientServiceDeleteResponse, ClientServiceResponse, ClientServiceUpdate, ) from app.modules.hosting.services.client_service_service import client_service_service from app.modules.tenancy.schemas.auth import UserContext router = APIRouter(prefix="/sites/{site_id}/services") logger = logging.getLogger(__name__) @router.get("", response_model=list[ClientServiceResponse]) def list_services( site_id: int = Path(...), db: Session = Depends(get_db), current_admin: UserContext = Depends(get_current_admin_api), ): """List services for a hosted site.""" return client_service_service.get_for_site(db, site_id) @router.post("", response_model=ClientServiceResponse) def create_service( data: ClientServiceCreate, site_id: int = Path(...), db: Session = Depends(get_db), current_admin: UserContext = Depends(get_current_admin_api), ): """Create a new service for a hosted site.""" service = client_service_service.create(db, site_id, data.model_dump(exclude_none=True)) db.commit() return service @router.put("/{service_id}", response_model=ClientServiceResponse) def update_service( data: ClientServiceUpdate, site_id: int = Path(...), service_id: int = Path(...), db: Session = Depends(get_db), current_admin: UserContext = Depends(get_current_admin_api), ): """Update a client service.""" service = client_service_service.update(db, service_id, data.model_dump(exclude_none=True)) db.commit() return service @router.delete("/{service_id}", response_model=ClientServiceDeleteResponse) def delete_service( site_id: int = Path(...), service_id: int = Path(...), db: Session = Depends(get_db), current_admin: UserContext = Depends(get_current_admin_api), ): """Delete a client service.""" client_service_service.delete(db, service_id) db.commit() return ClientServiceDeleteResponse(message="Service deleted")