coming together
This commit is contained in:
@@ -9,8 +9,9 @@ from datetime import datetime
|
||||
import secrets
|
||||
|
||||
from app.database.base import get_db
|
||||
from app.models import User, SupportTicket, TicketResponse, TicketStatus, TicketPriority, TicketCategory
|
||||
from app.models import User, SupportTicket, TicketResponse as TicketResponseModel, TicketStatus, TicketPriority, TicketCategory
|
||||
from app.auth.security import get_current_user, get_admin_user
|
||||
from app.services.audit import audit_service
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@@ -46,7 +47,7 @@ class ResponseCreate(BaseModel):
|
||||
is_internal: bool = False
|
||||
|
||||
|
||||
class TicketResponse(BaseModel):
|
||||
class TicketResponseOut(BaseModel):
|
||||
"""Ticket response model"""
|
||||
id: int
|
||||
ticket_id: int
|
||||
@@ -80,7 +81,7 @@ class TicketDetail(BaseModel):
|
||||
assigned_to: Optional[int]
|
||||
assigned_admin_name: Optional[str]
|
||||
submitter_name: Optional[str]
|
||||
responses: List[TicketResponse] = []
|
||||
responses: List[TicketResponseOut] = []
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
@@ -135,6 +136,20 @@ async def create_support_ticket(
|
||||
db.commit()
|
||||
db.refresh(new_ticket)
|
||||
|
||||
# Audit logging (non-blocking)
|
||||
try:
|
||||
audit_service.log_action(
|
||||
db=db,
|
||||
action="CREATE",
|
||||
resource_type="SUPPORT_TICKET",
|
||||
user=current_user,
|
||||
resource_id=str(new_ticket.id),
|
||||
details={"ticket_number": new_ticket.ticket_number},
|
||||
request=request,
|
||||
)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return {
|
||||
"message": "Support ticket created successfully",
|
||||
"ticket_number": new_ticket.ticket_number,
|
||||
@@ -225,7 +240,7 @@ async def get_ticket(
|
||||
ticket = db.query(SupportTicket).options(
|
||||
joinedload(SupportTicket.submitter),
|
||||
joinedload(SupportTicket.assigned_admin),
|
||||
joinedload(SupportTicket.responses).joinedload(TicketResponse.author)
|
||||
joinedload(SupportTicket.responses).joinedload(TicketResponseModel.author)
|
||||
).filter(SupportTicket.id == ticket_id).first()
|
||||
|
||||
if not ticket:
|
||||
@@ -303,8 +318,19 @@ async def update_ticket(
|
||||
ticket.updated_at = datetime.utcnow()
|
||||
db.commit()
|
||||
|
||||
# Log the update (audit logging can be added later)
|
||||
# TODO: Add audit logging for ticket updates
|
||||
# Audit logging (non-blocking)
|
||||
try:
|
||||
audit_service.log_action(
|
||||
db=db,
|
||||
action="UPDATE",
|
||||
resource_type="SUPPORT_TICKET",
|
||||
user=current_user,
|
||||
resource_id=str(ticket_id),
|
||||
details={"changes": changes} if changes else None,
|
||||
request=request,
|
||||
)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return {"message": "Ticket updated successfully"}
|
||||
|
||||
@@ -327,7 +353,7 @@ async def add_response(
|
||||
)
|
||||
|
||||
# Create response
|
||||
response = TicketResponse(
|
||||
response = TicketResponseModel(
|
||||
ticket_id=ticket_id,
|
||||
message=response_data.message,
|
||||
is_internal=response_data.is_internal,
|
||||
@@ -343,8 +369,19 @@ async def add_response(
|
||||
db.commit()
|
||||
db.refresh(response)
|
||||
|
||||
# Log the response (audit logging can be added later)
|
||||
# TODO: Add audit logging for ticket responses
|
||||
# Audit logging (non-blocking)
|
||||
try:
|
||||
audit_service.log_action(
|
||||
db=db,
|
||||
action="ADD_RESPONSE",
|
||||
resource_type="SUPPORT_TICKET",
|
||||
user=current_user,
|
||||
resource_id=str(ticket_id),
|
||||
details={"response_id": response.id, "is_internal": response_data.is_internal},
|
||||
request=request,
|
||||
)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
return {"message": "Response added successfully", "response_id": response.id}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user