deliveryman-api/app/models/wecom_external_chat.py
2025-03-30 11:33:16 +08:00

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