from sqlalchemy import Column, String, Text, DECIMAL, TIMESTAMP, Boolean, ARRAY, Integer, JSON from sqlalchemy.dialects.postgresql import UUID import uuid from datetime import datetime from .base import Base class CVE(Base): __tablename__ = "cves" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) cve_id = Column(String(20), unique=True, nullable=False) description = Column(Text) cvss_score = Column(DECIMAL(3, 1)) severity = Column(String(20)) published_date = Column(TIMESTAMP) modified_date = Column(TIMESTAMP) affected_products = Column(ARRAY(String)) reference_urls = Column(ARRAY(String)) # Bulk processing fields data_source = Column(String(20), default='nvd_api') # 'nvd_api', 'nvd_bulk', 'manual' nvd_json_version = Column(String(10), default='2.0') bulk_processed = Column(Boolean, default=False) # nomi-sec PoC fields poc_count = Column(Integer, default=0) poc_data = Column(JSON) # Store nomi-sec PoC metadata # Reference data fields reference_data = Column(JSON) # Store extracted reference content and analysis reference_sync_status = Column(String(20), default='pending') # 'pending', 'processing', 'completed', 'failed' reference_last_synced = Column(TIMESTAMP) created_at = Column(TIMESTAMP, default=datetime.utcnow) updated_at = Column(TIMESTAMP, default=datetime.utcnow)