BE-PR-003: Add Essential SQLAlchemy model

- New app/models/essential.py with Essential model and EssentialType enum
  (feature, improvement, refactor)
- Fields: id, essential_code (unique), proposal_id (FK to proposes),
  type, title, description, created_by_id (FK to users), created_at, updated_at
- Added essentials relationship to Proposal model (cascade delete-orphan)
- Added essentials table auto-migration in main.py _migrate_schema()
- Registered essential module import in startup()
This commit is contained in:
zhi
2026-03-29 16:33:00 +00:00
parent 119a679e7f
commit 089d75f953
3 changed files with 90 additions and 1 deletions

View File

@@ -1,5 +1,6 @@
from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey, Enum
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from app.core.config import Base
import enum
@@ -69,6 +70,14 @@ class Proposal(Base):
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
# ---- relationships -----------------------------------------------------
essentials = relationship(
"Essential",
foreign_keys="Essential.proposal_id",
cascade="all, delete-orphan",
lazy="select",
)
# ---- convenience alias ------------------------------------------------
@hybrid_property
def proposal_code(self) -> str | None: