|
3 | 3 | from bson import ObjectId |
4 | 4 | from services.bulletins_master_service import BulletinsMasterService |
5 | 5 | from services.bulletins_version_service import BulletinsVersionService |
| 6 | +from services.templates_master_service import TemplatesMasterService |
6 | 7 | from services.cards_service import CardsService |
7 | 8 | from acb_orm.schemas.bulletins_master_schema import BulletinsMasterCreate, BulletinsMasterUpdate, BulletinsMasterRead |
8 | 9 | from acb_orm.schemas.bulletins_version_schema import BulletinsVersionRead, BulletinsVersionCreate, BulletinsVersionUpdate |
|
16 | 17 | router = APIRouter(prefix="/bulletins", tags=["Bulletin Management"]) |
17 | 18 | bulletins_master_service = BulletinsMasterService() |
18 | 19 | bulletins_version_service = BulletinsVersionService() |
| 20 | +templates_master_service = TemplatesMasterService() |
19 | 21 | cards_service = CardsService() |
20 | 22 | security = HTTPBearer() |
21 | 23 |
|
@@ -59,6 +61,22 @@ def extract_card_ids_from_data(data: dict) -> Set[str]: |
59 | 61 | return card_ids |
60 | 62 |
|
61 | 63 |
|
| 64 | +def get_template_info_from_bulletin_master(bulletin_master) -> tuple[str | None, str | None]: |
| 65 | + """Resolve the template display name and machine name used by a bulletin master, if available.""" |
| 66 | + template_master_id = getattr(bulletin_master, "base_template_master_id", None) |
| 67 | + if not template_master_id: |
| 68 | + return None, None |
| 69 | + |
| 70 | + try: |
| 71 | + template_master = templates_master_service.get_by_id(str(template_master_id)) |
| 72 | + return ( |
| 73 | + getattr(template_master, "template_name", None), |
| 74 | + getattr(template_master, "name_machine", None), |
| 75 | + ) |
| 76 | + except Exception: |
| 77 | + return None, None |
| 78 | + |
| 79 | + |
62 | 80 | # --- CRUD and queries for bulletin masters --- |
63 | 81 |
|
64 | 82 | @router.post("/", response_model=BulletinsMasterRead) |
@@ -309,11 +327,15 @@ def get_current_version_published( |
309 | 327 | except Exception as e: |
310 | 328 | # If cards fetch fails, continue without cards (graceful degradation) |
311 | 329 | pass |
| 330 | + |
| 331 | + template_name, template_machine_name = get_template_info_from_bulletin_master(bulletin_master) |
312 | 332 |
|
313 | 333 | return BulletinWithCurrentVersionPublic( |
314 | 334 | master=bulletin_master, |
315 | 335 | current_version=current_version, |
316 | | - cards_metadata=cards_metadata |
| 336 | + cards_metadata=cards_metadata, |
| 337 | + template_name=template_name, |
| 338 | + template_machine_name=template_machine_name |
317 | 339 | ) |
318 | 340 |
|
319 | 341 | @router.get("/by-slug/{bulletinSlug}", response_model=BulletinWithCurrentVersionPublic) |
@@ -370,11 +392,15 @@ def get_current_version_published_by_slug( |
370 | 392 | except Exception as e: |
371 | 393 | # If cards fetch fails, continue without cards (graceful degradation) |
372 | 394 | pass |
| 395 | + |
| 396 | + template_name, template_machine_name = get_template_info_from_bulletin_master(bulletin_master) |
373 | 397 |
|
374 | 398 | return BulletinWithCurrentVersionPublic( |
375 | 399 | master=bulletin_master, |
| 400 | + template_name=template_name, |
| 401 | + template_machine_name=template_machine_name, |
376 | 402 | current_version=current_version, |
377 | | - cards_metadata=cards_metadata |
| 403 | + cards_metadata=cards_metadata, |
378 | 404 | ) |
379 | 405 |
|
380 | 406 | # --- CRUD and queries for bulletin versions --- |
|
0 commit comments