"""Dateien hochladen und löschen (→ Konzept 7.7).""" from fastapi import APIRouter, Request, UploadFile from fastapi.concurrency import run_in_threadpool from fastapi.responses import Response from app import web from app.uploads import service as uploads def router() -> APIRouter: r = APIRouter() @r.post("/workspaces/{workspace_id}/uploads") async def upload(request: Request, principal: web.Checked, workspace_id: int, file: UploadFile) -> Response: def work() -> None: with web.db(request).session() as session: uploads.save(session, principal, web.settings(request), workspace_id, file.filename or "", file.file) await run_in_threadpool(work) return web.redirect(f"/workspaces/{workspace_id}/data#uploads") @r.post("/uploads/{upload_id}/delete") def delete(request: Request, principal: web.Checked, upload_id: int) -> Response: with web.db(request).session() as session: workspace_id = uploads.delete(session, principal, web.settings(request), upload_id) return web.redirect(f"/workspaces/{workspace_id}/data#uploads") return r