50 lines
1.9 KiB
Python
50 lines
1.9 KiB
Python
from sqlalchemy import Column, Integer, String, DateTime, Float, Enum, ForeignKey
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.sql import func
|
|
from app.models import Base
|
|
from app.config import TABLE_PREFIX
|
|
import enum
|
|
|
|
class TargetType(str, enum.Enum):
|
|
SAMPLE = "SAMPLE"
|
|
ORDER = "ORDER"
|
|
|
|
class MatchStatus(str, enum.Enum):
|
|
pending = "pending"
|
|
accepted = "accepted"
|
|
rejected = "rejected"
|
|
auto_matched = "auto_matched"
|
|
|
|
class ReviewAction(str, enum.Enum):
|
|
accept = "accept"
|
|
reject = "reject"
|
|
|
|
class MatchResult(Base):
|
|
__tablename__ = f"{TABLE_PREFIX}Match_Results"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
dit_id = Column(Integer, ForeignKey(f"{TABLE_PREFIX}DIT_Records.id"), nullable=False)
|
|
target_type = Column(Enum(TargetType), nullable=False)
|
|
target_id = Column(Integer, nullable=False)
|
|
score = Column(Float, nullable=False)
|
|
match_priority = Column(Integer, default=3) # 1: Oppy ID, 2: Account, 3: Name
|
|
match_source = Column(String(255)) # e.g., "Matched via Opportunity ID: OP12345"
|
|
reason = Column(String(255))
|
|
status = Column(Enum(MatchStatus), default=MatchStatus.pending)
|
|
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
|
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
|
|
|
dit = relationship("DitRecord", backref="matches")
|
|
|
|
class ReviewLog(Base):
|
|
__tablename__ = f"{TABLE_PREFIX}Review_Logs"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
match_id = Column(Integer, ForeignKey(f"{TABLE_PREFIX}Match_Results.id"), nullable=False)
|
|
user_id = Column(Integer, ForeignKey(f"{TABLE_PREFIX}users.id"), nullable=False)
|
|
action = Column(Enum(ReviewAction), nullable=False)
|
|
timestamp = Column(DateTime(timezone=True), server_default=func.now())
|
|
|
|
match_result = relationship("MatchResult", backref="review_logs")
|
|
user = relationship("User", backref="review_logs")
|