"""SQLAlchemy mappings for governance domain templates.""" from __future__ import annotations from sqlalchemy.dialects.postgresql import JSONB, UUID from app import db from app.core.common.identifiers import new_governance_uid class GovernanceDomainTemplate(db.Model): __tablename__ = "governance_domain_templates" __table_args__ = {"schema": "public"} uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid) template_code = db.Column(db.String(64), unique=True, nullable=False) name = db.Column(db.String(200), nullable=False) lifecycle_status = db.Column(db.String(20), nullable=False) current_version = db.Column(db.Integer, nullable=False) content_hash = db.Column(db.String(64), nullable=False) definition = db.Column(JSONB, nullable=False) created_at = db.Column(db.DateTime(timezone=True), nullable=False) updated_at = db.Column(db.DateTime(timezone=True), nullable=False) class GovernanceDomainTemplateVersion(db.Model): __tablename__ = "governance_domain_template_versions" __table_args__ = ( db.UniqueConstraint("template_uid", "version"), {"schema": "public"}, ) uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid) template_uid = db.Column( UUID(as_uuid=False), db.ForeignKey("public.governance_domain_templates.uid"), nullable=False, ) version = db.Column(db.Integer, nullable=False) content_hash = db.Column(db.String(64), nullable=False) definition = db.Column(JSONB, nullable=False) actor_uid = db.Column(UUID(as_uuid=False), nullable=False) created_at = db.Column(db.DateTime(timezone=True), nullable=False) class GovernanceObjectType(db.Model): __tablename__ = "governance_object_types" __table_args__ = ( db.UniqueConstraint("template_uid", "type_code"), {"schema": "public"}, ) uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid) template_uid = db.Column( UUID(as_uuid=False), db.ForeignKey("public.governance_domain_templates.uid"), nullable=False, ) type_code = db.Column(db.String(64), nullable=False) name = db.Column(db.String(200), nullable=False) lifecycle_status = db.Column(db.String(20), nullable=False) current_version = db.Column(db.Integer, nullable=False) stable_uid_prefix = db.Column(db.String(16), nullable=False) source_identity_fields = db.Column(JSONB, nullable=False) definition = db.Column(JSONB, nullable=False) created_at = db.Column(db.DateTime(timezone=True), nullable=False) updated_at = db.Column(db.DateTime(timezone=True), nullable=False) class GovernanceDomainTemplateImport(db.Model): __tablename__ = "governance_domain_template_imports" __table_args__ = {"schema": "public"} uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid) template_uid = db.Column( UUID(as_uuid=False), db.ForeignKey("public.governance_domain_templates.uid"), nullable=False, ) operation = db.Column(db.String(20), nullable=False) status = db.Column(db.String(20), nullable=False) version = db.Column(db.Integer, nullable=False) target_version = db.Column(db.Integer) before_state = db.Column(JSONB) after_state = db.Column(JSONB, nullable=False) diff = db.Column(JSONB, nullable=False) actor_uid = db.Column(UUID(as_uuid=False), nullable=False) created_at = db.Column(db.DateTime(timezone=True), nullable=False)