Files
wecom-wnzs-adapter/model/model.py
2026-01-15 18:08:08 +08:00

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,
)
)