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) query = select(Ticket).where(Ticket.id == ticket_uuid)
if current_user.role != UserRole.ADMIN: if current_user.role != UserRole.ADMIN:
query = query.where(Ticket.tenant_id == current_user.tenant_id) 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.where(Ticket.created_by == current_user.id)
query = query.options( query = query.options(
@@ -179,7 +179,7 @@ async def update_ticket(
query = select(Ticket).where(Ticket.id == ticket_uuid) query = select(Ticket).where(Ticket.id == ticket_uuid)
if current_user.role != UserRole.ADMIN: if current_user.role != UserRole.ADMIN:
query = query.where(Ticket.tenant_id == current_user.tenant_id) 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.where(Ticket.created_by == current_user.id)
result = await db.execute(query) result = await db.execute(query)
@@ -277,7 +277,7 @@ async def get_ticket_comments(
query = select(Ticket).where(Ticket.id == ticket_uuid) query = select(Ticket).where(Ticket.id == ticket_uuid)
if current_user.role != UserRole.ADMIN: if current_user.role != UserRole.ADMIN:
query = query.where(Ticket.tenant_id == current_user.tenant_id) 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.where(Ticket.created_by == current_user.id)
result = await db.execute(query) result = await db.execute(query)
@@ -311,8 +311,10 @@ async def create_comment(
): ):
"""Crear un comentario en un ticket""" """Crear un comentario en un ticket"""
ticket_uuid = validate_uuid_param(ticket_id, "ticket ID") ticket_uuid = validate_uuid_param(ticket_id, "ticket ID")
query = 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.is_client: 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) query = query.where(Ticket.created_by == current_user.id)
result = await db.execute(query) result = await db.execute(query)
@@ -320,7 +322,6 @@ async def create_comment(
if not ticket_obj: if not ticket_obj:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Ticket {ticket_id} not found") 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: if comment.is_internal and current_user.role.is_client:
raise HTTPException( raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN, status_code=status.HTTP_403_FORBIDDEN,
@@ -407,7 +408,7 @@ async def get_ticket_attachments(
if not ticket: if not ticket:
raise HTTPException(status_code=404, detail="Ticket no encontrado") 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") raise HTTPException(status_code=404, detail="Ticket no encontrado")
result = await db.execute( result = await db.execute(
@@ -450,10 +451,9 @@ async def upload_attachment(
if not ticket: if not ticket:
raise HTTPException(status_code=404, detail="Ticket no encontrado") 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") 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 upload_tenant_id = ticket.tenant_id
file_metadata = await file_handler.save_upload(file, upload_tenant_id, ticket_uuid) file_metadata = await file_handler.save_upload(file, upload_tenant_id, ticket_uuid)
@@ -506,7 +506,7 @@ async def download_attachment(
if not ticket: if not ticket:
raise HTTPException(status_code=404, detail="Ticket no encontrado") 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") raise HTTPException(status_code=404, detail="Ticket no encontrado")
result = await db.execute( result = await db.execute(
@@ -534,6 +534,7 @@ async def download_attachment(
media_type=attachment.mime_type media_type=attachment.mime_type
) )
@router.get("/{ticket_id}/issues", response_model=List[IssueResponse]) @router.get("/{ticket_id}/issues", response_model=List[IssueResponse])
async def get_ticket_issues( async def get_ticket_issues(
ticket_id: str, ticket_id: str,
@@ -546,7 +547,7 @@ async def get_ticket_issues(
query = select(Ticket).where(Ticket.id == ticket_uuid) query = select(Ticket).where(Ticket.id == ticket_uuid)
if current_user.role != UserRole.ADMIN: if current_user.role != UserRole.ADMIN:
query = query.where(Ticket.tenant_id == current_user.tenant_id) 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.where(Ticket.created_by == current_user.id)
result = await db.execute(query) result = await db.execute(query)
@@ -596,12 +597,10 @@ async def create_ticket_issue(
"""Crear un asunto de escalación en un ticket.""" """Crear un asunto de escalación en un ticket."""
ticket_uuid = validate_uuid_param(ticket_id, "ticket ID") ticket_uuid = validate_uuid_param(ticket_id, "ticket ID")
result = await db.execute( query = select(Ticket).where(Ticket.id == ticket_uuid)
select(Ticket).where( if current_user.role != UserRole.ADMIN:
Ticket.id == ticket_uuid, query = query.where(Ticket.tenant_id == current_user.tenant_id)
Ticket.tenant_id == current_user.tenant_id, result = await db.execute(query)
)
)
ticket_obj = result.scalars().first() ticket_obj = result.scalars().first()
if not ticket_obj: if not ticket_obj:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Ticket no encontrado") raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Ticket no encontrado")