48 lines
1.4 KiB
Python
Executable File
48 lines
1.4 KiB
Python
Executable File
from pydantic import BaseModel, Field
|
|
from typing import Optional
|
|
from datetime import datetime
|
|
from models.ticket import TicketType, TicketStatus, TicketPriority
|
|
|
|
class TicketBase(BaseModel):
|
|
title: str = Field(..., min_length=1, max_length=200)
|
|
description: str = Field(..., min_length=1)
|
|
ticket_type: TicketType = Field(default=TicketType.OTHER)
|
|
priority: TicketPriority = Field(default=TicketPriority.MEDIUM)
|
|
|
|
class TicketCreate(TicketBase):
|
|
pass
|
|
|
|
class TicketUpdate(BaseModel):
|
|
title: Optional[str] = Field(None, min_length=1, max_length=200)
|
|
description: Optional[str] = Field(None, min_length=1)
|
|
ticket_type: Optional[TicketType] = None
|
|
status: Optional[TicketStatus] = None
|
|
priority: Optional[TicketPriority] = None
|
|
assigned_to: Optional[int] = None
|
|
admin_notes: Optional[str] = None
|
|
|
|
class TicketResponse(TicketBase):
|
|
id: int
|
|
status: TicketStatus
|
|
user_id: int
|
|
assigned_to: Optional[int]
|
|
screenshot_path: Optional[str]
|
|
admin_notes: Optional[str]
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
resolved_at: Optional[datetime]
|
|
|
|
# User information
|
|
user_name: str
|
|
user_email: str
|
|
assigned_admin_name: Optional[str] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
class TicketAdminUpdate(BaseModel):
|
|
status: Optional[TicketStatus] = None
|
|
priority: Optional[TicketPriority] = None
|
|
assigned_to: Optional[int] = None
|
|
admin_notes: Optional[str] = None
|