63 lines
2.6 KiB
Python
Executable File
63 lines
2.6 KiB
Python
Executable File
# /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") |