Skip to content

Commit 2c5dec3

Browse files
authored
Merge pull request #16 from CIAT-DAPA/develop
feat: add template information retrieval to bulletin responses
2 parents 2b2c5d8 + 6248e17 commit 2c5dec3

2 files changed

Lines changed: 32 additions & 4 deletions

File tree

src/api/bulletins_management.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from bson import ObjectId
44
from services.bulletins_master_service import BulletinsMasterService
55
from services.bulletins_version_service import BulletinsVersionService
6+
from services.templates_master_service import TemplatesMasterService
67
from services.cards_service import CardsService
78
from acb_orm.schemas.bulletins_master_schema import BulletinsMasterCreate, BulletinsMasterUpdate, BulletinsMasterRead
89
from acb_orm.schemas.bulletins_version_schema import BulletinsVersionRead, BulletinsVersionCreate, BulletinsVersionUpdate
@@ -16,6 +17,7 @@
1617
router = APIRouter(prefix="/bulletins", tags=["Bulletin Management"])
1718
bulletins_master_service = BulletinsMasterService()
1819
bulletins_version_service = BulletinsVersionService()
20+
templates_master_service = TemplatesMasterService()
1921
cards_service = CardsService()
2022
security = HTTPBearer()
2123

@@ -59,6 +61,22 @@ def extract_card_ids_from_data(data: dict) -> Set[str]:
5961
return card_ids
6062

6163

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+
6280
# --- CRUD and queries for bulletin masters ---
6381

6482
@router.post("/", response_model=BulletinsMasterRead)
@@ -309,11 +327,15 @@ def get_current_version_published(
309327
except Exception as e:
310328
# If cards fetch fails, continue without cards (graceful degradation)
311329
pass
330+
331+
template_name, template_machine_name = get_template_info_from_bulletin_master(bulletin_master)
312332

313333
return BulletinWithCurrentVersionPublic(
314334
master=bulletin_master,
315335
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
317339
)
318340

319341
@router.get("/by-slug/{bulletinSlug}", response_model=BulletinWithCurrentVersionPublic)
@@ -370,11 +392,15 @@ def get_current_version_published_by_slug(
370392
except Exception as e:
371393
# If cards fetch fails, continue without cards (graceful degradation)
372394
pass
395+
396+
template_name, template_machine_name = get_template_info_from_bulletin_master(bulletin_master)
373397

374398
return BulletinWithCurrentVersionPublic(
375399
master=bulletin_master,
400+
template_name=template_name,
401+
template_machine_name=template_machine_name,
376402
current_version=current_version,
377-
cards_metadata=cards_metadata
403+
cards_metadata=cards_metadata,
378404
)
379405

380406
# --- CRUD and queries for bulletin versions ---

src/schemas/response_models.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Dict
1+
from typing import Dict, Optional
22
from pydantic import BaseModel
33
from acb_orm.schemas.templates_master_schema import TemplatesMasterRead
44
from acb_orm.schemas.templates_version_schema import TemplatesVersionRead
@@ -20,4 +20,6 @@ class BulletinWithCurrentVersionPublic(BaseModel):
2020
"""Public response model with embedded cards metadata."""
2121
master: BulletinsMasterRead
2222
current_version: BulletinsVersionRead
23-
cards_metadata: Dict[str, CardsRead]
23+
cards_metadata: Dict[str, CardsRead]
24+
template_name: Optional[str] = None
25+
template_machine_name: Optional[str] = None

0 commit comments

Comments
 (0)