authService.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { GreenPage } from '../types';
  2. import { createEmptyPage, createNewPage } from './mockDataService';
  3. const USERS_KEY = 'greenpage_users';
  4. const CURRENT_USER_KEY = 'greenpage_currentUser';
  5. // Simulate a database
  6. const getDb = () => {
  7. try {
  8. const db = localStorage.getItem(USERS_KEY);
  9. return db ? JSON.parse(db) : {};
  10. } catch (error) {
  11. console.error("Error reading from localStorage", error);
  12. return {};
  13. }
  14. };
  15. const saveDb = (db: any) => {
  16. try {
  17. localStorage.setItem(USERS_KEY, JSON.stringify(db));
  18. } catch (error) {
  19. console.error("Error writing to localStorage", error);
  20. }
  21. };
  22. export const authService = {
  23. register: (email: string, password: string): { success: boolean; message: string } => {
  24. const db = getDb();
  25. if (db[email]) {
  26. return { success: false, message: 'User with this email already exists.' };
  27. }
  28. const initialPage = createNewPage('My First Page');
  29. db[email] = { password, pages: [initialPage] };
  30. saveDb(db);
  31. authService.login(email, password);
  32. return { success: true, message: 'Registration successful.' };
  33. },
  34. login: (email: string, password: string): { success: boolean; message: string } => {
  35. const db = getDb();
  36. const user = db[email];
  37. if (user && user.password === password) {
  38. localStorage.setItem(CURRENT_USER_KEY, email);
  39. return { success: true, message: 'Login successful.' };
  40. }
  41. return { success: false, message: 'Invalid email or password.' };
  42. },
  43. logout: (): void => {
  44. localStorage.removeItem(CURRENT_USER_KEY);
  45. },
  46. getCurrentUser: (): string | null => {
  47. return localStorage.getItem(CURRENT_USER_KEY);
  48. },
  49. getUserPages: (): GreenPage[] | null => {
  50. const currentUser = authService.getCurrentUser();
  51. if (!currentUser) return null;
  52. const db = getDb();
  53. const user = db[currentUser];
  54. if (user && (!user.pages || user.pages.length === 0)) {
  55. const initialPage = createNewPage('My First Page');
  56. user.pages = [initialPage];
  57. saveDb(db);
  58. }
  59. return user ? user.pages : null;
  60. },
  61. saveUserPages: (pages: GreenPage[]): void => {
  62. const currentUser = authService.getCurrentUser();
  63. if (!currentUser) return;
  64. const db = getDb();
  65. if (db[currentUser]) {
  66. db[currentUser].pages = pages;
  67. saveDb(db);
  68. }
  69. },
  70. };