Skip to content

数据库模型

MysticX 使用 PostgreSQL 18 数据库,Prisma 7 作为 ORM。数据库包含 35+ 个模型,按功能域组织。

核心模型

User(用户)

核心用户记录。

字段类型说明
idString主键
nameString显示名称
emailString邮箱(唯一)
emailVerifiedBoolean邮箱验证状态
imageString?头像 URL
creditsInt当前积分余额
tierSubscriptionTierFREE、GOLD 或 DIAMOND
roleString?管理员为 'admin',普通用户为 null
timezoneString?IANA 时区
stripeCustomerIdString?Stripe 客户 ID
subscriptionProviderString?'stripe'、'apple'、'google' 或 null
subscriptionIntervalString?'week'、'month'、'year' 或 null
inviteCodeString?唯一邀请码
invitedByUserIdString?邀请该用户的用户 ID
activeCardSkinIdString?当前使用的牌面皮肤
activeTarotReaderIdString?当前选择的读者
bannedBoolean?封禁状态
banReasonString?封禁原因
banExpiresDateTime?封禁到期时间(null = 永久封禁)
deletedAtDateTime?软删除时间戳(null = 正常账号)

Session / Account / Verification

Better Auth 标准表,用于会话管理、OAuth 账号和邮箱验证令牌。

解读模型

TarotReading(塔罗解读)

核心解读记录。

字段类型说明
idString主键
userIdString?所有者(访客解读为 null)
guestTokenString?访客标识符
readerIdString使用的 AI 读者角色
spreadIdString使用的牌阵类型
questionString用户的问题
selectedCardsJson牌序号和正逆位状态数组
localeString解读语言
statusReadingStatusPENDING、PROCESSING、COMPLETED、FAILED
ipAddressString?客户端 IP
timezoneString?客户端时区

Chat(对话)

每次解读关联一个对话,用于后续追问。

Message(消息)

对话中的单条消息。

字段类型说明
roleStringuser、assistant、system
typeString消息类型
contentString消息内容
statusMessageStatusPENDING、STREAMING、COMPLETED、FAILED
tokensCountInt?用于计费的 Token 数量
feedbackRatingFeedbackRating?THUMBS_UP 或 THUMBS_DOWN(null = 未评价)
feedbackReasonString?THUMBS_DOWN 时填写的文字原因

AiApiCall(AI 调用记录)

每次 AI 模型调用的遥测数据。

字段类型说明
callTypeAiCallTypeINITIAL_READING、FOLLOW_UP、DRAW_CARD、SPREAD_SUGGEST
modelString模型标识符
statusAiCallStatusSUCCESS、FAILED、TIMEOUT
durationMsInt总调用耗时
timeToFirstTokenMsInt?首个 Token 的延迟时间
inputTokensInt?输入 Token 数量
outputTokensInt?输出 Token 数量
totalTokensInt?合计 Token 数量
errorMessageString?失败时的错误详情

塔罗内容模型

TarotCard(塔罗牌)

78 张牌的完整牌组,包含多语言名称和释义。

字段类型说明
cardIndexInt0–77 索引
suitString?大/小阿尔卡纳花色
rankString?牌面等级
nameJsonTLocalizedString
imageUrlString牌面图片
meaningUpJson正位释义(多语言)
meaningRevJson逆位释义(多语言)
keywordsUpJson正位关键词
keywordsRevJson逆位关键词
yesNoUpVerdictString?是/否正位判定
yesNoRevVerdictString?是/否逆位判定

TarotSpread(塔罗牌阵)

牌阵定义及位置信息。

