from sqlalchemy import Column, Integer, String, Boolean, DateTime, Text, ForeignKey, JSON from sqlalchemy.orm import relationship from datetime import datetime from database import Base class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(100), nullable=False) email = Column(String(100), unique=True, nullable=False) password = Column(String(255), nullable=False) rol = Column(String(50), default='operator') active = Column(Boolean, default=True) creation_time = Column(DateTime, default=datetime.utcnow) update_time = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) modifications = relationship('UserAudit', back_populates='user', foreign_keys='UserAudit.user_id') modifications_made = relationship('UserAudit', back_populates='updater', foreign_keys='UserAudit.updater_id') class UserAudit(Base): __tablename__ = 'users_audit' id = Column(Integer, primary_key=True) user_id = Column(Integer, ForeignKey('users.id'), nullable=False) updater_id = Column(Integer, ForeignKey('users.id'), nullable=False) action = Column(String(50), nullable=False) updated_attribute = Column(String(100)) before_value = Column(Text) after_value = Column(Text) snapshot = Column(JSON) modification_date = Column(DateTime, default=datetime.utcnow) ip_address = Column(String(45)) user = relationship('User', foreign_keys=[user_id], back_populates='modifications') updater = relationship('User', foreign_keys=[updater_id], back_populates='modifications_made')