45 lines
1.5 KiB
Python

"""Review model"""
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Enum
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from datetime import datetime
import enum
from typing import Optional
from app.database import Base
class ReviewStatusEnum(str, enum.Enum):
"""Review status"""
PENDING = "pending"
FETCHING = "fetching"
ANALYZING = "analyzing"
COMMENTING = "commenting"
COMPLETED = "completed"
FAILED = "failed"
class Review(Base):
"""Code review model"""
__tablename__ = "reviews"
id = Column(Integer, primary_key=True, index=True)
pull_request_id = Column(Integer, ForeignKey("pull_requests.id"), nullable=False)
status = Column(Enum(ReviewStatusEnum), default=ReviewStatusEnum.PENDING)
started_at = Column(DateTime, default=datetime.utcnow, server_default=func.now())
completed_at = Column(DateTime, nullable=True)
files_analyzed = Column(Integer, default=0)
comments_generated = Column(Integer, default=0)
error_message = Column(String, nullable=True)
# Relationships
pull_request = relationship("PullRequest", back_populates="reviews")
comments = relationship("Comment", back_populates="review", cascade="all, delete-orphan")
events = relationship("ReviewEvent", back_populates="review", cascade="all, delete-orphan", order_by="ReviewEvent.created_at")
def __repr__(self):
return f"<Review(id={self.id}, status={self.status}, pr_id={self.pull_request_id})>"