coming together

This commit is contained in:
HotSwapp
2025-08-13 18:53:35 -05:00
parent acc5155bf7
commit 5111079149
51 changed files with 14457 additions and 588 deletions

View File

@@ -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}