BE-PR-002: Proposal model naming & field adjustments
- Add comprehensive docstring to Proposal model documenting all relationships - Add column comments for all fields (title, description, status, project_id, etc.) - Mark feat_task_id as DEPRECATED (will be replaced by Essential->task mapping in BE-PR-008) - Add proposal_code hybrid property as preferred alias for DB column propose_code - Update ProposalResponse schema to include proposal_code alongside propose_code - Update serializer to emit both proposal_code and propose_code for backward compat - No DB migration needed -- only Python-level changes
This commit is contained in:
@@ -24,16 +24,18 @@ router = APIRouter(prefix="/projects/{project_id}/proposals", tags=["Proposals"]
|
||||
def _serialize_proposal(db: Session, proposal: Proposal) -> dict:
|
||||
"""Serialize proposal with created_by_username."""
|
||||
creator = db.query(models.User).filter(models.User.id == proposal.created_by_id).first() if proposal.created_by_id else None
|
||||
code = proposal.propose_code # DB column; also exposed as proposal_code
|
||||
return {
|
||||
"id": proposal.id,
|
||||
"title": proposal.title,
|
||||
"description": proposal.description,
|
||||
"propose_code": proposal.propose_code,
|
||||
"proposal_code": code, # preferred name
|
||||
"propose_code": code, # backward compat
|
||||
"status": proposal.status.value if hasattr(proposal.status, "value") else proposal.status,
|
||||
"project_id": proposal.project_id,
|
||||
"created_by_id": proposal.created_by_id,
|
||||
"created_by_username": creator.username if creator else None,
|
||||
"feat_task_id": proposal.feat_task_id,
|
||||
"feat_task_id": proposal.feat_task_id, # DEPRECATED — read-only compat
|
||||
"created_at": proposal.created_at,
|
||||
"updated_at": proposal.updated_at,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user