
    >i                         d Z ddlmZ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 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e      Zy)u;  
任務中心相關資料表 Model(階段 2 切片 a)。

階段 2 第一個切片只先建兩張表:
  - projects ─ 專案(任務的容器,可選,沒指定就是 inbox)
  - tasks    ─ 任務本體

延後到階段 3 一併處理:
  - subtasks(子任務 / checklist)
  - task_assignments(指派 — 階段 2 暫時先把單一負責人塞在 tasks.assignee_id 簡化)
  - task_comments(留言)
  - task_activities(活動歷史)
  - task_attachments(附件)

設計理由:先把骨幹做出來能用,再慢慢加肉,避免一次堆太多功能反而沒一個能用。
    )datedatetime)UUIDuuid4)DateDateTime
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	      Ze	e   ed
<    eed	      Ze	edz     ed<    e ed      dd      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ddd      Ze	ed      ed<    eegd       Ze	e   ed!<   d"efd#Zy)$Projectu   專案 ─ 任務的容器。

    在 5-15 人小團隊裡,專案通常很少(可能 5-20 個),手動建立。
    每個任務「可以」屬於一個專案,也可以不屬於(就會出現在 Inbox)。
    projectsTas_uuidprimary_keydefaultid   FnullablenameNdescription   z#1F4E79r    r   colorusers.idRESTRICTondeleter    indexowner_id   activestatusprojectzsave-update, mergeselectin)back_populatescascadelazyTasktasksjoinedforeign_keysr4   ownerreturnc                 <    d| j                    d| j                   dS )Nz	<Project  status=>)r!   r/   selfs    3/volume1/homes/robertsu/coba/app/app/models/task.py__repr__zProject.__repr__B   s    499+Xdkk]!<<    )__name__
__module____qualname____doc____tablename__r   r   r   r   r   r   __annotations__r   r!   strr   r"   r%   r	   r,   r/   r   r6   listr:   r   rB    rC   rA   r   r      s    M$T$%7TSXYBtY%fSkEBD&+B&3D4&HKd
#H 'vay5)TE6#;T +T:
3	HfTl  (r
UHUFF3KU #/ $#E6$v,  'XJXNE6$<N=# =rC   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
dz     ed<    e ed      d      Ze	e   ed<    eed      Ze	edz     ed<    e ed      ddd      Ze	e   ed<    e ed      dd      Ze	e   ed<    eedd
      Ze	edz     ed<    e ed       edd	      dd
      Ze	e
dz     ed<    e ed       edd	      d      Ze	e
   ed<    eedd      Ze	e   ed <    e ed!      d      Ze	edz     ed"<    e dd#$      Z!e	e"dz     ed%<    e egd#&      Z#e	e$dz     ed'<    e egd#&      Z%e	e$   ed(<   d)efd*Z&y)+r5   uR  任務。

    狀態與優先順序設計:
      status:   todo / in_progress / review / done / cancelled
                看板的五個欄位,等同 Trello 的 List / Linear 的 Status。
      priority: low / medium / high / urgent

    指派(assignee_id)階段 2 用單一負責人,延後到階段 3 才開支援多人指派。
    r6   Tr   r   r   zprojects.idzSET NULLr(   r*   N
project_idi  Fr   titler"   r-   todo)r    r   r+   r/   
   mediumr$   prioritydue_dater&   assignee_idr'   
created_byr   order_index)timezonecompleted_atr7   )r2   r4   r0   r8   assigneecreatorr;   c                 V    d| j                   d| j                   d| j                   dS )Nz<Task r=   z
 priority=r>   )rO   r/   rS   r?   s    rA   rB   zTask.__repr__   s*    

~Xdkk]*T]]OSTUUrC   )'rD   rE   rF   rG   rH   r   r   r   r   r   r   rI   r	   rN   r   rO   rJ   r   r"   r/   rS   r   rT   r   rU   rV   r
   rW   intr   rY   r   r   r0   r   rZ   r   r[   rB   rL   rC   rA   r5   r5   F   s    M$T$%7TSXYBtY '4T=:6	'Jtd{#  'vc{UCE6#;C&3D4&HKd
#H'r
UFZ^_FF3K_)&*uhWHfSkW$1$T$RHfTD[!R (5T:
3	(Kt$   -T:
3 Jt   -WuaPKP -:(D:Q\`,aL&D)a '3'PX&YGVGdN#Y$0{mRZ$[HfTD[![(zlRGVD\RV# VrC   r5   N)rG   r   r   uuidr   r   
sqlalchemyr   r   r	   r
   r   r   r   r   sqlalchemy.ormr   r   r   app.databaser   app.models.userr   r   r   r5   rL   rC   rA   <module>rc      sF   " $  T T T > >  0'=dN '=T<V4 <VrC   