字段类型说明
slugStringURL slug(如 celtic-cross
nameJsonTLocalizedString
descriptionJsonTLocalizedString
cardsCountInt总抽牌数(含系统自动抽取的牌)
userSelectionCountInt用户手动选择的牌数
positionsJson位置定义(顺序、名称、说明、isMainCard)
layoutImageUrlString?牌阵布局缩略图
sortOrderInt管理员可调整的显示顺序

TarotReader(塔罗读者)

AI 读者角色。

字段类型说明
slugStringURL slug
isDefaultBoolean是否为默认读者
isActiveBoolean软删除标志(false 时隐藏)
nameJsonTLocalizedString
avatarUrlString?头像图片 URL
coverImageUrlString?背景封面图片 URL
bioJson读者选择界面展示的简介(TLocalizedString)
descriptionJson详细背景故事(TLocalizedString)
specialtiesJsonTLocalized<string[]> — 读者擅长领域标签
introAudioUrlsJson?Partial<TLocalizedString> — 各语言介绍音频 URL
voiceIdsJson?Partial<TLocalizedString> — 各语言 MiniMax 音色 ID
systemPromptStringAI 系统提示词(纯英文,非面向用户)
temperatureFloat模型温度参数(0.0–1.0)
topPFloatTop-P 采样参数
thinkingLevelThinkingLevelAI 思考强度
unlockPriceInt解锁所需积分(0 = 免费)
sortOrderIntUI 显示排序

TarotQuestionCategory / TarotQuestion / SpreadQuestion / SpreadInspiration

问题目录和牌阵选择灵感内容。

商业模型

Subscription(订阅)

关联用户的 Stripe 订阅记录。

字段类型说明
planStringGOLD 或 DIAMOND
stripeSubscriptionIdStringStripe 订阅 ID
statusStringactive、canceled、past_due 等
periodStartDateTime当前周期开始时间
periodEndDateTime当前周期结束时间

CreditTransaction(积分交易)

每次积分变动的审计日志。

字段类型说明
userIdString用户
amountInt正数(收入)或负数(支出)
typeCreditTransactionType详见下方枚举值
descriptionString?人类可读的描述

个性化模型

UserMemory(AI 记忆)

每个用户的 AI 记忆事实。

字段类型说明
factsJson最多 5 条英文事实字符串数组
translationsJson按需生成的多语言翻译

WeeklyGuidance(每周指引)

每周 AI 生成的灵性报告。

字段类型说明
contentStringMarkdown 格式的指引内容
translationsJson多语言版本
statusGuidanceStatusGENERATING、READY、FAILED
weekStart / weekEndDateTime覆盖的时间段
autoGeneratedBooleanDiamond 用户自动生成为 true

SoulJourney(灵魂旅程)

个人成长记录文档。

字段类型说明
contentStringMarkdown 格式的旅程内容
translationsJson多语言版本
statusGuidanceStatusGENERATING、READY、FAILED
themesJson提取的主题字符串
themeTranslationsJson主题的缓存多语言翻译
readingCountInt分析的解读数量

CardOfDayEntry(每日一牌)

每日抽牌记录。

字段类型说明
cardIndexInt抽到的牌
isReversedBoolean牌的正逆方向
emotionalWeatherStringAI 生成的情绪天气
actionsJson建议行动
questionsJson探索问题
resonanceCountInt用户共鸣追踪
creditsInt发放的积分

互动模型

Referral(邀请推荐)

追踪邀请关系。

字段类型说明
inviterUserIdString邀请者
inviteeUserIdString被邀请者
statusReferralStatusREGISTERED、QUALIFIED、REWARDED

ReferralMilestoneReward(里程碑奖励)

里程碑奖励追踪(3、10、25 次邀请)。

Notification(通知)

应用内通知记录。

字段类型说明
categoryNotificationCategoryREADING、ACCOUNT、SOCIAL、SYSTEM
typeNotificationType具体通知类型枚举
targetUrlString?深链接 URL
metadataJson?可选附加数据
isReadBoolean已读状态

UserFeedback(用户反馈)

用户提交的反馈,包含截图 URL。

内容模型

BlogPost / BlogCategory / BlogTag / BlogAuthor / BlogPostTag

完整的博客系统,包含分类、标签和作者资料。所有内容字段使用 TLocalizedString JSON 格式。

市场模型

CardSkin / UserCardSkin(牌面皮肤)

牌背设计和用户拥有记录。

UserTarotReader(读者解锁记录)

记录用户已购买解锁的读者。

分析模型

PageView(页面浏览)

服务端页面浏览追踪,使用访客 Cookie ID。

将 Telegram 账号关联到 MysticX 用户账号。

关键枚举

枚举
SubscriptionTierFREE、GOLD、DIAMOND
CreditTransactionTypeREGISTRATION_BONUS、REFERRAL_INVITER_REWARD、REFERRAL_INVITEE_BONUS、REFERRAL_MILESTONE_BONUS、DAILY_CLAIM、CARD_OF_DAY_CLAIM、READING_DEDUCTION、FOLLOWUP_DEDUCTION、SPREAD_SUGGEST_DEDUCTION、SUBSCRIPTION_GRANT、ONE_TIME_PURCHASE、ADMIN_ADJUSTMENT、WEEKLY_GUIDANCE_DEDUCTION、SOUL_JOURNEY_DEDUCTION、READER_UNLOCK_DEDUCTION、CARD_SKIN_UNLOCK_DEDUCTION
ReadingStatusACTIVE、PRECREATED
MessageStatusPENDING、STREAMING、COMPLETED、FAILED
FeedbackRatingTHUMBS_UP、THUMBS_DOWN
GuidanceStatusGENERATING、READY、FAILED
ReferralStatusREGISTERED、QUALIFIED、REWARDED
FeedbackStatusPENDING、REVIEWED、RESOLVED
BlogPostStatusDRAFT、PUBLISHED、SCHEDULED、ARCHIVED
NotificationCategoryREADING、ACCOUNT、SOCIAL、SYSTEM
AiCallTypeINITIAL_READING、FOLLOW_UP、DRAW_CARD、SPREAD_SUGGEST
AiCallStatusSUCCESS、FAILED、TIMEOUT
ThinkingLevelMINIMAL、LOW、MEDIUM、HIGH

Internal documentation for MysticX team