Files
Verificacion_EFOS_Backend/app/modules/moves/models.py
2026-04-01 13:48:40 -07:00

71 lines
2.3 KiB
Python

from sqlalchemy import Column, Integer, String, Date, Index, DateTime, Float, Boolean, Text, ForeignKey, Enum as SQLEnum
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship
from database import Base
from sqlalchemy.dialects.postgresql import JSONB
import enum
class Action(str, enum.Enum):
UPLOAD = "upload"
MATCH = "match"
QUERY = "query"
CONSUMPTION = "consumption"
CREATE = "create"
DELETE = "delete"
SOLD = "sold"
INTERACTION = "interaction"
COMMENT = "comment"
CONFIG = "config"
EMAIL = "email"
class Target(str, enum.Enum):
CLIENT = "client"
INVOICES = "invoices"
FEED = "feed"
EFOS = "efos"
CREDITS = "credits"
USERS = "users"
EMAIL = "email"
class Moves(Base):
__tablename__ = "moves"
id = Column(Integer, primary_key=True, nullable=False)
action_type = Column(SQLEnum(Action, name="action_type", create_type=False), nullable=False)
target_type = Column(SQLEnum(Target, name="target_type", create_type=False), nullable=False)
description = Column(Text, nullable=True)
move_metadata = Column(JSONB, nullable=True)
ip_address = Column(String(45), nullable=True)
user_agent = Column(String(255), nullable=True)
client_id = Column(Integer, ForeignKey("clients.id"), nullable=True)
user_id = Column(Integer, ForeignKey("users.id"), nullable=True)
is_active = Column(Boolean, nullable=False, default=True)
#relationships
user = relationship("Users", foreign_keys=[user_id], back_populates="moves")
created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False)
created_by = Column(Integer, ForeignKey("users.id"), nullable=True)
updated_at = Column(DateTime(timezone=True), onupdate=func.now(), nullable=True)
deleted_by = Column(Integer, ForeignKey("users.id"), nullable=True)
__table_args_ = (
Index('idx_moves_client','client_id'),
Index('idx_moves_user','user_id'),
Index('idx_moves_action','action_type'),
Index('idx_moves_target','target_type'),
Index('idx_moves_created','created_at'),
Index('idx_moves_active','is_active'),
)
#Relaciones
client = relationship("Client", foreign_keys=[client_id])
creator = relationship("Users", foreign_keys=[created_by])