From 7c278bcaf092a545596b5f9bc3f0c2a45ee0ed49 Mon Sep 17 00:00:00 2001 From: icamarillo Date: Thu, 19 Mar 2026 09:14:56 -0600 Subject: [PATCH] fix: Client_Admin crea asunto --- backend/app/api/v1/endpoints/tickets.py | 35 ++++++++++++------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/backend/app/api/v1/endpoints/tickets.py b/backend/app/api/v1/endpoints/tickets.py index 91dd982..ae2e522 100644 --- a/backend/app/api/v1/endpoints/tickets.py +++ b/backend/app/api/v1/endpoints/tickets.py @@ -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")