File size: 3,717 Bytes
1cff1e5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
03faf26
 
 
1cff1e5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
03faf26
 
 
1cff1e5
 
 
 
 
 
03faf26
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1cff1e5
 
 
 
 
 
15145f6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1cff1e5
 
 
 
 
15145f6
 
3d40e5f
15145f6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3d40e5f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
from pydantic import BaseModel
from typing import Optional, List


class JobRoleCreate(BaseModel):
    title: str
    description: str
    department: Optional[str] = None


class JobRoleUpdate(BaseModel):
    title: Optional[str] = None
    description: Optional[str] = None
    department: Optional[str] = None


class JobRoleResponse(BaseModel):
    id: str
    title: str
    description: str
    department: Optional[str] = None
    created_at: str


class QuestionCreate(BaseModel):
    role_id: Optional[str] = None
    topic_id: Optional[str] = None
    interview_type: str = "resume"
    question: str
    difficulty: str = "medium"
    category: Optional[str] = None
    expected_answer: Optional[str] = None


class QuestionUpdate(BaseModel):
    question: Optional[str] = None
    difficulty: Optional[str] = None
    category: Optional[str] = None
    expected_answer: Optional[str] = None


class QuestionResponse(BaseModel):
    id: str
    role_id: Optional[str] = None
    topic_id: Optional[str] = None
    interview_type: str = "resume"
    question: str
    difficulty: str
    category: Optional[str] = None
    created_at: str


class TopicCreate(BaseModel):
    name: str
    description: Optional[str] = None


class TopicUpdate(BaseModel):
    name: Optional[str] = None
    description: Optional[str] = None


class TopicPublishUpdate(BaseModel):
    is_published: bool
    timer_enabled: Optional[bool] = None
    timer_seconds: Optional[int] = None


class TopicResponse(BaseModel):
    id: str
    name: str
    description: Optional[str] = None
    created_at: str


class RoleRequirementCreate(BaseModel):
    role_id: str
    skill: str
    level: str = "intermediate"


class GroupTestCreate(BaseModel):
    name: str
    description: Optional[str] = None
    topic_ids: List[str]
    time_limit_minutes: Optional[int] = None
    max_attempts: int = 1


class GroupTestUpdate(BaseModel):
    name: Optional[str] = None
    description: Optional[str] = None
    topic_ids: Optional[List[str]] = None
    time_limit_minutes: Optional[int] = None
    max_attempts: Optional[int] = None


class GroupTestPublishUpdate(BaseModel):
    is_published: bool


class LinkTopicSessionRequest(BaseModel):
    topic_id: str
    session_id: str


class RoleRequirementResponse(BaseModel):
    id: str
    role_id: str
    skill: str
    level: str


# ── Chatbot (legacy) ──────────────────────────────────────────────────────────

class ChatbotQueryRequest(BaseModel):
    query: str
    jd_id: Optional[str] = None


class ChatbotExportRequest(BaseModel):
    rows: List[dict]
    topic_columns: List[dict]
    group_test_name: str


class ChatbotStudentUpdate(BaseModel):
    user_id: str
    reg_no: Optional[str] = None
    name: Optional[str] = None


# ── Structured Student Filter ─────────────────────────────────────────────────

class StudentFilterRequest(BaseModel):
    group_test_ids: Optional[List[str]] = None   # None = all tests
    jd_id: Optional[str] = None
    start_date: Optional[str] = None             # "YYYY-MM-DD"
    end_date: Optional[str] = None               # "YYYY-MM-DD"
    top_k: Optional[int] = None
    min_score: Optional[float] = None
    sort_fields: List[str] = ["time"]            # ordered priority: "time"|"score"|"duration"
    sort_orders: List[str] = ["desc"]            # matching orders: "asc"|"desc"


class StudentFilterExportRequest(BaseModel):
    rows: List[dict]
    topic_columns: List[dict]
    group_test_name: str