40 lines
930 B
TypeScript
40 lines
930 B
TypeScript
import { Injectable } from '@angular/core';
|
|
|
|
const STORAGE_KEY = 'nowchess.games';
|
|
const MAX_ENTRIES = 50;
|
|
|
|
interface GameEntry {
|
|
id: string;
|
|
addedAt: number;
|
|
}
|
|
|
|
@Injectable({ providedIn: 'root' })
|
|
export class GameHistoryService {
|
|
recordGame(gameId: string): void {
|
|
const entries = this.load().filter((e) => e.id !== gameId);
|
|
entries.unshift({ id: gameId, addedAt: Date.now() });
|
|
this.save(entries.slice(0, MAX_ENTRIES));
|
|
}
|
|
|
|
getGameIds(): string[] {
|
|
return this.load().map((e) => e.id);
|
|
}
|
|
|
|
removeGame(gameId: string): void {
|
|
this.save(this.load().filter((e) => e.id !== gameId));
|
|
}
|
|
|
|
private load(): GameEntry[] {
|
|
try {
|
|
const raw = localStorage.getItem(STORAGE_KEY);
|
|
return raw ? (JSON.parse(raw) as GameEntry[]) : [];
|
|
} catch {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
private save(entries: GameEntry[]): void {
|
|
localStorage.setItem(STORAGE_KEY, JSON.stringify(entries));
|
|
}
|
|
}
|