from sqlalchemy import Column, Integer, String, DateTime, JSON, ForeignKey, text, Numeric, Boolean, BigInteger from sqlalchemy.sql import func from app.db.base_class import Base class SecurityAuditLog(Base): """ Kiemelt biztonsági események és a 4-szem elv. """ __tablename__ = "security_audit_logs" __table_args__ = {"schema": "data", "extend_existing": True} id = Column(Integer, primary_key=True) action = Column(String(50)) # 'ROLE_CHANGE', 'MANUAL_CREDIT_ADJUST', 'SUB_EXTEND' actor_id = Column(Integer, ForeignKey("data.users.id")) # Aki kezdeményezte target_id = Column(Integer, ForeignKey("data.users.id")) # Akivel történt confirmed_by_id = Column(Integer, ForeignKey("data.users.id"), nullable=True) is_critical = Column(Boolean, default=False) payload_before = Column(JSON) payload_after = Column(JSON) created_at = Column(DateTime(timezone=True), server_default=func.now()) class OperationalLog(Base): """ Felhasználói szintű napi üzemi események (Audit Trail). """ __tablename__ = "operational_logs" __table_args__ = {"schema": "data", "extend_existing": True} id = Column(Integer, primary_key=True, index=True) user_id = Column(Integer, ForeignKey("data.users.id", ondelete="SET NULL"), nullable=True) action = Column(String(100), nullable=False) # pl. "ADD_VEHICLE" resource_type = Column(String(50)) resource_id = Column(String(100)) details = Column(JSON, server_default=text("'{}'::jsonb")) ip_address = Column(String(45)) created_at = Column(DateTime(timezone=True), server_default=func.now()) class ProcessLog(Base): """ Robotok és háttérfolyamatok futási naplója (A reggeli jelentésekhez). """ __tablename__ = "process_logs" # Külön tábla a tisztaság kedvéért __table_args__ = {"schema": "data", "extend_existing": True} id = Column(Integer, primary_key=True) process_name = Column(String(100), index=True) # 'Master-Enricher' start_time = Column(DateTime(timezone=True), server_default=func.now()) end_time = Column(DateTime(timezone=True)) items_processed = Column(Integer, default=0) items_failed = Column(Integer, default=0) details = Column(JSON, server_default=text("'{}'::jsonb")) created_at = Column(DateTime(timezone=True), server_default=func.now()) class FinancialLedger(Base): """ Minden pénz- és kreditmozgás központi naplója. """ __tablename__ = "financial_ledger" __table_args__ = {"schema": "data", "extend_existing": True} id = Column(Integer, primary_key=True) user_id = Column(Integer, ForeignKey("data.users.id")) person_id = Column(BigInteger, ForeignKey("data.persons.id")) amount = Column(Numeric(18, 4), nullable=False) currency = Column(String(10)) transaction_type = Column(String(50)) related_agent_id = Column(Integer, ForeignKey("data.users.id"), nullable=True) details = Column(JSON, server_default=text("'{}'::jsonb")) created_at = Column(DateTime(timezone=True), server_default=func.now())