first commit

This commit is contained in:
Alexej Wolff
2026-02-11 00:15:59 +01:00
commit cc003ffbd5
39 changed files with 12170 additions and 0 deletions
+96
View File
@@ -0,0 +1,96 @@
// Сервис для хранения данных в localStorage
import type { Story, GameSession } from "../types";
const STORIES_KEY = "resekai_stories";
const SESSIONS_KEY = "resekai_sessions";
// Истории
export function getStories(): Story[] {
const data = localStorage.getItem(STORIES_KEY);
if (!data) return [];
const stories = JSON.parse(data);
return stories.map((s: Story) => ({
...s,
createdAt: new Date(s.createdAt),
updatedAt: new Date(s.updatedAt),
}));
}
export function getStoryById(id: string): Story | undefined {
const stories = getStories();
return stories.find((s) => s.id === id);
}
export function saveStory(story: Story): void {
const stories = getStories();
const index = stories.findIndex((s) => s.id === story.id);
if (index >= 0) {
stories[index] = story;
} else {
stories.push(story);
}
localStorage.setItem(STORIES_KEY, JSON.stringify(stories));
}
export function deleteStory(id: string): void {
const stories = getStories().filter((s) => s.id !== id);
localStorage.setItem(STORIES_KEY, JSON.stringify(stories));
// Удаляем связанные сессии
const sessions = getSessions().filter((s) => s.storyId !== id);
localStorage.setItem(SESSIONS_KEY, JSON.stringify(sessions));
}
// Игровые сессии
export function getSessions(): GameSession[] {
const data = localStorage.getItem(SESSIONS_KEY);
if (!data) return [];
const sessions = JSON.parse(data);
return sessions.map((s: GameSession) => ({
...s,
createdAt: new Date(s.createdAt),
updatedAt: new Date(s.updatedAt),
messages: s.messages.map((m) => ({
...m,
timestamp: new Date(m.timestamp),
})),
}));
}
export function getSessionByStoryId(storyId: string): GameSession | undefined {
const sessions = getSessions();
return sessions.find((s) => s.storyId === storyId);
}
export function getSessionById(id: string): GameSession | undefined {
const sessions = getSessions();
return sessions.find((s) => s.id === id);
}
export function saveSession(session: GameSession): void {
const sessions = getSessions();
const index = sessions.findIndex((s) => s.id === session.id);
if (index >= 0) {
sessions[index] = session;
} else {
sessions.push(session);
}
localStorage.setItem(SESSIONS_KEY, JSON.stringify(sessions));
}
export function deleteSession(id: string): void {
const sessions = getSessions().filter((s) => s.id !== id);
localStorage.setItem(SESSIONS_KEY, JSON.stringify(sessions));
}
// Генерация ID
export function generateId(): string {
return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
}