import enum import uuid from datetime import datetime, timedelta from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, JSON, Enum, text from sqlalchemy.orm import relationship from sqlalchemy.sql import func from app.db.base_class import Base class ActionStatus(str, enum.Enum): pending = "pending" # Jóváhagyásra vár approved = "approved" # Végrehajtva rejected = "rejected" # Elutasítva expired = "expired" # Lejárt (biztonsági okokból) class PendingAction(Base): """Négy szem elv: Műveletek, amik jóváhagyásra várnak.""" __tablename__ = "pending_actions" __table_args__ = {"schema": "data"} id = Column(Integer, primary_key=True, index=True) # Ki akarja csinálni? requester_id = Column(Integer, ForeignKey("data.users.id"), nullable=False) # Ki hagyta jóvá/utasította el? approver_id = Column(Integer, ForeignKey("data.users.id"), nullable=True) status = Column(Enum(ActionStatus), default=ActionStatus.pending, nullable=False) # Milyen típusú művelet? (pl. "CHANGE_ROLE", "WALLET_ADJUST", "DELETE_LOGS") action_type = Column(String(50), nullable=False) # A művelet adatai JSON-ben (pl. {"user_id": 5, "new_role": "admin"}) payload = Column(JSON, nullable=False) # Miért kell ez a művelet? (Indoklás kötelező az audit miatt) reason = Column(String(255), nullable=False) created_at = Column(DateTime(timezone=True), server_default=func.now()) expires_at = Column(DateTime(timezone=True), default=lambda: datetime.now() + timedelta(hours=24)) processed_at = Column(DateTime(timezone=True), nullable=True) requester = relationship("User", foreign_keys=[requester_id]) approver = relationship("User", foreign_keys=[approver_id])