fix: Client_Admin crea asunto

This commit is contained in:
2026-03-19 09:14:56 -06:00
parent 6687802f19
commit 7c278bcaf0

View File

@@ -151,7 +151,7 @@ async def get_ticket(
query = select(Ticket).where(Ticket.id == ticket_uuid)
if current_user.role != UserRole.ADMIN:
query = query.where(Ticket.tenant_id == current_user.tenant_id)
if current_user.role.is_client:
if current_user.role == UserRole.CLIENT_USER:
query = query.where(Ticket.created_by == current_user.id)
query = query.options(
@@ -179,7 +179,7 @@ async def update_ticket(
query = select(Ticket).where(Ticket.id == ticket_uuid)
if current_user.role != UserRole.ADMIN:
query = query.where(Ticket.tenant_id == current_user.tenant_id)
if current_user.role.is_client:
if current_user.role == UserRole.CLIENT_USER:
query = query.where(Ticket.created_by == current_user.id)
result = await db.execute(query)
@@ -277,7 +277,7 @@ async def get_ticket_comments(
query = select(Ticket).where(Ticket.id == ticket_uuid)
if current_user.role != UserRole.ADMIN:
query = query.where(Ticket.tenant_id == current_user.tenant_id)
if current_user.role.is_client:
if current_user.role == UserRole.CLIENT_USER:
query = query.where(Ticket.created_by == current_user.id)
result = await db.execute(query)
@@ -311,8 +311,10 @@ async def create_comment(
):
"""Crear un comentario en un ticket"""
ticket_uuid = validate_uuid_param(ticket_id, "ticket ID")
query = select(Ticket).where(Ticket.id == ticket_uuid, Ticket.tenant_id == current_user.tenant_id)
if current_user.role.is_client:
query = select(Ticket).where(Ticket.id == ticket_uuid)
if current_user.role != UserRole.ADMIN:
query = query.where(Ticket.tenant_id == current_user.tenant_id)
if current_user.role == UserRole.CLIENT_USER:
query = query.where(Ticket.created_by == current_user.id)
result = await db.execute(query)
@@ -320,7 +322,6 @@ async def create_comment(
if not ticket_obj:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Ticket {ticket_id} not found")
# Fix is_internal — clientes no pueden crear comentarios internos
if comment.is_internal and current_user.role.is_client:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
@@ -407,7 +408,7 @@ async def get_ticket_attachments(
if not ticket:
raise HTTPException(status_code=404, detail="Ticket no encontrado")
if current_user.role.is_client and ticket.created_by != current_user.id:
if current_user.role == UserRole.CLIENT_USER and ticket.created_by != current_user.id:
raise HTTPException(status_code=404, detail="Ticket no encontrado")
result = await db.execute(
@@ -450,10 +451,9 @@ async def upload_attachment(
if not ticket:
raise HTTPException(status_code=404, detail="Ticket no encontrado")
if current_user.role.is_client and ticket.created_by != current_user.id:
if current_user.role == UserRole.CLIENT_USER and ticket.created_by != current_user.id:
raise HTTPException(status_code=404, detail="Ticket no encontrado")
# Para el file_handler usamos el tenant real del ticket
upload_tenant_id = ticket.tenant_id
file_metadata = await file_handler.save_upload(file, upload_tenant_id, ticket_uuid)
@@ -506,7 +506,7 @@ async def download_attachment(
if not ticket:
raise HTTPException(status_code=404, detail="Ticket no encontrado")
if current_user.role.is_client and ticket.created_by != current_user.id:
if current_user.role == UserRole.CLIENT_USER and ticket.created_by != current_user.id:
raise HTTPException(status_code=404, detail="Ticket no encontrado")
result = await db.execute(
@@ -534,6 +534,7 @@ async def download_attachment(
media_type=attachment.mime_type
)
@router.get("/{ticket_id}/issues", response_model=List[IssueResponse])
async def get_ticket_issues(
ticket_id: str,
@@ -546,7 +547,7 @@ async def get_ticket_issues(
query = select(Ticket).where(Ticket.id == ticket_uuid)
if current_user.role != UserRole.ADMIN:
query = query.where(Ticket.tenant_id == current_user.tenant_id)
if current_user.role.is_client:
if current_user.role == UserRole.CLIENT_USER:
query = query.where(Ticket.created_by == current_user.id)
result = await db.execute(query)
@@ -575,7 +576,7 @@ async def get_ticket_issues(
tagged_users=[
{"id": u.id, "full_name": f"{u.first_name} {u.last_name}", "email": u.email}
for u in issue.tagged_users
],
],
attachment_filename=issue.attachment_filename,
attachment_mime_type=issue.attachment_mime_type,
created_at=issue.created_at, updated_at=issue.updated_at,
@@ -596,12 +597,10 @@ async def create_ticket_issue(
"""Crear un asunto de escalación en un ticket."""
ticket_uuid = validate_uuid_param(ticket_id, "ticket ID")
result = await db.execute(
select(Ticket).where(
Ticket.id == ticket_uuid,
Ticket.tenant_id == current_user.tenant_id,
)
)
query = select(Ticket).where(Ticket.id == ticket_uuid)
if current_user.role != UserRole.ADMIN:
query = query.where(Ticket.tenant_id == current_user.tenant_id)
result = await db.execute(query)
ticket_obj = result.scalars().first()
if not ticket_obj:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Ticket no encontrado")