75 lines
1.7 KiB
Python
75 lines
1.7 KiB
Python
|
||
from pydantic import BaseModel, EmailStr
|
||
from typing import Optional, Union, List
|
||
import datetime
|
||
|
||
class LoginRequest(BaseModel):
|
||
username: str
|
||
password: str
|
||
|
||
class LoginResponse(BaseModel):
|
||
user_id: int
|
||
username: str
|
||
caption: str
|
||
email: EmailStr
|
||
token: str
|
||
|
||
class UserInfo(BaseModel):
|
||
user_id: int
|
||
username: str
|
||
caption: str
|
||
email: EmailStr
|
||
created_at: datetime.datetime
|
||
meetings_created: int
|
||
meetings_attended: int
|
||
|
||
class AttendeeInfo(BaseModel):
|
||
user_id: int
|
||
caption: str
|
||
|
||
class Meeting(BaseModel):
|
||
meeting_id: int
|
||
title: str
|
||
meeting_time: Optional[datetime.datetime]
|
||
summary: Optional[str]
|
||
created_at: datetime.datetime
|
||
attendees: Union[List[str], List[AttendeeInfo]] # Support both formats
|
||
creator_id: int
|
||
creator_username: str
|
||
audio_file_path: Optional[str] = None
|
||
|
||
class TranscriptSegment(BaseModel):
|
||
segment_id: int
|
||
meeting_id: int
|
||
speaker_id: Optional[int] = None # AI解析的原始结果
|
||
speaker_tag: str
|
||
start_time_ms: int
|
||
end_time_ms: int
|
||
text_content: str
|
||
|
||
class CreateMeetingRequest(BaseModel):
|
||
user_id: int
|
||
title: str
|
||
meeting_time: Optional[datetime.datetime]
|
||
attendee_ids: list[int]
|
||
|
||
class UpdateMeetingRequest(BaseModel):
|
||
title: str
|
||
meeting_time: Optional[datetime.datetime]
|
||
summary: Optional[str]
|
||
attendee_ids: list[int]
|
||
|
||
class SpeakerTagUpdateRequest(BaseModel):
|
||
speaker_id: int # 使用原始speaker_id(整数)
|
||
new_tag: str
|
||
|
||
class BatchSpeakerTagUpdateRequest(BaseModel):
|
||
updates: List[SpeakerTagUpdateRequest]
|
||
|
||
class TranscriptUpdateRequest(BaseModel):
|
||
segment_id: int
|
||
text_content: str
|
||
|
||
class BatchTranscriptUpdateRequest(BaseModel):
|
||
updates: List[TranscriptUpdateRequest]
|