ai-hackaton-backend/app/models/interview.py
2025-09-03 14:36:27 +05:00

66 lines
1.8 KiB
Python

from sqlmodel import SQLModel, Field, Column
from sqlalchemy import Enum as SQLEnum, String
from datetime import datetime
from typing import Optional
from enum import Enum
class InterviewStatus(str, Enum):
CREATED = "created"
ACTIVE = "active"
COMPLETED = "completed"
FAILED = "failed"
def __str__(self):
return self.value
class InterviewSessionBase(SQLModel):
resume_id: int = Field(foreign_key="resume.id")
room_name: str = Field(max_length=255, unique=True)
status: str = Field(
default="created",
sa_column=Column(SQLEnum('created', 'active', 'completed', 'failed', name="interviewstatus"))
)
transcript: Optional[str] = None
ai_feedback: Optional[str] = None
# Добавляем отслеживание AI процесса
ai_agent_pid: Optional[int] = None
ai_agent_status: str = Field(default="not_started") # not_started, running, stopped, failed
class InterviewSession(InterviewSessionBase, table=True):
__tablename__ = "interview_sessions"
id: Optional[int] = Field(default=None, primary_key=True)
started_at: datetime = Field(default_factory=datetime.utcnow)
completed_at: Optional[datetime] = None
class InterviewSessionCreate(SQLModel):
resume_id: int
room_name: str
class InterviewSessionUpdate(SQLModel):
status: Optional[InterviewStatus] = None
completed_at: Optional[datetime] = None
transcript: Optional[str] = None
ai_feedback: Optional[str] = None
class InterviewSessionRead(InterviewSessionBase):
id: int
started_at: datetime
completed_at: Optional[datetime] = None
class InterviewValidationResponse(SQLModel):
can_interview: bool
message: str
class LiveKitTokenResponse(SQLModel):
token: str
room_name: str
server_url: str