MCPcopy Create free account
hub / github.com/Tron521/codex-console-temp / Account

Class Account

src/database/models.py:33–91  ·  view source on GitHub ↗

已注册账号表

Source from the content-addressed store, hash-verified

31
32
33class Account(Base):
34 """已注册账号表"""
35 __tablename__ = 'accounts'
36
37 id = Column(Integer, primary_key=True, autoincrement=True)
38 email = Column(String(255), nullable=False, unique=True, index=True)
39 password = Column(String(255)) # 注册密码(明文存储)
40 access_token = Column(Text)
41 refresh_token = Column(Text)
42 id_token = Column(Text)
43 session_token = Column(Text) # 会话令牌(优先刷新方式)
44 client_id = Column(String(255)) # OAuth Client ID
45 account_id = Column(String(255))
46 workspace_id = Column(String(255))
47 email_service = Column(String(50), nullable=False) # 'tempmail', 'outlook', 'moe_mail'
48 email_service_id = Column(String(255)) # 邮箱服务中的ID
49 proxy_used = Column(String(255))
50 registered_at = Column(DateTime, default=utcnow_naive)
51 last_refresh = Column(DateTime) # 最后刷新时间
52 expires_at = Column(DateTime) # Token 过期时间
53 status = Column(String(20), default='active') # 'active', 'expired', 'banned', 'failed'
54 extra_data = Column(JSONEncodedDict) # 额外信息存储
55 cpa_uploaded = Column(Boolean, default=False) # 是否已上传到 CPA
56 cpa_uploaded_at = Column(DateTime) # 上传时间
57 source = Column(String(20), default='register') # 'register' 或 'login',区分账号来源
58 priority = Column(Integer, default=50, index=True) # 账号优先级
59 last_used_at = Column(DateTime, index=True) # 最近用于邀请/绑卡等任务的时间
60 subscription_type = Column(String(20)) # None / 'plus' / 'free'
61 subscription_at = Column(DateTime) # 订阅开通时间
62 cookies = Column(Text) # 完整 cookie 字符串,用于支付请求
63 created_at = Column(DateTime, default=utcnow_naive)
64 updated_at = Column(DateTime, default=utcnow_naive, onupdate=utcnow_naive)
65 bind_card_tasks = relationship("BindCardTask", back_populates="account")
66
67 def to_dict(self) -> Dict[str, Any]:
68 """转换为字典"""
69 return {
70 'id': self.id,
71 'email': self.email,
72 'password': self.password,
73 'client_id': self.client_id,
74 'email_service': self.email_service,
75 'account_id': self.account_id,
76 'workspace_id': self.workspace_id,
77 'registered_at': self.registered_at.isoformat() if self.registered_at else None,
78 'last_refresh': self.last_refresh.isoformat() if self.last_refresh else None,
79 'expires_at': self.expires_at.isoformat() if self.expires_at else None,
80 'status': self.status,
81 'proxy_used': self.proxy_used,
82 'cpa_uploaded': self.cpa_uploaded,
83 'cpa_uploaded_at': self.cpa_uploaded_at.isoformat() if self.cpa_uploaded_at else None,
84 'source': self.source,
85 'priority': self.priority,
86 'last_used_at': self.last_used_at.isoformat() if self.last_used_at else None,
87 'subscription_type': self.subscription_type,
88 'subscription_at': self.subscription_at.isoformat() if self.subscription_at else None,
89 'created_at': self.created_at.isoformat() if self.created_at else None,
90 'updated_at': self.updated_at.isoformat() if self.updated_at else None

Calls

no outgoing calls