This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
"""store all SSO tenant memberships on support tickets"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from alembic import op
|
||||
from sqlalchemy import inspect
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
revision = "0017_ticket_requester_tenant_ids"
|
||||
down_revision = "0016_feedback_status_stages"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
bind = op.get_bind()
|
||||
columns = {
|
||||
column["name"]
|
||||
for column in inspect(bind).get_columns("support_tickets")
|
||||
}
|
||||
if "requester_tenant_ids" not in columns:
|
||||
op.add_column(
|
||||
"support_tickets",
|
||||
sa.Column("requester_tenant_ids", sa.JSON(), nullable=True),
|
||||
)
|
||||
op.execute(
|
||||
"""
|
||||
UPDATE support_tickets
|
||||
SET requester_tenant_ids = JSON_ARRAY(requester_tenant_id)
|
||||
WHERE requester_tenant_ids IS NULL
|
||||
"""
|
||||
)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
bind = op.get_bind()
|
||||
columns = {
|
||||
column["name"]
|
||||
for column in inspect(bind).get_columns("support_tickets")
|
||||
}
|
||||
if "requester_tenant_ids" in columns:
|
||||
op.drop_column("support_tickets", "requester_tenant_ids")
|
||||
@@ -209,6 +209,7 @@ def get_my_access(
|
||||
return {
|
||||
"user_id": principal.user_id,
|
||||
"tenant_id": principal.tenant_id,
|
||||
"tenant_ids": principal.tenant_ids,
|
||||
"email": principal.email,
|
||||
"name": principal.name,
|
||||
"department": principal.department,
|
||||
|
||||
@@ -276,6 +276,7 @@ async def create_ticket(
|
||||
# because empty values fail min_length validation first.
|
||||
requester_id=principal.user_id,
|
||||
requester_tenant_id=principal.tenant_id,
|
||||
requester_tenant_ids=principal.tenant_ids,
|
||||
requester_contact=str(form.get("requester_contact") or ""),
|
||||
title=str(form.get("title") or ""),
|
||||
description=str(form.get("description") or ""),
|
||||
@@ -288,6 +289,7 @@ async def create_ticket(
|
||||
request_payload = request_payload.model_copy(update={
|
||||
"requester_id": principal.user_id,
|
||||
"requester_tenant_id": principal.tenant_id,
|
||||
"requester_tenant_ids": principal.tenant_ids,
|
||||
"requester_email": principal.email,
|
||||
"requester_name": principal.name,
|
||||
"requester_department": principal.department,
|
||||
@@ -300,6 +302,7 @@ async def create_ticket(
|
||||
"workspace_code": workspace_code,
|
||||
"requester_id": principal.user_id,
|
||||
"requester_tenant_id": principal.tenant_id,
|
||||
"requester_tenant_ids": principal.tenant_ids,
|
||||
"requester_email": principal.email,
|
||||
"requester_name": principal.name,
|
||||
"requester_department": principal.department,
|
||||
|
||||
@@ -144,6 +144,7 @@ class SupportTicket(Base):
|
||||
workspace_id: Mapped[int] = mapped_column(ForeignKey("workspaces.id"))
|
||||
requester_id: Mapped[str] = mapped_column(String(100))
|
||||
requester_tenant_id: Mapped[str] = mapped_column(String(100))
|
||||
requester_tenant_ids: Mapped[list[str] | None] = mapped_column(JSON, nullable=True)
|
||||
requester_contact: Mapped[str | None] = mapped_column(String(100), nullable=True)
|
||||
requester_email: Mapped[str | None] = mapped_column(String(320), nullable=True)
|
||||
requester_name: Mapped[str | None] = mapped_column(String(100), nullable=True)
|
||||
@@ -323,4 +324,4 @@ class Attachment(Base):
|
||||
|
||||
ticket: Mapped[SupportTicket] = relationship(back_populates="attachments")
|
||||
comment: Mapped[TicketComment | None] = relationship(back_populates="attachments")
|
||||
workspace: Mapped[Workspace] = relationship(back_populates="attachments")
|
||||
workspace: Mapped[Workspace] = relationship(back_populates="attachments")
|
||||
|
||||
@@ -7,6 +7,7 @@ class TicketCreateRequest(BaseModel):
|
||||
workspace_code: str = Field(default="", max_length=50)
|
||||
requester_id: str = Field(..., min_length=1, max_length=100)
|
||||
requester_tenant_id: str = Field(..., min_length=1, max_length=100)
|
||||
requester_tenant_ids: list[str] = Field(default_factory=list)
|
||||
requester_contact: str | None = Field(default=None, max_length=100)
|
||||
requester_email: str | None = Field(default=None, max_length=320)
|
||||
requester_name: str | None = Field(default=None, max_length=100)
|
||||
@@ -187,6 +188,7 @@ class SupportTicketRecord(BaseModel):
|
||||
description: str
|
||||
requester_id: str
|
||||
requester_tenant_id: str
|
||||
requester_tenant_ids: list[str] = Field(default_factory=list)
|
||||
requester_contact: str
|
||||
requester_email: str | None
|
||||
requester_name: str | None
|
||||
|
||||
@@ -169,6 +169,7 @@ class TicketService:
|
||||
workspace_id=workspace.id,
|
||||
requester_id=payload.requester_id,
|
||||
requester_tenant_id=payload.requester_tenant_id,
|
||||
requester_tenant_ids=payload.requester_tenant_ids or [payload.requester_tenant_id],
|
||||
requester_contact=payload.requester_contact or "",
|
||||
requester_email=payload.requester_email,
|
||||
requester_name=payload.requester_name,
|
||||
@@ -1301,6 +1302,7 @@ class TicketService:
|
||||
description=ticket.description,
|
||||
requester_id=ticket.requester_id,
|
||||
requester_tenant_id=ticket.requester_tenant_id,
|
||||
requester_tenant_ids=ticket.requester_tenant_ids or [ticket.requester_tenant_id],
|
||||
requester_contact=ticket.requester_contact or "",
|
||||
requester_email=requester_email,
|
||||
requester_name=requester_name,
|
||||
|
||||
Reference in New Issue
Block a user