feat: ConnectWise PSA integration (#106)
PSA abstraction layer with provider pattern, ConnectWise integration (connection management, ticket linking, note posting, status updates, member mapping), Integrations page UI, Fernet credential encryption, in-memory TTL cache, 6 DB migrations, ConnectWise API reference docs.
This commit was merged in pull request #106.
This commit is contained in:
@@ -94,6 +94,10 @@ class SessionResponse(BaseModel):
|
||||
batch_id: Optional[UUID] = None
|
||||
target_label: Optional[str] = None
|
||||
|
||||
# PSA ticket link
|
||||
psa_ticket_id: Optional[str] = None
|
||||
psa_connection_id: Optional[UUID] = None
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
@@ -140,3 +144,28 @@ class SaveAsTreeResponse(BaseModel):
|
||||
tree_id: UUID
|
||||
tree_name: str
|
||||
message: str
|
||||
|
||||
|
||||
# ── PSA ticket link ──────────────────────────────────────────────────
|
||||
|
||||
|
||||
class TicketLinkRequest(BaseModel):
|
||||
"""Link or unlink a PSA ticket to a session."""
|
||||
psa_ticket_id: Optional[str] = None # null to unlink
|
||||
|
||||
|
||||
class PSATicketResponse(BaseModel):
|
||||
"""PSA ticket details returned when linking."""
|
||||
id: str
|
||||
summary: str
|
||||
company_name: Optional[str] = None
|
||||
board_name: Optional[str] = None
|
||||
status_name: Optional[str] = None
|
||||
priority_name: Optional[str] = None
|
||||
|
||||
|
||||
class TicketLinkResponse(BaseModel):
|
||||
"""Response after linking/unlinking a ticket."""
|
||||
session_id: str
|
||||
psa_ticket_id: Optional[str] = None
|
||||
ticket: Optional[PSATicketResponse] = None
|
||||
|
||||
Reference in New Issue
Block a user