98 lines
3.4 KiB
Python
98 lines
3.4 KiB
Python
from sqlalchemy import Column, String, Integer, DateTime, JSON, Boolean, ForeignKey, Text
|
|
from sqlalchemy.sql import func
|
|
from pydantic import BaseModel, Field
|
|
from typing import Optional, List, Dict, Any
|
|
from datetime import datetime
|
|
from .database import Base
|
|
|
|
class WecomExternalChatDB(Base):
|
|
"""企业微信外部群聊表"""
|
|
__tablename__ = "wecom_external_chats"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
chat_id = Column(String(64), nullable=False, unique=True, index=True) # 群聊ID
|
|
name = Column(String(100), nullable=True) # 群名称
|
|
owner = Column(String(64), nullable=True) # 群主ID
|
|
create_time = Column(DateTime(timezone=True), server_default=func.now())
|
|
update_time = Column(DateTime(timezone=True), onupdate=func.now())
|
|
member_count = Column(Integer, nullable=False, default=0) # 成员数量
|
|
notice = Column(String(500), nullable=True) # 群公告
|
|
is_active = Column(Boolean, nullable=False, default=True) # 是否活跃
|
|
|
|
class WecomExternalChatMemberDB(Base):
|
|
"""企业微信外部群聊成员表"""
|
|
__tablename__ = "wecom_external_chat_members"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
chat_id = Column(String(64), nullable=False, index=True) # 群聊ID
|
|
user_id = Column(String(64), nullable=False, index=True) # 用户ID
|
|
type = Column(String(32), nullable=False) # 成员类型: INTERNAL(内部成员)、EXTERNAL(外部联系人)
|
|
join_time = Column(DateTime(timezone=True), server_default=func.now()) # 加入时间
|
|
unionid = Column(String(64), nullable=True) # 微信unionid
|
|
name = Column(String(100), nullable=True) # 成员名称
|
|
mobile = Column(String(20), nullable=True) # 手机号
|
|
welcome_sent = Column(Boolean, nullable=False, default=False) # 是否已发送欢迎消息
|
|
|
|
# 设置联合唯一索引
|
|
__table_args__ = (
|
|
{"mysql_charset": "utf8mb4"},
|
|
)
|
|
|
|
# Pydantic 模型
|
|
class WecomExternalChatCreate(BaseModel):
|
|
chat_id: str
|
|
name: Optional[str] = None
|
|
owner: Optional[str] = None
|
|
member_count: int = 0
|
|
notice: Optional[str] = None
|
|
is_active: bool = True
|
|
|
|
class WecomExternalChatUpdate(BaseModel):
|
|
name: Optional[str] = None
|
|
owner: Optional[str] = None
|
|
member_count: Optional[int] = None
|
|
notice: Optional[str] = None
|
|
is_active: Optional[bool] = None
|
|
|
|
class WecomExternalChatInfo(BaseModel):
|
|
id: int
|
|
chat_id: str
|
|
name: Optional[str] = None
|
|
owner: Optional[str] = None
|
|
create_time: datetime
|
|
update_time: Optional[datetime] = None
|
|
member_count: int = 0
|
|
notice: Optional[str] = None
|
|
is_active: bool = True
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
class WecomExternalChatMemberCreate(BaseModel):
|
|
chat_id: str
|
|
user_id: str
|
|
type: str
|
|
unionid: Optional[str] = None
|
|
name: Optional[str] = None
|
|
mobile: Optional[str] = None
|
|
welcome_sent: bool = False
|
|
|
|
class WecomExternalChatMemberUpdate(BaseModel):
|
|
unionid: Optional[str] = None
|
|
name: Optional[str] = None
|
|
mobile: Optional[str] = None
|
|
welcome_sent: Optional[bool] = None
|
|
|
|
class WecomExternalChatMemberInfo(BaseModel):
|
|
id: int
|
|
chat_id: str
|
|
user_id: str
|
|
type: str
|
|
join_time: datetime
|
|
unionid: Optional[str] = None
|
|
name: Optional[str] = None
|
|
mobile: Optional[str] = None
|
|
welcome_sent: bool
|
|
|
|
class Config:
|
|
from_attributes = True |