71 lines
1.5 KiB
Python
71 lines
1.5 KiB
Python
"""Review schemas"""
|
|
|
|
from pydantic import BaseModel, Field
|
|
from typing import Optional, List
|
|
from datetime import datetime
|
|
from app.models.review import ReviewStatusEnum
|
|
from app.models.comment import SeverityEnum
|
|
|
|
|
|
class CommentResponse(BaseModel):
|
|
"""Schema for comment response"""
|
|
id: int
|
|
file_path: str
|
|
line_number: int
|
|
content: str
|
|
severity: SeverityEnum
|
|
posted: bool
|
|
posted_at: Optional[datetime] = None
|
|
created_at: datetime
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class PullRequestInfo(BaseModel):
|
|
"""Schema for pull request information"""
|
|
id: int
|
|
pr_number: int
|
|
title: str
|
|
author: str
|
|
source_branch: str
|
|
target_branch: str
|
|
url: str
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class ReviewResponse(BaseModel):
|
|
"""Schema for review response"""
|
|
id: int
|
|
pull_request_id: int
|
|
pull_request: PullRequestInfo
|
|
status: ReviewStatusEnum
|
|
started_at: datetime
|
|
completed_at: Optional[datetime] = None
|
|
files_analyzed: int
|
|
comments_generated: int
|
|
error_message: Optional[str] = None
|
|
comments: Optional[List[CommentResponse]] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class ReviewList(BaseModel):
|
|
"""Schema for review list response"""
|
|
items: List[ReviewResponse]
|
|
total: int
|
|
|
|
|
|
class ReviewStats(BaseModel):
|
|
"""Schema for review statistics"""
|
|
total_reviews: int
|
|
active_reviews: int
|
|
completed_reviews: int
|
|
failed_reviews: int
|
|
total_comments: int
|
|
avg_comments_per_review: float
|
|
|