9a17916dd2
- tool_instances.py: 2108 → 496 lines - git_repositories.py: 1422 → 500 lines - config_profiles.py: 474 → 300 lines (already committed) Extract business logic into services: - services/tool/instance_service.py - services/git/operations.py - services/config/crud_service.py Quality gates: py_compile pass on all files
136 lines
2.3 KiB
Python
136 lines
2.3 KiB
Python
"""Git repository request/response schemas."""
|
|
|
|
import uuid
|
|
from datetime import datetime
|
|
|
|
from pydantic import BaseModel, ConfigDict
|
|
|
|
|
|
class GitRepositoryCreate(BaseModel):
|
|
name: str
|
|
remote_url: str | None = None
|
|
force_original_url: bool = False
|
|
ssh_key_id: str | None = None
|
|
|
|
|
|
class URLParseRequest(BaseModel):
|
|
url: str
|
|
|
|
|
|
class URLParseResponse(BaseModel):
|
|
original_url: str
|
|
base_url: str | None
|
|
is_valid_clone_url: bool
|
|
needs_parsing: bool
|
|
host: str | None
|
|
message: str
|
|
error_code: str | None
|
|
|
|
|
|
class GitRepositoryResponse(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: uuid.UUID
|
|
name: str
|
|
path: str
|
|
project_id: uuid.UUID | None
|
|
owner_id: uuid.UUID
|
|
is_mirror: bool
|
|
remote_url: str | None
|
|
last_push: datetime | None
|
|
ssh_key_id: uuid.UUID | None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class UpdateSSHKeyRequest(BaseModel):
|
|
ssh_key_id: str | None = None
|
|
|
|
|
|
class FileListResponse(BaseModel):
|
|
path: str
|
|
branch: str
|
|
entries: list[dict]
|
|
|
|
|
|
class FileContentResponse(BaseModel):
|
|
path: str
|
|
branch: str
|
|
content: str
|
|
size: int
|
|
encoding: str
|
|
language: str | None
|
|
is_binary: bool
|
|
last_commit: dict | None
|
|
|
|
|
|
class BranchesResponse(BaseModel):
|
|
branches: list[dict]
|
|
default_branch: str
|
|
|
|
|
|
class FileUpdateRequest(BaseModel):
|
|
path: str
|
|
branch: str
|
|
content: str
|
|
commit_message: str
|
|
|
|
|
|
class FileUpdateResponse(BaseModel):
|
|
commit_hash: str
|
|
message: str
|
|
branch: str
|
|
|
|
|
|
class StatusResponse(BaseModel):
|
|
branch: str
|
|
modified: list[str]
|
|
added: list[str]
|
|
deleted: list[str]
|
|
untracked: list[str]
|
|
renamed: list[str]
|
|
ahead: int
|
|
behind: int
|
|
|
|
|
|
class BranchCreateRequest(BaseModel):
|
|
name: str
|
|
base_branch: str = "HEAD"
|
|
|
|
|
|
class CheckoutRequest(BaseModel):
|
|
branch: str
|
|
|
|
|
|
class CommitRequest(BaseModel):
|
|
message: str
|
|
files: list[str] | None = None
|
|
|
|
|
|
class CommitResponse(BaseModel):
|
|
commit_hash: str
|
|
message: str
|
|
|
|
|
|
class FetchResponse(BaseModel):
|
|
message: str
|
|
|
|
|
|
class PullResponse(BaseModel):
|
|
message: str
|
|
|
|
|
|
class PushResponse(BaseModel):
|
|
message: str
|
|
|
|
|
|
class MergeRequest(BaseModel):
|
|
source_branch: str
|
|
target_branch: str | None = None
|
|
message: str | None = None
|
|
|
|
|
|
class MergeResponse(BaseModel):
|
|
commit_hash: str
|
|
message: str
|