Implement display artifacts, pricing integrity, draft base and publish preview bundle
This commit is contained in:
62
backend/app/services/structure_sync.py
Normal file
62
backend/app/services/structure_sync.py
Normal file
@@ -0,0 +1,62 @@
|
||||
from app.repositories.scheme_groups import list_scheme_version_groups
|
||||
from app.repositories.scheme_seats import (
|
||||
list_scheme_version_seats,
|
||||
repair_orphan_group_refs,
|
||||
repair_orphan_sector_refs,
|
||||
)
|
||||
from app.repositories.scheme_sectors import list_scheme_version_sectors
|
||||
|
||||
|
||||
async def repair_structure_references(
|
||||
*,
|
||||
scheme_version_id: str,
|
||||
) -> dict:
|
||||
sectors = await list_scheme_version_sectors(scheme_version_id)
|
||||
groups = await list_scheme_version_groups(scheme_version_id)
|
||||
seats = await list_scheme_version_seats(scheme_version_id)
|
||||
|
||||
valid_sector_ids = {item.sector_id for item in sectors if item.sector_id}
|
||||
valid_group_ids = {item.group_id for item in groups if item.group_id}
|
||||
|
||||
orphan_sector_values = sorted(
|
||||
{
|
||||
row.sector_id
|
||||
for row in seats
|
||||
if row.sector_id and row.sector_id not in valid_sector_ids
|
||||
}
|
||||
)
|
||||
orphan_group_values = sorted(
|
||||
{
|
||||
row.group_id
|
||||
for row in seats
|
||||
if row.group_id and row.group_id not in valid_group_ids
|
||||
}
|
||||
)
|
||||
|
||||
repaired_sector_refs_count = 0
|
||||
repaired_group_refs_count = 0
|
||||
|
||||
if len(valid_sector_ids) == 1 and orphan_sector_values:
|
||||
repaired_sector_refs_count = await repair_orphan_sector_refs(
|
||||
scheme_version_id=scheme_version_id,
|
||||
new_sector_id=next(iter(valid_sector_ids)),
|
||||
orphan_values=orphan_sector_values,
|
||||
)
|
||||
|
||||
if len(valid_group_ids) == 1 and orphan_group_values:
|
||||
repaired_group_refs_count = await repair_orphan_group_refs(
|
||||
scheme_version_id=scheme_version_id,
|
||||
new_group_id=next(iter(valid_group_ids)),
|
||||
orphan_values=orphan_group_values,
|
||||
)
|
||||
|
||||
return {
|
||||
"repaired_sector_refs_count": repaired_sector_refs_count,
|
||||
"repaired_group_refs_count": repaired_group_refs_count,
|
||||
"details": {
|
||||
"valid_sector_ids": sorted(valid_sector_ids),
|
||||
"valid_group_ids": sorted(valid_group_ids),
|
||||
"orphan_sector_values": orphan_sector_values,
|
||||
"orphan_group_values": orphan_group_values,
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user