feat(backend): prevent duplicate draft sector and group bindings

reject duplicate sector and group bindings within draft mutations

harden draft structure consistency at the backend layer
prevent conflicting bindings before they reach publish flow
This commit is contained in:
greebo
2026-03-19 19:29:00 +03:00
parent 62550d5cb5
commit d060828256
2 changed files with 86 additions and 0 deletions

View File

@@ -49,6 +49,8 @@ from app.services.draft_guard import get_current_draft_context
from app.services.editor_validation import (
validate_bulk_seat_patch_references,
validate_bulk_seat_patch_uniqueness,
validate_create_group_uniqueness,
validate_create_sector_uniqueness,
validate_group_patch_uniqueness,
validate_sector_patch_uniqueness,
validate_single_seat_patch_references,
@@ -162,6 +164,12 @@ async def create_draft_sector(
expected_scheme_version_id=expected_scheme_version_id,
)
await validate_create_sector_uniqueness(
scheme_version_id=version.scheme_version_id,
sector_id=payload.sector_id,
element_id=payload.element_id,
)
row = await create_scheme_version_sector(
scheme_id=scheme.scheme_id,
scheme_version_id=version.scheme_version_id,
@@ -205,6 +213,12 @@ async def create_draft_group(
expected_scheme_version_id=expected_scheme_version_id,
)
await validate_create_group_uniqueness(
scheme_version_id=version.scheme_version_id,
group_id=payload.group_id,
element_id=payload.element_id,
)
row = await create_scheme_version_group(
scheme_id=scheme.scheme_id,
scheme_version_id=version.scheme_version_id,