- Fixed AttributeError in User model (added region_code, preferred_language) - Fixed InvalidRequestError in AssetAssignment (added organization relationship) - Configured STATIC_DIR for translation sync - Applied Alembic migrations for user schema updates
51 lines
2.3 KiB
Python
Executable File
51 lines
2.3 KiB
Python
Executable File
import enum
|
|
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, JSON, Date, Text, Enum
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.sql import func
|
|
from sqlalchemy.dialects.postgresql import UUID as PG_UUID
|
|
from app.db.base_class import Base
|
|
|
|
class LogSeverity(str, enum.Enum):
|
|
info = "info" # Általános művelet (pl. profil megtekintés)
|
|
warning = "warning" # Gyanús, de nem biztosan káros (pl. 3 elrontott jelszó)
|
|
critical = "critical" # Súlyos művelet (pl. jelszóváltoztatás, export)
|
|
emergency = "emergency" # Azonnali beavatkozást igényel (pl. SuperAdmin módosítás)
|
|
|
|
class VehicleOwnership(Base):
|
|
__tablename__ = "vehicle_ownerships"
|
|
__table_args__ = {"schema": "data"}
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
vehicle_id = Column(PG_UUID(as_uuid=True), ForeignKey("data.assets.id"), nullable=False)
|
|
user_id = Column(Integer, ForeignKey("data.users.id"), nullable=False)
|
|
start_date = Column(Date, nullable=False, default=func.current_date())
|
|
end_date = Column(Date, nullable=True)
|
|
notes = Column(Text, nullable=True)
|
|
|
|
vehicle = relationship("Asset", back_populates="ownership_history")
|
|
user = relationship("User", back_populates="ownership_history")
|
|
|
|
class AuditLog(Base):
|
|
__tablename__ = "audit_logs"
|
|
__table_args__ = {"schema": "data"}
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
user_id = Column(Integer, ForeignKey("data.users.id"), nullable=True)
|
|
severity = Column(Enum(LogSeverity), default=LogSeverity.info, nullable=False)
|
|
|
|
# Mi történt és min?
|
|
action = Column(String(100), nullable=False, index=True)
|
|
target_type = Column(String(50), index=True) # pl. "User", "Wallet", "Asset"
|
|
target_id = Column(String(50), index=True) # A cél rekord ID-ja
|
|
|
|
# Részletes adatok (JSONB formátum a rugalmasságért)
|
|
# A 'changes' helyett explicit old/new párost használunk a könnyebb visszaállításhoz
|
|
old_data = Column(JSON, nullable=True)
|
|
new_data = Column(JSON, nullable=True)
|
|
|
|
# Biztonsági nyomkövetés
|
|
ip_address = Column(String(45), index=True) # IPv6-ot is támogat
|
|
user_agent = Column(Text, nullable=True) # Böngésző/Eszköz információ
|
|
|
|
timestamp = Column(DateTime(timezone=True), server_default=func.now(), index=True)
|
|
|
|
user = relationship("User") |