first commit
This commit is contained in:
49
backend/app/models/match.py
Normal file
49
backend/app/models/match.py
Normal file
@@ -0,0 +1,49 @@
|
||||
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")
|
||||
Reference in New Issue
Block a user