from datetime import datetime from typing import Optional from sqlalchemy import Column, DateTime, JSON, func from sqlmodel import Field, SQLModel class Department(SQLModel, table=True): id: Optional[int] = Field(default=None, primary_key=True) wecom_dept_id: str = Field(default=None, index=True) dname: str = Field( max_length=100, description="部门名称", ) name_en: str = Field( max_length=100, description="部门英文名", ) department_leader: list[str] = Field( default_factory=list, sa_column=Column(JSON), description="部门负责人 user_id 列表", ) parent_id: str = Field(default=0, index=True) order: int = Field(default=0) created_at: datetime = Field( default_factory=datetime.now, sa_column=Column( DateTime(timezone=True), server_default=func.now(), nullable=False, ), ) updated_at: datetime = Field( default_factory=datetime.now, sa_column=Column( DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False, ), ) class Employee(SQLModel, table=True): id: Optional[int] = Field(default=None, primary_key=True) wecom_user_id: str = Field(default=None, index=True) ename: str = Field( max_length=100, description="员工姓名", ) dept_ids: list[str] = Field( default_factory=list, sa_column=Column(JSON), description="部门ID", ) open_userid: str | None = Field( default=None, max_length=100, index=True, description="企业微信 user_id", ) created_at: datetime = Field( default_factory=datetime.now, sa_column=Column( DateTime(timezone=True), server_default=func.now(), nullable=False, ), ) updated_at: datetime = Field( default_factory=datetime.now, sa_column=Column( DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False, ), )