Files
projectmycelium/src/static/js/user-database.js

160 lines
5.5 KiB
JavaScript

// User Database Simulation
// This file simulates a user database with realistic user profiles
class UserDatabase {
constructor() {
this.initializeUsers();
}
initializeUsers() {
// Initialize mock users if not already in session storage
if (!sessionStorage.getItem('userDatabase')) {
const mockUsers = [
{
id: 'user-001',
username: 'sara_resource_provider',
display_name: 'Sara Nicks',
email: 'user1@example.com',
password: 'password',
role: 'resource_provider',
location: 'Amsterdam, Netherlands',
joined_date: '2024-01-15',
reputation: 4.8,
verified: true,
stats: {
nodes_operated: 5,
total_uptime: 99.7,
earnings_total: 2450
}
},
{
id: 'user-002',
username: 'alex_dev',
display_name: 'Alex Thompson',
email: 'user2@example.com',
password: 'password',
role: 'app_provider',
location: 'Berlin, Germany',
joined_date: '2024-02-20',
reputation: 4.9,
verified: true,
stats: {
apps_published: 3,
total_deployments: 150,
revenue_total: 3200
}
},
{
id: 'user-003',
username: 'mike_consultant',
display_name: 'Mike Rodriguez',
email: 'user3@example.com',
password: 'password',
role: 'service_provider',
location: 'New York, USA',
joined_date: '2024-01-10',
reputation: 4.7,
verified: true,
stats: {
services_offered: 4,
clients_served: 25,
hours_completed: 340
}
},
{
id: 'user-004',
username: 'emma_security',
display_name: 'Emma Wilson',
email: 'user4@example.com',
password: 'password',
role: 'service_provider',
location: 'London, UK',
joined_date: '2024-03-05',
reputation: 4.8,
verified: true,
stats: {
services_offered: 2,
clients_served: 18,
hours_completed: 220
}
},
{
id: 'user-005',
username: 'jordan_multi',
display_name: 'Jordan Mitchell',
email: 'user5@example.com',
password: 'password',
role: 'multi', // Can be resource_provider, app_provider, service_provider, user
location: 'Toronto, Canada',
joined_date: new Date().toISOString().split('T')[0],
reputation: 5.0,
verified: true,
stats: {
nodes_operated: 2,
apps_published: 1,
services_offered: 1,
deployments: 5
}
}
];
sessionStorage.setItem('userDatabase', JSON.stringify(mockUsers));
}
}
getUser(userId) {
const users = JSON.parse(sessionStorage.getItem('userDatabase') || '[]');
return users.find(user => user.id === userId);
}
getUserByUsername(username) {
const users = JSON.parse(sessionStorage.getItem('userDatabase') || '[]');
return users.find(user => user.username === username);
}
getAllUsers() {
return JSON.parse(sessionStorage.getItem('userDatabase') || '[]');
}
updateUserStats(userId, statUpdates) {
const users = JSON.parse(sessionStorage.getItem('userDatabase') || '[]');
const userIndex = users.findIndex(user => user.id === userId);
if (userIndex !== -1) {
users[userIndex].stats = { ...users[userIndex].stats, ...statUpdates };
sessionStorage.setItem('userDatabase', JSON.stringify(users));
}
}
getCurrentUser() {
return this.getUser('user-005'); // Current user
}
getUsersByRole(role) {
const users = this.getAllUsers();
return users.filter(user => user.role === role || user.role === 'multi');
}
authenticateUser(email, password) {
const users = this.getAllUsers();
const user = users.find(user => user.email === email && user.password === password);
return user || null;
}
validateCredentials(email, password) {
return this.authenticateUser(email, password) !== null;
}
getUserByEmail(email) {
const users = this.getAllUsers();
return users.find(user => user.email === email);
}
}
// Initialize user database when script loads
const userDB = new UserDatabase();
// Export for use in other modules
if (typeof module !== 'undefined' && module.exports) {
module.exports = UserDatabase;
}