Интегрирован wesp в сайт
CI / quality (push) Canceled after 0s

This commit is contained in:
влад
2026-07-17 12:57:18 +03:00
parent 5dfa06ddbe
commit 355c0ef9f1
883 changed files with 194576 additions and 177 deletions
+120 -1
View File
@@ -17,7 +17,7 @@ class ZootechServiceError(DomainError):
def _emit_change(enterprise_id: str, table: str, record_id: str, payload: dict, version: int, content_hash: str) -> None:
event = ChangeEventIn(
event_id=str(uuid4()),
seq=None,
seq=0,
domain="global",
table=table,
record_id=record_id,
@@ -61,6 +61,29 @@ def patch_component(enterprise_id: str, record_id: str, body: dict) -> dict:
return upsert_component(enterprise_id, record_id, merged)
def delete_component(enterprise_id: str, record_id: str) -> None:
existing = load_catalog_row(enterprise_id, "component", record_id)
if not existing:
raise ZootechServiceError("NOT_FOUND")
version = int(existing.get("version") or 0) + 1
payload = {**existing, "version": version, "is_deleted": True}
content_hash = compute_content_hash(payload)
event = ChangeEventIn(
event_id=str(uuid4()),
seq=0,
domain="global",
table="component",
record_id=record_id,
action="delete",
version=version,
content_hash=content_hash,
payload=payload,
emitted_at=datetime.now(UTC),
origin_site_id=SyncEngine.ORCHESTRATOR_SITE_ID,
)
SyncEngine(enterprise_id, SyncEngine.ORCHESTRATOR_SITE_ID).process_push([event], origin="orchestrator")
def upsert_recipe(enterprise_id: str, record_id: str | None, body: dict) -> dict:
rid = record_id or str(uuid4())
existing = load_catalog_row(enterprise_id, "recipe", rid)
@@ -82,3 +105,99 @@ def upsert_recipe(enterprise_id: str, record_id: str | None, body: dict) -> dict
payload["content_hash"] = content_hash
_emit_change(enterprise_id, "recipe", rid, payload, version, content_hash)
return load_catalog_row(enterprise_id, "recipe", rid) or payload
def upsert_feed_dispenser(enterprise_id: str, record_id: str | None, body: dict) -> dict:
rid = record_id or str(uuid4())
existing = load_catalog_row(enterprise_id, "feed_dispenser", rid)
version = int(body.get("version") or (existing or {}).get("version") or 0) + 1 if existing else 1
payload = {
"id": rid,
"name": body.get("name", (existing or {}).get("name", "")),
"farm": body.get("farm", (existing or {}).get("farm", "")),
"operator": body.get("operator", (existing or {}).get("operator", "")),
"type": body.get("type", (existing or {}).get("type", "dispenser")),
"version": version,
}
content_hash = compute_content_hash(payload)
payload["content_hash"] = content_hash
_emit_change(enterprise_id, "feed_dispenser", rid, payload, version, content_hash)
return load_catalog_row(enterprise_id, "feed_dispenser", rid) or payload
def patch_feed_dispenser(enterprise_id: str, record_id: str, body: dict) -> dict:
existing = load_catalog_row(enterprise_id, "feed_dispenser", record_id)
if not existing:
raise ZootechServiceError("NOT_FOUND")
merged = {**existing, **body}
return upsert_feed_dispenser(enterprise_id, record_id, merged)
def delete_feed_dispenser(enterprise_id: str, record_id: str) -> None:
existing = load_catalog_row(enterprise_id, "feed_dispenser", record_id)
if not existing:
raise ZootechServiceError("NOT_FOUND")
version = int(existing.get("version") or 0) + 1
payload = {**existing, "version": version, "is_deleted": True}
content_hash = compute_content_hash(payload)
event = ChangeEventIn(
event_id=str(uuid4()),
seq=0,
domain="global",
table="feed_dispenser",
record_id=record_id,
action="delete",
version=version,
content_hash=content_hash,
payload=payload,
emitted_at=datetime.now(UTC),
origin_site_id=SyncEngine.ORCHESTRATOR_SITE_ID,
)
SyncEngine(enterprise_id, SyncEngine.ORCHESTRATOR_SITE_ID).process_push([event], origin="orchestrator")
def upsert_feeding_period(enterprise_id: str, record_id: str | None, body: dict) -> dict:
rid = record_id or str(uuid4())
existing = load_catalog_row(enterprise_id, "feeding_period", rid)
version = int(body.get("version") or (existing or {}).get("version") or 0) + 1 if existing else 1
payload = {
"id": rid,
"name": body.get("name", (existing or {}).get("name", "")),
"dispenser_id": body.get("dispenser_id", (existing or {}).get("dispenser_id")),
"version": version,
}
content_hash = compute_content_hash(payload)
payload["content_hash"] = content_hash
_emit_change(enterprise_id, "feeding_period", rid, payload, version, content_hash)
return load_catalog_row(enterprise_id, "feeding_period", rid) or payload
def patch_feeding_period(enterprise_id: str, record_id: str, body: dict) -> dict:
existing = load_catalog_row(enterprise_id, "feeding_period", record_id)
if not existing:
raise ZootechServiceError("NOT_FOUND")
merged = {**existing, **body}
return upsert_feeding_period(enterprise_id, record_id, merged)
def delete_feeding_period(enterprise_id: str, record_id: str) -> None:
existing = load_catalog_row(enterprise_id, "feeding_period", record_id)
if not existing:
raise ZootechServiceError("NOT_FOUND")
version = int(existing.get("version") or 0) + 1
payload = {**existing, "version": version, "is_deleted": True}
content_hash = compute_content_hash(payload)
event = ChangeEventIn(
event_id=str(uuid4()),
seq=0,
domain="global",
table="feeding_period",
record_id=record_id,
action="delete",
version=version,
content_hash=content_hash,
payload=payload,
emitted_at=datetime.now(UTC),
origin_site_id=SyncEngine.ORCHESTRATOR_SITE_ID,
)
SyncEngine(enterprise_id, SyncEngine.ORCHESTRATOR_SITE_ID).process_push([event], origin="orchestrator")