fix(FN-011): wrap validate_connection in try/except, flush before return, remove unused import, document unique constraint deferral

Fusion-Task-Id: FN-011
Fusion-Task-Lineage: 4a9aca6f-9d91-43aa-8d2a-d59657c1541a
This commit is contained in:
Fusion
2026-05-14 07:53:07 +02:00
parent cffeb11410
commit 4214b48c37
2 changed files with 13 additions and 3 deletions
+10 -3
View File
@@ -3,7 +3,6 @@
import uuid import uuid
from pydantic import BaseModel from pydantic import BaseModel
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.git.credentials import CredentialStorage, GitCredential from app.git.credentials import CredentialStorage, GitCredential
@@ -50,7 +49,15 @@ class ConnectionManager:
session.add(row) session.add(row)
await session.flush() await session.flush()
status = self.provider.validate_connection(git_url, str(credential_id)) try:
status = self.provider.validate_connection(
git_url, str(credential_id)
)
except Exception:
row.connection_status = str(ConnectionStatus.error)
await session.flush()
raise RuntimeError("Connection validation failed")
if status == ConnectionStatus.connected: if status == ConnectionStatus.connected:
row.connection_status = str(ConnectionStatus.connected) row.connection_status = str(ConnectionStatus.connected)
else: else:
@@ -58,7 +65,7 @@ class ConnectionManager:
await session.flush() await session.flush()
raise RuntimeError("Connection validation failed") raise RuntimeError("Connection validation failed")
await session.refresh(row) await session.flush()
return _map_row(row) return _map_row(row)
async def disconnect( async def disconnect(
@@ -14,6 +14,9 @@ if TYPE_CHECKING:
class RepositoryConnection(Base, UUIDMixin, TimestampMixin): class RepositoryConnection(Base, UUIDMixin, TimestampMixin):
__tablename__ = "repository_connection" __tablename__ = "repository_connection"
# NOTE: A partial unique index on (project_id, repository_id, provider_kind)
# when repository_id IS NOT NULL is deferred for MVP. Duplicate connections
# are acceptable until explicit disambiguation is required.
project_id: Mapped[uuid.UUID] = mapped_column( project_id: Mapped[uuid.UUID] = mapped_column(
ForeignKey("project.id"), index=True ForeignKey("project.id"), index=True