86 lines
2.4 KiB
Python
86 lines
2.4 KiB
Python
from datetime import datetime
|
|
|
|
from sqlalchemy import JSON, Column, DateTime, func
|
|
from sqlmodel import JSON, Field, SQLModel
|
|
|
|
|
|
class TenantTimeMixin(SQLModel):
|
|
tenant_id: int = Field(index=True, description="租户ID")
|
|
|
|
created_at: datetime = Field(
|
|
sa_column=Column(
|
|
DateTime(timezone=True),
|
|
server_default=func.now(),
|
|
nullable=False,
|
|
)
|
|
)
|
|
|
|
updated_at: datetime = Field(
|
|
sa_column=Column(
|
|
DateTime(timezone=True),
|
|
server_default=func.now(),
|
|
onupdate=func.now(),
|
|
nullable=False,
|
|
)
|
|
)
|
|
|
|
|
|
class Department(TenantTimeMixin, SQLModel, table=True):
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
|
|
dname: str = Field(max_length=100)
|
|
name_en: str = Field(max_length=100)
|
|
|
|
department_leader: list[int] = Field(default_factory=list, sa_column=Column(JSON))
|
|
|
|
parent_id: int = Field(default=0, index=True)
|
|
order: int = Field(default=0)
|
|
|
|
|
|
class Employee(TenantTimeMixin, SQLModel, table=True):
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
|
|
ename: str = Field(max_length=100)
|
|
|
|
dept_id: int = Field(foreign_key="department.id", index=True)
|
|
|
|
open_userid: str = Field(max_length=100, index=True)
|
|
|
|
|
|
class Tenant(SQLModel, table=True):
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
|
|
# ========== 基础信息 ==========
|
|
name: str = Field(max_length=100, index=True, description="租户名称 / 企业名称")
|
|
|
|
# ========== 企业微信配置 ==========
|
|
wecom_corp_id: str = Field(max_length=64, index=True, description="企业微信 CorpID")
|
|
|
|
wecom_corp_secret: str = Field(max_length=128, description="企业微信应用 Secret")
|
|
|
|
wecom_agent_id: int = Field(description="企业微信应用 AgentId")
|
|
|
|
wecom_token: str = Field(max_length=64, description="企业微信回调 Token")
|
|
|
|
wecom_encoding_aes_key: str = Field(
|
|
max_length=64, description="企业微信回调 EncodingAESKey"
|
|
)
|
|
|
|
# ========== 时间字段 ==========
|
|
created_at: datetime = Field(
|
|
sa_column=Column(
|
|
DateTime(timezone=True),
|
|
server_default=func.now(),
|
|
nullable=False,
|
|
)
|
|
)
|
|
|
|
updated_at: datetime = Field(
|
|
sa_column=Column(
|
|
DateTime(timezone=True),
|
|
server_default=func.now(),
|
|
onupdate=func.now(),
|
|
nullable=False,
|
|
)
|
|
)
|