
    mic                         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 ddlmZmZmZ ddlmZ  G d d      Z G d	 d
ee      Z G d dee      Zy)u  
使用者相關資料表 Model。

階段 1 只先建立兩張表:
  - users         ─ 帳號主表
  - user_skills   ─ 技能標籤(供階段 3 庫柏推薦負責人使用)

設計原則:
  1. 主鍵用 UUID v4(分散式友善、不會洩漏總筆數)
  2. 所有表都有 created_at, updated_at, deleted_at(軟刪除)
  3. email 全域唯一
  4. 角色只有 owner / member 兩種(微型團隊不需要複雜權限)
    )datetime)UUIDuuid4)DateTime
ForeignKeyIndexIntegerStringUuidfunc)Mappedmapped_columnrelationship)Basec                      e Zd ZU dZ e ed       ej                         d      Ze	e
   ed<    e ed       ej                          ej                         d      Ze	e
   ed<    e ed      dd	      Ze	e
d
z     ed<   y
)TimestampMixinu  共用時間戳記欄位的 mixin。

    每張表都會有:
      - created_at: 建立時間(自動填)
      - updated_at: 最後更新時間(每次 UPDATE 自動更新)
      - deleted_at: 軟刪除時間(NULL = 未刪除,有值 = 已軟刪)

    軟刪除設計理由:庫柏需要保留「歷史脈絡」,真刪會切斷關聯。
    所有查詢預設要過濾 deleted_at IS NULL。
    T)timezoneF)server_defaultnullable
created_at)r   onupdater   
updated_atr   indexN
deleted_at)__name__
__module____qualname____doc__r   r   r   nowr   r   r   __annotations__r   r        3/volume1/homes/robertsu/coba/app/app/models/user.pyr   r      s    	 $1$txxz$Jx  
 $1$txxz	$Jx   +8$+Jx$' r#   r   c                      e Zd ZU dZdZ e ed      de      Ze	e
   ed<    e ed      ddd	      Ze	e   ed
<    e e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 ed      dd      Ze	e   ed<    edd      Ze	e   ed<    e ed      ddd	      Ze	edz     ed<    eddd      Ze	ed      ed<   d efd!Zy)"UseruP  使用者帳號。

    role 設計:
      - owner  : 公司負責人 / 管理員,可以邀請成員、修改公司設定
      - member : 一般成員,可以使用所有協作功能

    第一個註冊成功的帳號自動成為 owner(由 seed 腳本建立),
    之後新加入的成員都是 member,要由 owner 手動升級。
    usersTas_uuidprimary_keydefaultid   F)uniquer   r   emailr   password_hashd   display_namei  N
avatar_url   memberr   r,   role)r,   r   	is_active@   line_user_iduserzall, delete-orphanselectin)back_populatescascadelazy	UserSkillskillsreturnc                 <    d| j                    d| j                   dS )Nz<User z role=>)r0   r9   selfs    r$   __repr__zUser.__repr__m   s    

|6$))A66r#   )r   r   r   r   __tablename__r   r   r   r-   r   r   r!   r
   r0   strr2   r4   r5   r9   r:   boolr<   r   rC   listrI   r"   r#   r$   r&   r&   6   s8    M %TBt  'vc{4%W[\E6#;\ "/vc{U!KM6#;K !.fSkE JL&+J &36#;%NJsTz"N &fRj5(SD&+S ,D5IIvd|I
 (5r
4$d(L&t$ 
 )5$)FF4$% 7# 7r#   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
      Ze	e   ed<    eed
d      Ze	e   ed<    ed      Ze	e   ed<    edddd      fZdefdZy)rB   u  使用者技能標籤。

    用途:庫柏在「自動推薦任務負責人」時參考。
    例如某任務描述「要修 React 元件樣式」,庫柏會找到 skill_name='React' 且
    proficiency 高的成員推薦。

    proficiency:1(新手)~ 5(專家)
    user_skillsTr(   r*   r-   zusers.idCASCADE)ondeleteFr   user_idr3   r1   
skill_name   r8   proficiencyrC   )r?   r=   ux_user_skill_unique)r/   rD   c                 V    d| j                    d| j                   d| j                   dS )Nz<UserSkill user_id=z skill=z lv=rF   )rR   rS   rU   rG   s    r$   rI   zUserSkill.__repr__   s.    $T\\N'$//9J$tO_O_N``abbr#   N)r   r   r   r   rJ   r   r   r   r-   r   r   r!   r   rR   r
   rS   rK   r	   rU   intr   r=   r&   r   __table_args__rI   r"   r#   r$   rB   rB   q   s     "M$T$%7TSXYBtY)T:	2	GVD\  ,F3K%HJsH,WuaPKP &X>D&,> 	$idKNc# cr#   rB   N)r   r   uuidr   r   
sqlalchemyr   r   r   r	   r
   r   r   sqlalchemy.ormr   r   r   app.databaser   r   r&   rB   r"   r#   r$   <module>r^      sM      O O O > >  <874 87v cn  cr#   