|
|
|
|
|
export type UserRole = "guardian" | "healer" |
|
|
|
export interface BaseUser { |
|
id: string |
|
type: UserRole |
|
fullName: string |
|
email: string |
|
registeredAt: string |
|
profileImage?: string | null |
|
} |
|
|
|
export interface Guardian extends BaseUser { |
|
type: "guardian" |
|
country: string |
|
contributionAmount: string |
|
currency: string |
|
paymentMethod: string |
|
motivation: string |
|
impact: { |
|
donationsCount: number |
|
totalDonated: number |
|
healthWorkersSupported: number |
|
} |
|
achievements?: Achievement[] |
|
} |
|
|
|
export interface Healer extends BaseUser { |
|
type: "healer" |
|
role: string |
|
specialization?: string |
|
region: string |
|
country: string |
|
city: string |
|
facilityName?: string |
|
experience: string |
|
credentials: string |
|
walletAddress?: string |
|
bio?: string |
|
faceVerified: boolean |
|
licenseVerified: boolean |
|
verificationStatus: "pending" | "verified" | "rejected" |
|
impact: { |
|
patientsServed: number |
|
communitiesReached: number |
|
donationsReceived: number |
|
} |
|
achievements?: Achievement[] |
|
} |
|
|
|
export interface Achievement { |
|
id: string |
|
title: string |
|
description: string |
|
icon: string |
|
awardedAt: string |
|
} |
|
|
|
export type User = Guardian | Healer |
|
|
|
|
|
export const UserDatabase = { |
|
|
|
getAllUsers: (): User[] => { |
|
if (typeof window === "undefined") return [] |
|
const users: User[] = [] |
|
for (let i = 0; i < localStorage.length; i++) { |
|
const key = localStorage.key(i) |
|
if (key && key.startsWith("flameborn_user_")) { |
|
try { |
|
const userData = JSON.parse(localStorage.getItem(key) || "") |
|
users.push(userData) |
|
} catch (error) { |
|
console.error("Error parsing user data from localStorage:", error) |
|
} |
|
} |
|
} |
|
return users |
|
}, |
|
|
|
|
|
getUserById: (id: string): User | null => { |
|
if (typeof window === "undefined") return null |
|
try { |
|
const userData = localStorage.getItem(`flameborn_user_${id}`) |
|
return userData ? JSON.parse(userData) : null |
|
} catch (error) { |
|
console.error("Error getting user by ID from localStorage:", error) |
|
return null |
|
} |
|
}, |
|
|
|
|
|
getCurrentUserId: (): string | null => { |
|
if (typeof window === "undefined") return null |
|
return localStorage.getItem("flameborn_current_user_id") |
|
}, |
|
|
|
|
|
getCurrentUser: (): User | null => { |
|
if (typeof window === "undefined") return null |
|
const currentUserId = UserDatabase.getCurrentUserId() |
|
if (!currentUserId) return null |
|
return UserDatabase.getUserById(currentUserId) |
|
}, |
|
|
|
|
|
setCurrentUserId: (id: string | null): void => { |
|
if (typeof window === "undefined") return |
|
if (id) { |
|
localStorage.setItem("flameborn_current_user_id", id) |
|
} else { |
|
localStorage.removeItem("flameborn_current_user_id") |
|
} |
|
}, |
|
|
|
|
|
saveUser: (user: User): boolean => { |
|
if (typeof window === "undefined") return false |
|
try { |
|
localStorage.setItem(`flameborn_user_${user.id}`, JSON.stringify(user)) |
|
return true |
|
} catch (error) { |
|
console.error("Error saving user to localStorage:", error) |
|
return false |
|
} |
|
}, |
|
|
|
|
|
updateUser: (id: string, updates: Partial<User>): User | null => { |
|
if (typeof window === "undefined") return null |
|
const user = UserDatabase.getUserById(id) |
|
if (!user) return null |
|
const updatedUser = { ...user, ...updates } |
|
UserDatabase.saveUser(updatedUser) |
|
|
|
return updatedUser |
|
}, |
|
|
|
|
|
deleteUser: (id: string): boolean => { |
|
if (typeof window === "undefined") return false |
|
try { |
|
localStorage.removeItem(`flameborn_user_${id}`) |
|
if (UserDatabase.getCurrentUserId() === id) { |
|
UserDatabase.setCurrentUserId(null) |
|
} |
|
return true |
|
} catch (error) { |
|
console.error("Error deleting user from localStorage:", error) |
|
return false |
|
} |
|
}, |
|
|
|
|
|
getAllHealers: (): Healer[] => { |
|
return UserDatabase.getAllUsers().filter((user) => user.type === "healer") as Healer[] |
|
}, |
|
|
|
|
|
getAllGuardians: (): Guardian[] => { |
|
return UserDatabase.getAllUsers().filter((user) => user.type === "guardian") as Guardian[] |
|
}, |
|
|
|
|
|
addAchievement: (userId: string, achievement: Achievement): User | null => { |
|
const user = UserDatabase.getUserById(userId) |
|
if (!user) return null |
|
const achievements = user.achievements || [] |
|
const updatedUser = { |
|
...user, |
|
achievements: [...achievements, achievement], |
|
} |
|
UserDatabase.saveUser(updatedUser) |
|
return updatedUser |
|
}, |
|
|
|
|
|
updateUserImpact: (userId: string, impact: Partial<Guardian["impact"] | Healer["impact"]>): User | null => { |
|
const user = UserDatabase.getUserById(userId) |
|
if (!user) return null |
|
const updatedUser = { |
|
...user, |
|
impact: { |
|
...user.impact, |
|
...impact, |
|
}, |
|
} |
|
UserDatabase.saveUser(updatedUser) |
|
return updatedUser |
|
}, |
|
|
|
|
|
verifyHealer: (healerId: string, verified: boolean): Healer | null => { |
|
const healer = UserDatabase.getUserById(healerId) as Healer | null |
|
if (!healer || healer.type !== "healer") return null |
|
const updatedHealer = { |
|
...healer, |
|
licenseVerified: verified, |
|
verificationStatus: verified ? "verified" : "rejected", |
|
} |
|
UserDatabase.saveUser(updatedHealer) |
|
return updatedHealer |
|
}, |
|
|
|
|
|
loginUser: (email: string ): User | null => { |
|
if (typeof window === "undefined") return null |
|
const users = UserDatabase.getAllUsers() |
|
const user = users.find((u) => u.email === email) |
|
|
|
if (user) { |
|
UserDatabase.setCurrentUserId(user.id) |
|
return user |
|
} |
|
return null |
|
}, |
|
|
|
|
|
logoutUser: (): void => { |
|
if (typeof window === "undefined") return |
|
UserDatabase.setCurrentUserId(null) |
|
}, |
|
} |
|
|