50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
"""Repository schemas"""
|
|
|
|
from pydantic import BaseModel, Field, HttpUrl
|
|
from typing import Optional, Dict, Any, List
|
|
from datetime import datetime
|
|
from app.models.repository import PlatformEnum
|
|
|
|
|
|
class RepositoryBase(BaseModel):
|
|
"""Base repository schema"""
|
|
name: str = Field(..., description="Repository name")
|
|
platform: PlatformEnum = Field(..., description="Git platform")
|
|
url: str = Field(..., description="Repository URL")
|
|
config: Optional[Dict[str, Any]] = Field(default_factory=dict, description="Review configuration")
|
|
|
|
|
|
class RepositoryCreate(RepositoryBase):
|
|
"""Schema for creating repository"""
|
|
api_token: Optional[str] = Field(None, description="API token for Git platform (optional, uses master token if not set)")
|
|
webhook_secret: Optional[str] = Field(None, description="Webhook secret (generated if not provided)")
|
|
|
|
|
|
class RepositoryUpdate(BaseModel):
|
|
"""Schema for updating repository"""
|
|
name: Optional[str] = None
|
|
url: Optional[str] = None
|
|
api_token: Optional[str] = None
|
|
webhook_secret: Optional[str] = None
|
|
config: Optional[Dict[str, Any]] = None
|
|
is_active: Optional[bool] = None
|
|
|
|
|
|
class RepositoryResponse(RepositoryBase):
|
|
"""Schema for repository response"""
|
|
id: int
|
|
is_active: bool
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
webhook_url: str = Field(..., description="Webhook URL for this repository")
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class RepositoryList(BaseModel):
|
|
"""Schema for repository list response"""
|
|
items: List[RepositoryResponse]
|
|
total: int
|
|
|