BE-PR-001: Rename Propose -> Proposal across backend

- New canonical model: Proposal, ProposalStatus (app/models/proposal.py)
- New canonical router: /projects/{id}/proposals (app/api/routers/proposals.py)
- Schemas renamed: ProposalCreate, ProposalUpdate, ProposalResponse, etc.
- Old propose.py and proposes.py kept as backward-compat shims
- Legacy /proposes API still works (delegates to /proposals handlers)
- DB table name (proposes), column (propose_code), and permission names
  (propose.*) kept unchanged for zero-migration compat
- Updated init_wizard.py comments
This commit is contained in:
zhi
2026-03-29 15:35:23 +00:00
parent 7fd93cf8a8
commit cfacd432f5
7 changed files with 457 additions and 322 deletions

View File

@@ -117,10 +117,10 @@ DEFAULT_PERMISSIONS = [
("task.close", "Close / cancel a task", "task"),
("task.reopen_closed", "Reopen a closed task", "task"),
("task.reopen_completed", "Reopen a completed task", "task"),
# Propose actions
("propose.accept", "Accept a propose into a milestone", "propose"),
("propose.reject", "Reject a propose", "propose"),
("propose.reopen", "Reopen a rejected propose", "propose"),
# Proposal actions (permission names kept as propose.* for DB compat)
("propose.accept", "Accept a proposal into a milestone", "propose"),
("propose.reject", "Reject a proposal", "propose"),
("propose.reopen", "Reopen a rejected proposal", "propose"),
# Role/Permission management
("role.manage", "Manage roles and permissions", "admin"),
("account.create", "Create HarborForge accounts", "account"),
@@ -159,7 +159,7 @@ def init_default_permissions(db: Session) -> list[Permission]:
# Default role → permission mapping
# ---------------------------------------------------------------------------
# mgr: project management + all milestone/task/propose actions
# mgr: project management + all milestone/task/proposal actions
_MGR_PERMISSIONS = {
"project.read", "project.write", "project.manage_members",
"task.create", "task.read", "task.write", "task.delete",
@@ -171,7 +171,7 @@ _MGR_PERMISSIONS = {
"user.reset-self-apikey",
}
# dev: day-to-day development work — no freeze/start/close milestone, no accept/reject propose
# dev: day-to-day development work — no freeze/start/close milestone, no accept/reject proposal
_DEV_PERMISSIONS = {
"project.read",
"task.create", "task.read", "task.write",