Add file enrichment update endpoint and modify register/remove file methods

This commit is contained in:
2026-03-19 22:14:34 +01:00
parent 0fdebb9100
commit a95b4c8226

View File

@@ -1000,6 +1000,7 @@ async def register_paths(slug: str, req: RegisterPathsRequest):
"size": file_path.stat().st_size,
"added_at": now_iso(),
"sync_status": "pending",
"enrich_enabled": False,
}
data.setdefault("files", []).append(entry)
added.append(entry)
@@ -1007,7 +1008,7 @@ async def register_paths(slug: str, req: RegisterPathsRequest):
job_id = None
if added:
_set_pending_prepare_signature(data, _source_signature(data.get("files", [])))
_set_pending_prepare_signature(data, _prepare_signature(data.get("files", [])))
write_library(slug, data)
if added:
job_id = await _ensure_prepare_job(slug)
@@ -1032,12 +1033,12 @@ async def remove_file(slug: str, req: RemoveFileRequest):
if symlink_path.exists():
symlink_path.unlink()
source_signature = _source_signature(data.get("files", []))
_set_pending_prepare_signature(data, source_signature)
prepare_signature = _prepare_signature(data.get("files", []))
_set_pending_prepare_signature(data, prepare_signature)
write_library(slug, data)
job_id = None
if source_signature:
if prepare_signature:
job_id = await _ensure_prepare_job(slug)
else:
_cleanup_generated_artifacts(slug)
@@ -1045,6 +1046,31 @@ async def remove_file(slug: str, req: RemoveFileRequest):
return {"ok": True, "job_id": job_id, "library": library_payload(data)}
@router.patch("/libraries/{slug}/files/enrichment")
async def update_file_enrichment(slug: str, req: UpdateFileEnrichmentRequest):
data = read_library(slug)
files = list(data.get("files", []))
target = next((entry for entry in files if entry.get("rel") == req.rel), None)
if not target:
raise HTTPException(status_code=404, detail="File not found")
desired = bool(req.enabled)
if _file_enrich_enabled(target) == desired:
return {"job_id": None, "library": library_payload(data)}
target["enrich_enabled"] = desired
target["sync_status"] = "pending"
target.pop("sync_error", None)
target.pop("synced_at", None)
prepare_signature = _prepare_signature(files)
_set_pending_prepare_signature(data, prepare_signature)
write_library(slug, data)
job_id = await _ensure_prepare_job(slug)
return {"job_id": job_id, "library": library_payload(data)}
@router.post("/libraries/{slug}/jobs/build")
async def build_library(slug: str):
data = read_library(slug)