fix: add foreign key constraints to all ORM models
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
Tests / lint (pull_request) Failing after 1926h43m10s
Tests / test (pull_request) Failing after 1926h43m12s

- Add 35 ForeignKey constraints across 15 tables (was zero)
- ON DELETE CASCADE for parent-child relationships (project → children)
- ON DELETE SET NULL for optional user references (created_by, assignee, etc.)
- Add relationship() with back_populates and cascade on all models
- Alter 11 columns from nullable=False to nullable=True for SET NULL
- Add 2 missing indexes on FK columns (assets.uploaded_by_user_id,
  project_titles.created_by_user_id)
- Update Pydantic response models to accept str | None for nullable fields
- Add Alembic migration 010 with complete upgrade/downgrade

Closes #17
This commit is contained in:
API文档维护Agent
2026-06-28 08:45:44 +08:00
parent e2c68888e9
commit 01f5541e14
6 changed files with 316 additions and 43 deletions
@@ -65,8 +65,8 @@ class TaskResponse(BaseModel):
description: str
status: TaskStatus
priority: TaskPriority
parent_task_id: str
assignee_user_id: str
parent_task_id: str | None
assignee_user_id: str | None
progress: float
planned_start_date: datetime | None
planned_end_date: datetime | None
@@ -126,7 +126,7 @@ class TaskIssueResponse(BaseModel):
description: str
resolved: bool
resolved_at: datetime | None
created_by_user_id: str
created_by_user_id: str | None
created_at: datetime
updated_at: datetime
+1 -1
View File
@@ -30,7 +30,7 @@ class EditPlanResponse(BaseModel):
project_id: str
template_id: str
asset_library_id: str
title_id: str = ""
title_id: str | None = ""
status: str
summary: str
editing_mode: str | None = None # one_take, pip, voice_over, voice_pip
+1 -1
View File
@@ -16,7 +16,7 @@ class GenerationTaskResponse(BaseModel):
asset_library_id: str
strategy_id: str
voice_library_id: str
edit_plan_id: str
edit_plan_id: str | None
status: str
progress: float
result_count: int
+1 -1
View File
@@ -14,4 +14,4 @@ class IngestJobResponse(BaseModel):
storage_key: str
status: str
error_message: str
result_asset_id: str
result_asset_id: str | None