
    Ui                         d Z ddlmZ ddlmZmZ ddlmZmZmZm	Z	m
Z
mZmZmZmZmZ ddlmZmZmZ ddlmZ ddlmZmZ  G d d	ee      Z G d
 de      Z G d de      Z G d de      Z G d de      Zy)u  
會議資料表 Model(階段 4)。

整合進對話流程:會議錄音 → Whisper → Claude 摘要 → 在團隊頻道發訊息。
不另設「會議室分頁」,符合「所有對話一個地方」的設計。

5 張相關表:
  - meetings              ─ 會議基本資料 + 處理狀態
  - meeting_transcripts   ─ 逐字稿(分段,含時間戳)
  - meeting_summaries     ─ 摘要(每場 1 筆)
  - meeting_decisions     ─ 重要決策(可有多筆)
  - meeting_action_items  ─ 待辦事項(可一鍵轉成 task)
    )datetime)UUIDuuid4)
JSON
BigIntegerDateTimeFloat
ForeignKeyIntegerStringTextUuidfunc)Mappedmapped_columnrelationship)Base)TimestampMixinUserc                   .   e Zd ZU dZdZ e ed      de      Ze	e
   ed<    e ed      dd	
      Ze	e   ed<    e ed      ddd      Ze	e   ed<    eed      Ze	edz     ed<    e ed      d      Ze	edz     ed<    eed      Ze	edz     ed<    eed      Ze	edz     ed<    e ed      d      Ze	edz     ed<    e ed      d      Ze	e
dz     ed<    e ed      d      Ze	e
dz     ed<    e ed       edd      dd      Ze	e
   ed<    eegd !      Ze	e    ed"<    ed#d$d%&      Z!e	e"d'      ed(<    ed#d$dd )      Z#e	d*   ed+<    ed#d$d%&      Z$e	e"d,      ed-<    ed#d$d%&      Z%e	e"d.      ed/<   d0efd1Z&y)2Meetingu	   會議。meetingsTas_uuidprimary_keydefaultidi,  Fu   未命名會議nullabler   title   uploaded)r    r   indexstatusr    Nerror_messagei  
audio_pathaudio_size_bytesaudio_duration_secondsd   audio_mime_typesource_message_idsummary_message_idusers.idRESTRICTondeleter    r$   
created_byjoined)foreign_keyslazycreatormeetingzall, delete-orphanselectin)back_populatescascader7   MeetingTranscripttranscripts)r;   r<   uselistr7   zMeetingSummary | NonesummaryMeetingDecision	decisionsMeetingActionItemaction_itemsreturnc                 <    d| j                   d| j                   dS )Nz	<Meeting z status=>)r!   r%   )selfs    6/volume1/homes/robertsu/coba/app/app/models/meeting.py__repr__zMeeting.__repr__J   s    4::.Q??    )'__name__
__module____qualname____doc____tablename__r   r   r   r   r   r   __annotations__r   r!   strr%   r   r'   r(   r   r)   intr	   r*   floatr,   r-   r.   r
   r4   r   r8   r   r>   listr@   rB   rD   rJ    rK   rI   r   r      s+   M$T$%7TSXYBtY&vc{UL]^E6#;^ (r
