fix: ревью Opus — баги #1-2 + Protocol расширен + BatchGroupingResult
This commit is contained in:
+75
-2
@@ -63,6 +63,30 @@ class Repository(Protocol):
|
||||
"""Текущая спецификация контракта."""
|
||||
...
|
||||
|
||||
def get_document(self, doc_id: str) -> dict | None:
|
||||
"""Получить документ по id."""
|
||||
...
|
||||
|
||||
def list_by_batch(self, batch_id: str) -> list[dict]:
|
||||
"""Все документы батча с полями классификации."""
|
||||
...
|
||||
|
||||
def count_by_status(self, batch_id: str) -> dict[str, int]:
|
||||
"""Количество документов по classify_status."""
|
||||
...
|
||||
|
||||
def reset_classify_status(self, batch_id: str) -> None:
|
||||
"""Сбросить classify_status на 'pending'."""
|
||||
...
|
||||
|
||||
def set_classify_processing(self, doc_id: str) -> None:
|
||||
"""Пометить документ как обрабатываемый."""
|
||||
...
|
||||
|
||||
def delete_document(self, doc_id: str) -> None:
|
||||
"""Удалить документ."""
|
||||
...
|
||||
|
||||
|
||||
# ── Продакшен: обёртка над db/*.py ──────────────────────────────
|
||||
|
||||
@@ -76,8 +100,7 @@ class PgRepository:
|
||||
|
||||
def set_document_parsed(self, doc_id, elements):
|
||||
from db import documents
|
||||
import json as _json
|
||||
documents.set_parsed(doc_id, _json.dumps(elements, ensure_ascii=False))
|
||||
documents.set_parsed(doc_id, elements) # documents.set_parsed уже делает json.dumps
|
||||
|
||||
def set_document_error(self, doc_id, error):
|
||||
from db import documents
|
||||
@@ -118,6 +141,30 @@ class PgRepository:
|
||||
from db import spec_current
|
||||
return spec_current.list_by_contract(contract_id)
|
||||
|
||||
def get_document(self, doc_id):
|
||||
from db import documents
|
||||
return documents.get(doc_id)
|
||||
|
||||
def list_by_batch(self, batch_id):
|
||||
from db import documents
|
||||
return documents.list_by_batch(batch_id)
|
||||
|
||||
def count_by_status(self, batch_id):
|
||||
from db import documents
|
||||
return documents.count_by_status(batch_id)
|
||||
|
||||
def reset_classify_status(self, batch_id):
|
||||
from db import documents
|
||||
documents.reset_classify_status(batch_id)
|
||||
|
||||
def set_classify_processing(self, doc_id):
|
||||
from db import documents
|
||||
documents.set_classify_processing(doc_id)
|
||||
|
||||
def delete_document(self, doc_id):
|
||||
from db import documents
|
||||
documents.delete(doc_id)
|
||||
|
||||
|
||||
# ── Тестовый: in-memory заглушка ────────────────────────────────
|
||||
|
||||
@@ -191,3 +238,29 @@ class MemRepository:
|
||||
|
||||
def get_spec_current(self, contract_id):
|
||||
return self.spec_current.get(contract_id, [])
|
||||
|
||||
def get_document(self, doc_id):
|
||||
return self.documents.get(doc_id)
|
||||
|
||||
def list_by_batch(self, batch_id):
|
||||
return [d for d in self.documents.values() if d.get("batch_id") == batch_id]
|
||||
|
||||
def count_by_status(self, batch_id):
|
||||
counts = {}
|
||||
for d in self.documents.values():
|
||||
if d.get("batch_id") == batch_id:
|
||||
s = d.get("classify_status", "unknown")
|
||||
counts[s] = counts.get(s, 0) + 1
|
||||
return counts
|
||||
|
||||
def reset_classify_status(self, batch_id):
|
||||
for d in self.documents.values():
|
||||
if d.get("batch_id") == batch_id:
|
||||
d["classify_status"] = "pending"
|
||||
|
||||
def set_classify_processing(self, doc_id):
|
||||
if doc_id in self.documents:
|
||||
self.documents[doc_id]["classify_status"] = "processing"
|
||||
|
||||
def delete_document(self, doc_id):
|
||||
self.documents.pop(doc_id, None)
|
||||
|
||||
Reference in New Issue
Block a user