Files
webmanager-mvp/webui/backend/app/api/routes_files.py
T
2026-03-12 10:37:06 +01:00

71 lines
2.2 KiB
Python

from __future__ import annotations
from fastapi import APIRouter, Depends, Request
from fastapi.responses import StreamingResponse
from backend.app.api.schemas import DeleteRequest, DeleteResponse, MkdirRequest, MkdirResponse, RenameRequest, RenameResponse, SaveRequest, SaveResponse, ViewResponse
from backend.app.dependencies import get_file_ops_service
from backend.app.services.file_ops_service import FileOpsService
router = APIRouter(prefix="/files")
@router.post("/mkdir", response_model=MkdirResponse)
async def mkdir(
request: MkdirRequest,
service: FileOpsService = Depends(get_file_ops_service),
) -> MkdirResponse:
return service.mkdir(parent_path=request.parent_path, name=request.name)
@router.post("/rename", response_model=RenameResponse)
async def rename(
request: RenameRequest,
service: FileOpsService = Depends(get_file_ops_service),
) -> RenameResponse:
return service.rename(path=request.path, new_name=request.new_name)
@router.post("/delete", response_model=DeleteResponse)
async def delete(
request: DeleteRequest,
service: FileOpsService = Depends(get_file_ops_service),
) -> DeleteResponse:
return service.delete(path=request.path)
@router.get("/view", response_model=ViewResponse)
async def view(
path: str,
for_edit: bool = False,
service: FileOpsService = Depends(get_file_ops_service),
) -> ViewResponse:
return service.view(path=path, for_edit=for_edit)
@router.get("/video")
async def video(
path: str,
request: Request,
service: FileOpsService = Depends(get_file_ops_service),
) -> StreamingResponse:
prepared = service.prepare_video_stream(path=path, range_header=request.headers.get("range"))
return StreamingResponse(
prepared["content"],
status_code=prepared["status_code"],
headers=prepared["headers"],
media_type=prepared["content_type"],
)
@router.post("/save", response_model=SaveResponse)
async def save(
request: SaveRequest,
service: FileOpsService = Depends(get_file_ops_service),
) -> SaveResponse:
return service.save(
path=request.path,
content=request.content,
expected_modified=request.expected_modified,
)