用户系统
This commit is contained in:
@@ -1,15 +1,26 @@
|
||||
/**
|
||||
* 基于 localStorage 的客户端持久化存储。
|
||||
* 提供会话、标签、图片资源的 CRUD 操作。
|
||||
* 所有 key 按 user_id 隔离,确保多用户数据不混淆。
|
||||
*/
|
||||
|
||||
import type { Session, Tag, ImageAsset, ChatMessage } from "./types";
|
||||
|
||||
const STORAGE_KEYS = {
|
||||
sessions: "epeekit-sessions",
|
||||
tags: "epeekit-tags",
|
||||
assets: "epeekit-assets",
|
||||
} as const;
|
||||
// 当前登录用户的 ID,由 AppProvider 在初始化时设置
|
||||
let _userId = "";
|
||||
|
||||
export function setStoreUserId(id: string) {
|
||||
_userId = id;
|
||||
}
|
||||
|
||||
export function getStoreUserId(): string {
|
||||
return _userId;
|
||||
}
|
||||
|
||||
function storageKey(base: string): string {
|
||||
const prefix = _userId || "_anonymous";
|
||||
return `epeekit-${prefix}-${base}`;
|
||||
}
|
||||
|
||||
// --------------- 内置标签 ---------------
|
||||
|
||||
@@ -52,7 +63,7 @@ export function generateId(prefix = ""): string {
|
||||
// --------------- 标签 ---------------
|
||||
|
||||
export function loadTags(): Tag[] {
|
||||
const custom = readJSON<Tag[]>(STORAGE_KEYS.tags, []);
|
||||
const custom = readJSON<Tag[]>(storageKey("tags"), []);
|
||||
const builtinIds = new Set(BUILTIN_TAGS.map((t) => t.id));
|
||||
const merged = [...BUILTIN_TAGS, ...custom.filter((t) => !builtinIds.has(t.id))];
|
||||
return merged;
|
||||
@@ -60,7 +71,7 @@ export function loadTags(): Tag[] {
|
||||
|
||||
export function saveTags(tags: Tag[]) {
|
||||
const custom = tags.filter((t) => !t.builtin);
|
||||
writeJSON(STORAGE_KEYS.tags, custom);
|
||||
writeJSON(storageKey("tags"), custom);
|
||||
}
|
||||
|
||||
export function addTag(name: string, color: string): Tag {
|
||||
@@ -78,11 +89,11 @@ export function deleteTag(tagId: string) {
|
||||
// --------------- 会话 ---------------
|
||||
|
||||
export function loadSessions(): Session[] {
|
||||
return readJSON<Session[]>(STORAGE_KEYS.sessions, []);
|
||||
return readJSON<Session[]>(storageKey("sessions"), []);
|
||||
}
|
||||
|
||||
export function saveSessions(sessions: Session[]) {
|
||||
writeJSON(STORAGE_KEYS.sessions, sessions);
|
||||
writeJSON(storageKey("sessions"), sessions);
|
||||
}
|
||||
|
||||
export function createSession(): Session {
|
||||
@@ -114,7 +125,6 @@ export function updateSession(session: Session) {
|
||||
export function deleteSession(sessionId: string) {
|
||||
const sessions = loadSessions().filter((s) => s.id !== sessionId);
|
||||
saveSessions(sessions);
|
||||
// 同时删除关联的图片资源
|
||||
const assets = loadAssets().filter((a) => a.sessionId !== sessionId);
|
||||
saveAssets(assets);
|
||||
}
|
||||
@@ -122,11 +132,11 @@ export function deleteSession(sessionId: string) {
|
||||
// --------------- 图片资源 ---------------
|
||||
|
||||
export function loadAssets(): ImageAsset[] {
|
||||
return readJSON<ImageAsset[]>(STORAGE_KEYS.assets, []);
|
||||
return readJSON<ImageAsset[]>(storageKey("assets"), []);
|
||||
}
|
||||
|
||||
export function saveAssets(assets: ImageAsset[]) {
|
||||
writeJSON(STORAGE_KEYS.assets, assets);
|
||||
writeJSON(storageKey("assets"), assets);
|
||||
}
|
||||
|
||||
export function addAsset(asset: ImageAsset) {
|
||||
|
||||
Reference in New Issue
Block a user