"""Read models for the enterprise edge-gateway control plane.""" from sqlalchemy.dialects.postgresql import ARRAY, JSONB, UUID from app import db from app.core.common.identifiers import new_governance_uid class EdgeGatewayEnrollment(db.Model): __tablename__ = "edge_gateway_enrollments" __table_args__ = {"schema": "public"} uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid) gateway_id = db.Column(UUID(as_uuid=False), nullable=False, unique=True) gateway_name = db.Column(db.String(200), nullable=False) environment = db.Column(db.String(20), nullable=False) network_zone = db.Column(db.String(120), nullable=False) policy_digest = db.Column(db.String(64), nullable=False) expected_certificate_sha256 = db.Column(db.String(64), nullable=False) allowed_control_hosts = db.Column(ARRAY(db.Text), nullable=False) allowed_proxy_hosts = db.Column(ARRAY(db.Text), nullable=False) token_hash = db.Column(db.String(64), nullable=False, unique=True) status = db.Column(db.String(20), nullable=False) expires_at = db.Column(db.DateTime(timezone=True), nullable=False) consumed_at = db.Column(db.DateTime(timezone=True)) class EdgeGateway(db.Model): __tablename__ = "edge_gateways" __table_args__ = {"schema": "public"} uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid) name = db.Column(db.String(200), nullable=False) environment = db.Column(db.String(20), nullable=False) network_zone = db.Column(db.String(120), nullable=False) status = db.Column(db.String(20), nullable=False) current_generation = db.Column(db.Integer, nullable=False) policy_digest = db.Column(db.String(64), nullable=False) allowed_control_hosts = db.Column(ARRAY(db.Text), nullable=False) allowed_proxy_hosts = db.Column(ARRAY(db.Text), nullable=False) last_heartbeat_at = db.Column(db.DateTime(timezone=True)) runtime_version = db.Column(db.String(80)) safe_health_summary = db.Column(JSONB, nullable=False) class EdgeGatewayCredential(db.Model): __tablename__ = "edge_gateway_credentials" __table_args__ = {"schema": "public"} uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid) gateway_id = db.Column(UUID(as_uuid=False), nullable=False) generation = db.Column(db.Integer, nullable=False) credential_hash = db.Column(db.String(64), nullable=False, unique=True) certificate_sha256 = db.Column(db.String(64), nullable=False) status = db.Column(db.String(20), nullable=False) expires_at = db.Column(db.DateTime(timezone=True), nullable=False) class EdgeGatewayRotationRequest(db.Model): __tablename__ = "edge_gateway_rotation_requests" __table_args__ = {"schema": "public"} gateway_id = db.Column(UUID(as_uuid=False), primary_key=True) request_id = db.Column(db.String(255), primary_key=True) request_digest = db.Column(db.String(64), nullable=False) generation = db.Column(db.Integer, nullable=False) class EdgeGatewayTask(db.Model): __tablename__ = "edge_gateway_tasks" __table_args__ = {"schema": "public"} task_id = db.Column(db.String(255), primary_key=True) gateway_id = db.Column(UUID(as_uuid=False), nullable=False) idempotency_key = db.Column(db.String(255), nullable=False) contract = db.Column(JSONB, nullable=False) contract_digest = db.Column(db.String(64), nullable=False) authority = db.Column(JSONB, nullable=False) status = db.Column(db.String(24), nullable=False) result_summary = db.Column(JSONB) class EdgeGatewayEvent(db.Model): __tablename__ = "edge_gateway_events" __table_args__ = {"schema": "public"} event_id = db.Column(db.String(80), primary_key=True) gateway_id = db.Column(UUID(as_uuid=False), nullable=False) task_id = db.Column(db.String(255), nullable=False) classification = db.Column(db.String(40), nullable=False) contract = db.Column(JSONB, nullable=False) contract_digest = db.Column(db.String(64), nullable=False) ack = db.Column(JSONB, nullable=False) class EdgeGatewayRelease(db.Model): __tablename__ = "edge_gateway_releases" __table_args__ = {"schema": "public"} uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid) gateway_id = db.Column(UUID(as_uuid=False), nullable=False) version = db.Column(db.String(80), nullable=False) artifact_digest = db.Column(db.String(64), nullable=False) rollback_version = db.Column(db.String(80), nullable=False) request_id = db.Column(db.String(255), nullable=False) request_digest = db.Column(db.String(64), nullable=False) status = db.Column(db.String(24), nullable=False) safe_summary = db.Column(JSONB, nullable=False) artifact_name = db.Column(db.String(255), nullable=False) deadline_at = db.Column(db.DateTime(timezone=True), nullable=False) signature_algorithm = db.Column(db.String(20), nullable=False) key_id = db.Column(db.String(128), nullable=False) manifest_digest = db.Column(db.String(64), nullable=False) signature = db.Column(db.String(128), nullable=False) signed_manifest = db.Column(JSONB, nullable=False) class EdgeGatewayAudit(db.Model): __tablename__ = "edge_gateway_audits" __table_args__ = {"schema": "public"} uid = db.Column(UUID(as_uuid=False), primary_key=True, default=new_governance_uid) gateway_id = db.Column(UUID(as_uuid=False)) event_type = db.Column(db.String(80), nullable=False) actor_uid = db.Column(UUID(as_uuid=False)) success = db.Column(db.Boolean, nullable=False) safe_detail = db.Column(JSONB, nullable=False) failure_fingerprint = db.Column(db.String(64)) window_started_at = db.Column(db.DateTime(timezone=True)) class EdgeGatewayFailureWindow(db.Model): __tablename__ = "edge_gateway_failure_windows" __table_args__ = {"schema": "public"} failure_fingerprint = db.Column(db.String(64), primary_key=True) window_started_at = db.Column(db.DateTime(timezone=True), primary_key=True) gateway_id = db.Column(UUID(as_uuid=False)) event_type = db.Column(db.String(80), nullable=False) occurrence_count = db.Column(db.Integer, nullable=False) first_seen_at = db.Column(db.DateTime(timezone=True), nullable=False) last_seen_at = db.Column(db.DateTime(timezone=True), nullable=False)