from __future__ import annotations from fastapi import APIRouter, Request from app.api.media import execute_operation from app.core.response import SuccessResponse from app.operations.compress import normalize_audio from app.operations.concat import concat_audio from app.operations.convert import convert_audio from app.operations.extract_audio import ( extract_audio, fade_audio, noise_reduction, remove_silence, set_volume, ) from app.operations.merge import merge_audio from app.operations.trim import trim_audio from app.services.media_service import Operation router = APIRouter(prefix="/v1/audio", tags=["audio"]) def operation_route(path: str, name: str, operation: Operation) -> None: async def endpoint(request: Request) -> SuccessResponse: return await execute_operation(request, name, operation) endpoint.__name__ = name.replace(".", "_") router.add_api_route( path, endpoint, methods=["POST"], response_model=SuccessResponse, name=name ) operation_route("/extract", "audio.extract", extract_audio) operation_route("/convert", "audio.convert", convert_audio) operation_route("/normalize", "audio.normalize", normalize_audio) operation_route("/trim", "audio.trim", trim_audio) operation_route("/merge", "audio.merge", merge_audio) operation_route("/concat", "audio.concat", concat_audio) operation_route("/fade", "audio.fade", fade_audio) operation_route("/volume", "audio.volume", set_volume) operation_route("/remove-silence", "audio.remove_silence", remove_silence) operation_route("/noise-reduction", "audio.noise_reduction", noise_reduction)