<think>Let me analyze the staged changes to generate a proper conventional commit message.
All checks were successful
Frontend CI / build-and-push-web (push) Successful in 3m16s
Frontend CI / ota-android (push) Successful in 11m42s
Frontend CI / build-android-apk (push) Successful in 59m5s

Looking at the changes:

1. **New files**:
   - `app/(app)/(tabs)/profile/account-deletion.tsx` - account deletion screen
   - `app/(app)/(tabs)/profile/privacy-settings.tsx` - privacy settings screen
   - `src/screens/profile/AccountDeletionScreen.tsx` - account deletion implementation
   - `src/screens/profile/PrivacySettingsScreen.tsx` - privacy settings implementation

2. **Modified files**:
   - Database changes: `LocalDataSource.ts`, `DatabaseManager.ts`, `DatabaseConfig.ts`, `MigrationManager.ts` - refactoring database layer (removing LockManager, simplified initialization, added retry logic)
   - Auth store: `authStore.ts` - changed `initDatabase` to `switchDatabase`
   - Auth service: `authService.ts` - added privacy settings and account deletion methods
   - DTOs: `dto.ts` - added PrivacySettingsDTO, DeletionStatusDTO, VoteOptionDTO, VoteResultDTO types
   - Navigation: `hrefs.ts` - added new href functions for privacy settings and account deletion
   - Profile screens: `SettingsScreen.tsx`, `index.ts`, `_layout.tsx` - added new menu items and routes
   - Various message screens - added keyboard handling props
   - `app/_layout.tsx` - added CSS for mobile touch handling
   - `CreatePostScreen.tsx` - fixed vote_options format
   - `PostDetailScreen.tsx` - added type annotations for vote handling
   - `MediaCacheManager.ts` - updated to use new expo-file-system API
   - `VerificationSettingsScreen.tsx` - fixed type safety
   - `AccountSecurityScreen.tsx` - styling refactoring

This is a multi-faceted change involving:

Database refactoring, new privacy/account deletion features, bug fixes, and UI improvements. The database changes appear to be refactoring without new functionality. The most significant changes are the privacy settings and account deletion features, plus bug fixes like the vote options format and mobile touch handling.
</think>

feat(profile): add privacy settings and account deletion screens

Add privacy settings and account deletion functionality with new screens and APIs. Refactor database initialization to use switchDatabase for user switching. Fix vote options format in post creation and add type safety to vote handling. Improve mobile touch handling in layout and message screens. Update media cache to use new expo-file-system API.

BREAKING CHANGE: Database initialization now uses switchDatabase instead of initDatabase for user switching
This commit is contained in:
lafay
2026-04-08 16:48:19 +08:00
parent 96a5207cf8
commit be8f6de8cf
28 changed files with 1092 additions and 420 deletions

View File

@@ -18,7 +18,7 @@ import { wsService } from '../services/wsService';
import { callStore } from './callStore';
import { useSessionStore } from './sessionStore';
import {
initDatabase,
switchDatabase,
closeDatabase,
isDbInitialized,
getCurrentDbUserId,
@@ -142,7 +142,7 @@ export const useAuthStore = create<AuthState>((set) => ({
const userId = String(user.id);
// 2. 初始化用户专属数据库
await initDatabase(userId);
await switchDatabase(userId);
// 3. 持久化 userId供下次冷启动提前初始化 DB 用)
await saveUserId(userId);
@@ -187,7 +187,7 @@ export const useAuthStore = create<AuthState>((set) => ({
const userId = String(user.id);
await initDatabase(userId);
await switchDatabase(userId);
await saveUserId(userId);
await cacheUser(user);
@@ -260,7 +260,7 @@ export const useAuthStore = create<AuthState>((set) => ({
if (savedUserId) {
// 2. 用已知的 userId 提前初始化 DB数据库模块内部已处理重试
try {
await initDatabase(savedUserId);
await switchDatabase(savedUserId);
} catch (dbErr) {
console.warn('[AuthStore] DB 预初始化失败,将在 API 成功后重试:', dbErr);
}
@@ -275,7 +275,8 @@ export const useAuthStore = create<AuthState>((set) => ({
// 4. 确保 DB 已初始化(如果预初始化失败,这里会重试)
const dbReady = isDbInitialized() && getCurrentDbUserId() === userId;
if (!dbReady) {
await initDatabase(userId);
await switchDatabase(userId);
}
// 5. 更新持久化的 userId