refactor(post): consolidate post sync to PostSyncService and remove ProcessPostUseCase
- Replace ProcessPostUseCase with new PostSyncService in src/services/post/ - Add postListStore for state management in src/stores/post/ - Remove deprecated ProcessPostUseCase and ProcessMessageUseCase files - Delete architecture documentation files (ARCHITECTURE_REFACTOR_PLAN.md, architecture-comparison-report.md) - Update all consumers (HomeScreen, PostDetailScreen, SearchScreen, useUserProfile, useDifferentialPosts) - Simplify postService to only contain API layer methods - Remove unused type exports from message stores BREAKING CHANGE: ProcessPostUseCase and ProcessMessageUseCase have been removed. Use postSyncService for post operations instead.
This commit is contained in:
@@ -1,66 +1,40 @@
|
||||
/**
|
||||
* 帖子状态 Zustand Store
|
||||
*/
|
||||
|
||||
import { create } from 'zustand';
|
||||
import type { Post } from '../../types';
|
||||
import { CacheEntry, createCacheEntry, isCacheExpired, DEFAULT_TTL } from '../utils/cache';
|
||||
|
||||
// ==================== 状态接口 ====================
|
||||
|
||||
export interface PostManagerState {
|
||||
// 帖子列表缓存 (key: list:type:page:pageSize)
|
||||
listsMap: Map<string, CacheEntry<Post[]>>;
|
||||
|
||||
// 帖子详情缓存
|
||||
detailsMap: Map<string, CacheEntry<Post | null>>;
|
||||
|
||||
// 加载状态
|
||||
loadingListKeys: Set<string>;
|
||||
loadingDetailIds: Set<string>;
|
||||
|
||||
// 待处理请求(去重)
|
||||
pendingRequests: Map<string, Promise<any>>;
|
||||
}
|
||||
|
||||
export interface PostManagerActions {
|
||||
// 获取状态
|
||||
getPostsList: (type: string, page: number, pageSize: number) => Post[] | null;
|
||||
getPostDetail: (postId: string) => Post | null;
|
||||
isListExpired: (type: string, page: number, pageSize: number) => boolean;
|
||||
isDetailExpired: (postId: string) => boolean;
|
||||
isLoadingList: (type: string, page: number, pageSize: number) => boolean;
|
||||
isLoadingDetail: (postId: string) => boolean;
|
||||
|
||||
// 设置状态
|
||||
setPostsList: (type: string, page: number, pageSize: number, posts: Post[]) => void;
|
||||
setPostDetail: (postId: string, post: Post | null) => void;
|
||||
setLoadingList: (type: string, page: number, pageSize: number, loading: boolean) => void;
|
||||
setLoadingDetail: (postId: string, loading: boolean) => void;
|
||||
|
||||
// 缓存管理
|
||||
invalidateList: (type?: string, page?: number, pageSize?: number) => void;
|
||||
invalidateDetail: (postId: string) => void;
|
||||
invalidateAll: () => void;
|
||||
|
||||
// 请求去重
|
||||
getPendingRequest: <T>(key: string) => Promise<T> | undefined;
|
||||
setPendingRequest: <T>(key: string, request: Promise<T>) => void;
|
||||
deletePendingRequest: (key: string) => void;
|
||||
clearPendingRequests: () => void;
|
||||
|
||||
// 重置
|
||||
reset: () => void;
|
||||
}
|
||||
|
||||
// ==================== 辅助函数 ====================
|
||||
|
||||
function buildListKey(type: string, page: number, pageSize: number): string {
|
||||
return `list:${type}:${page}:${pageSize}`;
|
||||
}
|
||||
|
||||
// ==================== 初始状态 ====================
|
||||
|
||||
const initialState: PostManagerState = {
|
||||
listsMap: new Map(),
|
||||
detailsMap: new Map(),
|
||||
@@ -69,16 +43,11 @@ const initialState: PostManagerState = {
|
||||
pendingRequests: new Map(),
|
||||
};
|
||||
|
||||
// ==================== Store 创建 ====================
|
||||
|
||||
export type PostManagerStore = PostManagerState & PostManagerActions;
|
||||
|
||||
export const usePostManagerStore = create<PostManagerStore>((set, get) => ({
|
||||
// ==================== 初始状态 ====================
|
||||
...initialState,
|
||||
|
||||
// ==================== 获取状态 ====================
|
||||
|
||||
getPostsList: (type: string, page: number, pageSize: number) => {
|
||||
const key = buildListKey(type, page, pageSize);
|
||||
const entry = get().listsMap.get(key);
|
||||
@@ -116,8 +85,6 @@ export const usePostManagerStore = create<PostManagerStore>((set, get) => ({
|
||||
return get().loadingDetailIds.has(postId);
|
||||
},
|
||||
|
||||
// ==================== 设置状态 ====================
|
||||
|
||||
setPostsList: (type: string, page: number, pageSize: number, posts: Post[]) => {
|
||||
const key = buildListKey(type, page, pageSize);
|
||||
set(state => {
|
||||
@@ -160,8 +127,6 @@ export const usePostManagerStore = create<PostManagerStore>((set, get) => ({
|
||||
});
|
||||
},
|
||||
|
||||
// ==================== 缓存管理 ====================
|
||||
|
||||
invalidateList: (type?: string, page?: number, pageSize?: number) => {
|
||||
if (type !== undefined && page !== undefined && pageSize !== undefined) {
|
||||
const key = buildListKey(type, page, pageSize);
|
||||
@@ -191,8 +156,6 @@ export const usePostManagerStore = create<PostManagerStore>((set, get) => ({
|
||||
});
|
||||
},
|
||||
|
||||
// ==================== 请求去重 ====================
|
||||
|
||||
getPendingRequest: <T>(key: string) => {
|
||||
return get().pendingRequests.get(key) as Promise<T> | undefined;
|
||||
},
|
||||
@@ -217,8 +180,6 @@ export const usePostManagerStore = create<PostManagerStore>((set, get) => ({
|
||||
set({ pendingRequests: new Map() });
|
||||
},
|
||||
|
||||
// ==================== 重置 ====================
|
||||
|
||||
reset: () => {
|
||||
set({
|
||||
...initialState,
|
||||
|
||||
Reference in New Issue
Block a user