
    i                         d Z ddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZ ddlmZ ddlmZ ddlmZmZ dd	lmZmZ dd
lmZ ddlmZmZ ddlmZ  ej@                  d      Z! e	ddg      Z" ee#      jI                         jJ                  jJ                  jJ                  dz  dz  Z&e&jO                  dd       dZ(dZ)e"jU                  deejV                  d       e
d       ed      fdededede,dz  fd       Z-e"j]                  d e/e   d!"      	 d/deded#e0fd$       Z1e"j]                  d%ed&"      d'ejd                  dedefd(       Z3e"jU                  d)d*+      d'ejd                  d,ejd                  deded-e4f
d.       Z5y)0uN  
會議 API(階段 4)。

  - POST /api/meetings/upload          ─ 上傳音訊 + 觸發背景處理
  - GET  /api/meetings                 ─ 列出最近會議
  - GET  /api/meetings/{id}            ─ 會議詳情(逐字稿 + 摘要 + 待辦)
  - POST /api/meetings/{id}/action-items/{aid}/convert  ─ action item 轉成 task
    N)date)Path)	APIRouterFileFormHTTPException
UploadFilestatus)select)selectinload)CurrentUser	DBSession)MeetingMeetingActionItem)Task)MeetingDetailMeetingPublic)trigger_meeting_processingzcoba.meetings.apiz/api/meetingsmeetings)prefixtagsuploadsT)parentsexist_ok)zaudio/zvideo/i  z/uploadu'   上傳會議音訊 + 觸發背景處理)response_modelstatus_codesummary.)defaultcurrent_userdbaudiotitlec                   K   j                   rAt        fdt        D              s)t        t        j
                  dj                    d      j                          d {   }t        |      t        kD  rt        t        j                  d      t        |      dk(  rt        dd      t        j                         j                  }t        j                  xs d	      j                  j!                         xs d
}t"        | | z  }|j%                  |       t'        |xs  j                  xs dj)                  |d	      dt+        |      t        |      j                   | j,                        }|j/                  |       |j1                          d {    |j3                  |       d {    t5        |j,                         |S 7 p7 77  w)Nc              3   T   K   | ]  }j                   j                  |       ! y wN)content_type
startswith).0pr!   s     4/volume1/homes/robertsu/coba/app/app/api/meetings.py	<genexpr>z!upload_meeting.<locals>.<genexpr>5   s%     %dPc1e&8&8&C&CA&FPcs   %(u   檔案類型不支援:u   (請上傳音訊檔)r   detailu   檔案太大(>200MB)r     u   檔案是空的 z.binu   未命名會議uploaded)r"   r
   
audio_pathaudio_size_bytesaudio_mime_type
created_by)r&   anyAUDIO_MIME_PREFIXESr   r
   HTTP_400_BAD_REQUESTreadlenMAX_AUDIO_SIZE!HTTP_413_REQUEST_ENTITY_TOO_LARGEuuiduuid4hexr   filenamesuffixlower
UPLOAD_DIRwrite_bytesr   replacestridaddcommitrefreshr   )	r   r    r!   r"   contentfile_idr@   
saved_pathmeetings	     `      r*   upload_meetingrN   (   s     #%dPc%d"d33+E,>,>+??ST
 	
 JJL G
7|n$@@)
 	
 7|q4EFF jjlG%..&B'..446@&F	&22J7# P;*;DDVRPz?W**??G FF7O
))+
**W
 wzz*N? !2 s7   A!G$G%D:GG G8G9GGGr/   u   列出最近會議)r   r   limitc                   K   t        t              j                  t        j                  j	                  d             j                  t        j                  j                               j                  t        |d            }t        |j                  |       d {   j                         j                               S 7 $w)N   )r   r   where
deleted_atis_order_by
created_atdescrO   minlistexecutescalarsall)r   r    rO   stmts       r*   list_meetingsr^   ^   s      	w	w!!%%d+	,	'$$))+	,	s5#		 	 rzz$''00266899's   BCC %Cz/{meeting_id}u   會議詳情
meeting_idc                   K   t        t              j                  t        t        j                        t        t        j
                        t        t        j                        t        t        j                              j                  t        j                  | k(  t        j                  j                  d             }|j                  |       d {   j                         }|t        dd      |j
                  j                  d        |j                  j                  d        |j                  j                  d        |S 7 zw)N  u   找不到此會議r,   c                     | j                   S r%   order_index)ts    r*   <lambda>zget_meeting.<locals>.<lambda>   s    1==    )keyc                     | j                   S r%   rc   )ds    r*   rf   zget_meeting.<locals>.<lambda>   s    rg   c                     | j                   S r%   rc   )as    r*   rf   zget_meeting.<locals>.<lambda>   s    AMMrg   )r   r   optionsr   r   transcripts	decisionsaction_itemsrR   rF   rS   rT   rZ   scalar_one_or_noner   sort)r_   r   r    r]   rM   s        r*   get_meetingrs   m   s      	w	),,-**+--.	

 
wzzZ'););)?)?)E	F 	 ZZ%%99;G4HII!8967"9:N &s   CEEA;Ez3/{meeting_id}/action-items/{action_item_id}/convertu!   把 action item 轉成正式 task)r   action_item_idreturnc           
        K   t        t              j                  t        j                  |k(  t        j                  | k(        }|j                  |       d{   j                         }|t        dd      |j                  rt        dd      d}|j                  r 	 t        j                  |j                        }t        |j                  dd d|j                  t        t        j                         j                  t        j                  | k(               d{   j#                          d	d
d||j                  |j$                        }|j'                  |       |j)                          d{    |j                  |_        |j+                          d{    t-        |j                        t-        |j                        ddS 7 z# t        $ r d}Y "w xY w7 7 p7 Iw)u5   一鍵把會議裡抽出的待辦事項變成 Task。Nra   u   找不到此 action itemr,   r.   u   此項已轉成任務i  u   來自會議「u   」自動產出todomedium)r"   descriptionr
   prioritydue_dater4   assignee_idu   已轉成任務)task_idrt   message)r   r   rR   rF   r_   rZ   rq   r   converted_task_idsuggested_due_date	date_typefromisoformat
ValueErrorr   ry   r   r"   
scalar_onesuggested_assignee_idrG   flushrH   rE   )r_   rt   r   r    r]   itemduetasks           r*   convert_action_item_to_taskr      s     #$**.$$
2D **T""668D|4NOO4KLL C	))$*A*ABC t$%RZZw}}8M8S8ST[T^T^blTl8m-n'n&z&z&|%}  ~M  N??..D FF4L
((*!WWD
))+tww<dgg,$ 7 #  	C	
 (o si   AG-GAG-"G AG- G'!AG-8G)9(G-!G+"1G-G$ G-#G$$G-)G-+G-)2   )6__doc__loggingr<   datetimer   r   pathlibr   fastapir   r   r   r   r	   r
   
sqlalchemyr   sqlalchemy.ormr   app.core.depsr   r   app.models.meetingr   r   app.models.taskr   app.schemas.meetingr   r   app.services.meeting_processorr   	getLoggerloggerrouter__file__resolveparentrB   mkdirr6   r:   postHTTP_201_CREATEDrE   rN   getrY   intr^   UUIDrs   dictr    rg   r*   <module>r      s     &  L L  ' 0 9   < E 
		.	/	/	= (^##%,,33::YFS
 
    - + "  ''5	   S	T*	--- - :	--` BtM2<PQ ::: : R: OM>R		 	 S2 9/  *		*II* * 		*
 
*	*rg   