UJ^bcFF3Kc(5dT(JM6#*%J &36$<$%OJsTz"O+8d+SfS4Z(S3@QU3VF54<0V*7sd*SOVC$J'S .;TT.vdTk*  /<TT/td{+   -T:
3	 Jt  )zlRGVD\R5A *>Z6K012  0< *>T\0GV+,  2> *>Z2Ivd,-.  7C *>Z7L&123 @# @rK   r   c                   <   e Zd ZU dZdZ e ed      de      Ze	e
   ed<    e ed       edd	      d
d      Ze	e
   ed<    e ed      d
d      Ze	e   ed<    e ed       edd	      d      Ze	e
dz     ed<    eed
      Ze	e   ed<    eed
      Ze	e   ed<    eed
      Ze	e   ed<    eed      Ze	edz     ed<    eed
d      Ze	e   ed<    e ed       ej<                         d
      Ze	e    ed<    e!d       Z"e	e#   ed!<   y)"r=   u=   逐字稿:一段一段存(speaker / 起始時間 / 內容)。meeting_transcriptsTr   r   r   meetings.idCASCADEr1   Fr3   
meeting_id2   	speaker_0r   speaker_labelr/   SET NULLr&   Nspeaker_user_id
start_timeend_timecontent
confidencer   order_indextimezoneserver_defaultr    
created_atr>   r;   r9   )$rL   rM   rN   rO   rP   r   r   r   r   r   r   rQ   r
   r[   r   r^   rR   r`   r	   ra   rT   rb   r   rc   rd   r   re   rS   r   r   nowrj   r   r   r9   r   rV   rK   rI   r=   r=   N   sR   G)M$T$%7TSXYBtY,T=95	 Jt  "/vbzES^!_M6#;_+8T:
3,OVD4K( 
 !.ee DJuD+EEBHfUmB(>GVC[>'4UT'JJut|$J,WuaPKP#0$
U$Jx    ,=IGVG_IrK   r=   c                      e Zd ZU dZdZ e ed      de      Ze	e
   ed<    e ed       edd	      d
d      Ze	e
   ed<    eed
      Ze	e   ed<    eed      Ze	ee   dz     ed<    e ed      d
d      Ze	e   ed<    eed      Ze	edz     ed<    eed      Ze	edz     ed<    e ed       ej8                         d
      Ze	e   ed<    ed      Z e	e!   ed<   y)MeetingSummaryu   會議摘要(每場 1 筆)。meeting_summariesTr   r   r   rY   rZ   r1   F)r    uniquer[   r&   executive_summaryN
key_topicsr\   zclaude-sonnetr   generated_byinput_tokensoutput_tokensrf   rh   rj   r@   rk   r9   )"rL   rM   rN   rO   rP   r   r   r   r   r   r   rQ   r
   r[   r   rq   rR   r   rr   rU   r   rs   r   rt   rS   ru   r   r   rl   rj   r   r   r9   r   rV   rK   rI   rn   rn   n   s   ''M$T$%7TSXYBtY,T=95	 Jt  &34%%Hvc{H+8+MJtCy4'(M -fRj5Ra bL&+b'4Wt'LL&t$L(5g(MM6#*%M#0$
U$Jx    ,9EGVG_ErK   rn   c                   x   e Zd ZU dZdZ e ed      de      Ze	e
   ed<    e ed       edd	      d
d      Ze	e
   ed<    eed
      Ze	e   ed<    eed      Ze	edz     ed<    eed
d      Ze	e   ed<    e ed       ej.                         d
      Ze	e   ed<    ed      Ze	e   ed<   y)rA   u   會議裡的重要決策。meeting_decisionsTr   r   r   rY   rZ   r1   Fr3   r[   r&   decisionNcontextr   r   re   rf   rh   rj   rB   rk   r9   )rL   rM   rN   rO   rP   r   r   r   r   r   r   rQ   r
   r[   r   rx   rR   ry   r   re   rS   r   r   rl   rj   r   r   r9   r   rV   rK   rI   rA   rA      s    %'M$T$%7TSXYBtY,T=95	 Jt  *$?HfSk?"/t"DGVC$JD,WuaPKP#0$
U$Jx    ,;GGVG_GrK   rA   c                      e Zd ZU dZdZ e ed      de      Ze	e
   ed<    e ed       edd	      d
d      Ze	e
   ed<    eed
      Ze	e   ed<    e ed       edd	      d      Ze	e
dz     ed<    e ed      d      Ze	edz     ed<    e ed       edd	      d      Ze	e
dz     ed<    eed
d      Ze	e   ed<    e ed       ej4                         d
      Ze	e   ed<    ed      Ze	e   ed<   y) rC   u9   會議自動抽出的待辦,可一鍵轉成正式 task。meeting_action_itemsTr   r   r   rY   rZ   r1   Fr3   r[   r&   descriptionr/   r_   Nsuggested_assignee_idr"   suggested_due_dateztasks.idconverted_task_idr   r   re   rf   rh   rj   rD   rk   r9   ) rL   rM   rN   rO   rP   r   r   r   r   r   r   rQ   r
   r[   r   r|   rR   r}   r   r~   r   r   re   rS   r   r   rl   rj   r   r   r9   r   rV   rK   rI   rC   rC      sE   C*M$T$%7TSXYBtY,T=95	 Jt   -TEBKB1>T:
326$+. 
 .;6":PT-UsTz*U-:T:
3.vdTk* 
  -WuaPKP#0$
U$Jx    ,>JGVG_JrK   rC   N)rO   r   uuidr   r   
sqlalchemyr   r   r   r	   r
   r   r   r   r   r   sqlalchemy.ormr   r   r   app.databaser   app.models.userr   r   r   r=   rn   rA   rC   rV   rK   rI   <module>r      sq      g g g > >  02@dN 2@jJ J@FT F:Hd H,K KrK   