# /opt/service_finder/backend/app/models/history.py from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, JSON, Date, Text from sqlalchemy.orm import relationship from sqlalchemy.sql import func from app.db.base import Base # --- 1. Jármű Birtoklási Előzmények (Ownership History) --- # Ez a tábla mondja meg, kié volt az autó egy adott időpillanatban. # Így biztosítjuk, hogy a régi tulajdonos adatai védve legyenek az újtól. class VehicleOwnership(Base): __tablename__ = "vehicle_ownerships" __table_args__ = {"schema": "data"} id = Column(Integer, primary_key=True, index=True) # Kapcsolatok vehicle_id = Column(Integer, ForeignKey("data.user_vehicles.id"), nullable=False) user_id = Column(Integer, ForeignKey("data.users.id"), nullable=False) # Időszak start_date = Column(Date, nullable=False, default=func.current_date()) # Mikor került hozzá end_date = Column(Date, nullable=True) # Ha NULL, akkor ő a jelenlegi tulajdonos! # Jegyzet (pl. adásvételi szerződés száma) notes = Column(Text, nullable=True) # SQLAlchemy kapcsolatok (visszahivatkozások a fő modellekben kellenek majd) vehicle = relationship("UserVehicle", back_populates="ownership_history") user = relationship("User", back_populates="owned_vehicles") # --- 2. Audit Log (A "Fekete Doboz") --- # Minden kritikus módosítást itt tárolunk. Ez a rendszer "igazságügyi naplója". class AuditLog(Base): __tablename__ = "audit_logs" __table_args__ = {"schema": "data"} id = Column(Integer, primary_key=True, index=True) # KI? (A felhasználó, aki a műveletet végezte) user_id = Column(Integer, ForeignKey("data.users.id"), nullable=True) # MIT? (Milyen objektumot érintett?) target_type = Column(String, index=True) # pl. "vehicle", "cost", "user_profile" target_id = Column(Integer, index=True) # pl. az autó ID-ja # HOGYAN? action = Column(String, nullable=False) # CREATE, UPDATE, DELETE, LOGIN_FAILED, EXPORT_DATA # RÉSZLETEK (Mi változott?) # Pl: {"field": "odometer", "old_value": 150000, "new_value": 120000} <- Visszatekerés gyanú! changes = Column(JSON, nullable=True) # BIZTONSÁG ip_address = Column(String, nullable=True) # Honnan jött a kérés? user_agent = Column(String, nullable=True) # Milyen böngészőből? # MIKOR? timestamp = Column(DateTime(timezone=True), server_default=func.now()) # Kapcsolat (Opcionális, csak ha le akarjuk kérdezni a user adatait a logból) user = relationship("User")