""" Router endpoints for Endpoints: - List: Description - Endpoints: Description """ from typing import Annotated from fastapi import APIRouter, HTTPException, status from fastapi.params import Path from src.database import db_dependency from src.service.models import Service from src.service.utils import generate_api_key from src.service.schemas import ServiceGetServiceResponse, ServicePostServiceRequest, ServicePostServiceResponse, \ ServiceWithKeyResponse, ServicePatchKeyResponse router = APIRouter( tags=["Service"], prefix="/service", ) @router.get("/", response_model=ServiceGetServiceResponse) async def get_all_services(db: db_dependency): # TODO: user_dependency permission_models = db.query(Service).all() return {"services": permission_models} @router.post("/", response_model=ServicePostServiceResponse) async def register_service(db: db_dependency, service_request: ServicePostServiceRequest): # TODO: super_admin_dependency key = generate_api_key() service_model = Service(name=service_request.name, api_key=key) db.add(service_model) db.flush() response = ServiceWithKeyResponse(**service_model.__dict__) db.commit() return {"service": response} @router.patch("/{service_id}/key", response_model=ServicePatchKeyResponse) async def regenerate_api_key(db: db_dependency, service_id: Annotated[int, Path(gt=0,description="Service database ID")]): # TODO: super_admin_dependency service_model = db.get(Service, service_id) if service_model is None: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Service not found") key = generate_api_key() service_model.api_key = key db.flush() response = ServiceWithKeyResponse(**service_model.__dict__) db.commit() return {"service": response} @router.delete("/{service_id}", status_code=status.HTTP_204_NO_CONTENT) async def remove_service(db: db_dependency, service_id: Annotated[int, Path(gt=0,description="Service database ID")]): # TODO: super_admin_dependency service_model = db.get(Service, service_id) if service_model is None: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Service not found") db.delete(service_model) db.commit()