feat: integrate invite API and improve notification handling

- Add invite code display and binding functionality via API
- Fix notification unread count sync on auth state change
- Improve notification mark read with server state validation
- Add auth state listener to trigger notification refresh
- Add YaoCoinConverter for coin-to-yao type conversion
- Remove YaoLegend from divination screens (UI cleanup)
- Abbreviate relation labels in yao detail view
- Add re-register notice to account delete screen
- Update 'coins' terminology to 'points' in localization
- Fix backend points consumption to only run in CHAT mode
- Add HttpxAuthNoiseFilter to suppress auth endpoint logging
- Fix notification static_schema import path
- Add test coverage for notification bloc error handling
- Update AGENTS.md page header rules and image handling
- Delete deprecated run-dev.sh script
This commit is contained in:
qzl
2026-04-13 14:52:22 +08:00
parent da947f9f08
commit 1e22f27de2
52 changed files with 1419 additions and 307 deletions
+2 -1
View File
@@ -146,6 +146,7 @@
"settingsDeleteAccountSubtitle": "Permanently delete your account and personal data",
"settingsDeleteAccountWarningTitle": "Please confirm before deleting",
"settingsDeleteAccountWarningBody": "After deletion, related data including profile, history, and points will be permanently removed and cannot be restored.",
"settingsDeleteAccountReRegisterNotice": "Important: if you delete and re-register with the same email, consumed points will not be reset or refunded.",
"settingsDeleteAccountScopeProfile": "Profile and account information will be deleted",
"settingsDeleteAccountScopeHistory": "Divination history records will be deleted",
"settingsDeleteAccountScopePoints": "Points account and ledger records will be deleted",
@@ -295,7 +296,7 @@
"questionTypeSearch": "Search",
"questionTypeOther": "Other",
"toastPleaseInputQuestion": "Please enter your question",
"toastCoinInsufficient": "Insufficient coins",
"toastCoinInsufficient": "Insufficient points",
"divinationCostDialogTitle": "Confirm divination",
"divinationCostDialogBody": "This run costs {cost} credits. Available balance: {balance} credits. Continue?",
"@divinationCostDialogBody": {
+7 -1
View File
@@ -758,6 +758,12 @@ abstract class AppLocalizations {
/// **'删除账号后,个人资料、历史记录、点数信息等相关数据将被永久删除,且不可恢复。'**
String get settingsDeleteAccountWarningBody;
/// No description provided for @settingsDeleteAccountReRegisterNotice.
///
/// In zh, this message translates to:
/// **'重要提示:同一邮箱删除后重新注册,已消耗积分不会重置或返还。'**
String get settingsDeleteAccountReRegisterNotice;
/// No description provided for @settingsDeleteAccountScopeProfile.
///
/// In zh, this message translates to:
@@ -1487,7 +1493,7 @@ abstract class AppLocalizations {
/// No description provided for @toastCoinInsufficient.
///
/// In zh, this message translates to:
/// **'铜钱不足,无法解卦'**
/// **'积分不足,无法解卦'**
String get toastCoinInsufficient;
/// No description provided for @divinationCostDialogTitle.
+5 -1
View File
@@ -367,6 +367,10 @@ class AppLocalizationsEn extends AppLocalizations {
String get settingsDeleteAccountWarningBody =>
'After deletion, related data including profile, history, and points will be permanently removed and cannot be restored.';
@override
String get settingsDeleteAccountReRegisterNotice =>
'Important: if you delete and re-register with the same email, consumed points will not be reset or refunded.';
@override
String get settingsDeleteAccountScopeProfile =>
'Profile and account information will be deleted';
@@ -770,7 +774,7 @@ class AppLocalizationsEn extends AppLocalizations {
String get toastPleaseInputQuestion => 'Please enter your question';
@override
String get toastCoinInsufficient => 'Insufficient coins';
String get toastCoinInsufficient => 'Insufficient points';
@override
String get divinationCostDialogTitle => 'Confirm divination';
+5 -1
View File
@@ -359,6 +359,10 @@ class AppLocalizationsZh extends AppLocalizations {
String get settingsDeleteAccountWarningBody =>
'删除账号后,个人资料、历史记录、点数信息等相关数据将被永久删除,且不可恢复。';
@override
String get settingsDeleteAccountReRegisterNotice =>
'重要提示:同一邮箱删除后重新注册,已消耗积分不会重置或返还。';
@override
String get settingsDeleteAccountScopeProfile => '个人资料和账号信息会被删除';
@@ -737,7 +741,7 @@ class AppLocalizationsZh extends AppLocalizations {
String get toastPleaseInputQuestion => '请输入您想占卜的问题';
@override
String get toastCoinInsufficient => '铜钱不足,无法解卦';
String get toastCoinInsufficient => '积分不足,无法解卦';
@override
String get divinationCostDialogTitle => '确认开始解卦';
+2 -1
View File
@@ -146,6 +146,7 @@
"settingsDeleteAccountSubtitle": "永久删除账号及相关个人数据",
"settingsDeleteAccountWarningTitle": "删除前请确认",
"settingsDeleteAccountWarningBody": "删除账号后,个人资料、历史记录、点数信息等相关数据将被永久删除,且不可恢复。",
"settingsDeleteAccountReRegisterNotice": "重要提示:同一邮箱删除后重新注册,已消耗积分不会重置或返还。",
"settingsDeleteAccountScopeProfile": "个人资料和账号信息会被删除",
"settingsDeleteAccountScopeHistory": "历史解卦记录会被删除",
"settingsDeleteAccountScopePoints": "点数账户与流水记录会被删除",
@@ -295,7 +296,7 @@
"questionTypeSearch": "寻物",
"questionTypeOther": "其他",
"toastPleaseInputQuestion": "请输入您想占卜的问题",
"toastCoinInsufficient": "铜钱不足,无法解卦",
"toastCoinInsufficient": "积分不足,无法解卦",
"divinationCostDialogTitle": "确认开始解卦",
"divinationCostDialogBody": "本次解卦将消耗 {cost} 点数,当前可用 {balance} 点数。是否继续?",
"@divinationCostDialogBody": {