"""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") def __repr__(self): return f""