90
services/storageService.ts
Normal file
90
services/storageService.ts
Normal file
@@ -0,0 +1,90 @@
|
||||
import { CalendarEvent, UserRole, AppSettings } from '../types';
|
||||
|
||||
const EVENTS_KEY = 'ourtime_events_v1';
|
||||
const SETTINGS_KEY = 'ourtime_settings_v1';
|
||||
|
||||
export const getStoredEvents = (): CalendarEvent[] => {
|
||||
try {
|
||||
const stored = localStorage.getItem(EVENTS_KEY);
|
||||
return stored ? JSON.parse(stored) : [];
|
||||
} catch (e) {
|
||||
console.error("Failed to load events", e);
|
||||
return [];
|
||||
}
|
||||
};
|
||||
|
||||
export const saveEvent = (event: CalendarEvent): CalendarEvent[] => {
|
||||
const events = getStoredEvents();
|
||||
// Check if update or new
|
||||
const index = events.findIndex(e => e.id === event.id);
|
||||
let newEvents;
|
||||
if (index >= 0) {
|
||||
newEvents = [...events];
|
||||
newEvents[index] = event;
|
||||
} else {
|
||||
newEvents = [...events, event];
|
||||
}
|
||||
|
||||
localStorage.setItem(EVENTS_KEY, JSON.stringify(newEvents));
|
||||
return newEvents;
|
||||
};
|
||||
|
||||
export const deleteEvent = (eventId: string): CalendarEvent[] => {
|
||||
const events = getStoredEvents();
|
||||
const newEvents = events.filter(e => e.id !== eventId);
|
||||
localStorage.setItem(EVENTS_KEY, JSON.stringify(newEvents));
|
||||
return newEvents;
|
||||
};
|
||||
|
||||
export const getSettings = (): AppSettings => {
|
||||
try {
|
||||
const stored = localStorage.getItem(SETTINGS_KEY);
|
||||
if (stored) return JSON.parse(stored);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
return {
|
||||
momColor: '#F472B6',
|
||||
dadColor: '#60A5FA',
|
||||
mcpServerUrl: 'http://192.168.1.100:8000/stream',
|
||||
enableMcp: false,
|
||||
aiProvider: 'gemini', // Default to Gemini for reliability, user can switch to Ollama
|
||||
ollamaUrl: 'http://localhost:11434',
|
||||
ollamaModel: 'llama3',
|
||||
momZodiac: 'Unknown',
|
||||
dadZodiac: 'Unknown',
|
||||
familiar: 'None'
|
||||
};
|
||||
};
|
||||
|
||||
export const saveSettings = (settings: AppSettings) => {
|
||||
localStorage.setItem(SETTINGS_KEY, JSON.stringify(settings));
|
||||
};
|
||||
|
||||
// Seed some initial data if empty for demo purposes
|
||||
export const seedInitialData = () => {
|
||||
if (!localStorage.getItem(EVENTS_KEY)) {
|
||||
const today = new Date();
|
||||
const initialEvents: CalendarEvent[] = [
|
||||
{
|
||||
id: '1',
|
||||
title: 'Date Night ❤️',
|
||||
startTime: new Date(today.getFullYear(), today.getMonth(), today.getDate() + 2, 19, 0).toISOString(),
|
||||
endTime: new Date(today.getFullYear(), today.getMonth(), today.getDate() + 2, 21, 0).toISOString(),
|
||||
createdBy: 'dad',
|
||||
category: 'date',
|
||||
description: 'Dinner at the Italian place',
|
||||
},
|
||||
{
|
||||
id: '2',
|
||||
title: 'Grocery Run',
|
||||
startTime: new Date(today.getFullYear(), today.getMonth(), today.getDate(), 10, 0).toISOString(),
|
||||
endTime: new Date(today.getFullYear(), today.getMonth(), today.getDate(), 11, 0).toISOString(),
|
||||
createdBy: 'mom',
|
||||
category: 'chore',
|
||||
description: 'Milk, Eggs, Bread',
|
||||
}
|
||||
];
|
||||
localStorage.setItem(EVENTS_KEY, JSON.stringify(initialEvents));
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user