/**
* Class to handle user data access operations using localStorage.
*/
class UserDataAccess {
/**
* Private instance variable to store dummy data.
* @type {Array<Object>}
* @private
*/
#dummyData = [
{id: 1, firstName: "Jane", lastName: "Doe", email: "jdoe@acme.com"},
{id: 2, firstName: "Tony", lastName: "Thompsom", email: "tony@acme.com"},
{id: 3, firstName: "Jesse", lastName: "Jones", email: "jesse@acme.com"}
];
/**
* Constructor initializes the localStorage with dummy data if not already set.
*/
constructor() {
if (!localStorage.getItem("userData")) {
localStorage.setItem("userData", JSON.stringify(this.#dummyData));
}
}
/**
* Get all users from localStorage.
* @returns {Array<Object>} Array of user objects.
*/
getAllUsers() {
const str = localStorage.getItem("userData");
const users = JSON.parse(str);
return users;
}
/**
* Get a user by their ID.
* @param {number} id - The ID of the user to retrieve.
* @returns {Object} User object with the specified ID.
*/
getUserById(id) {
const str = localStorage.getItem("userData");
const users = JSON.parse(str);
const user = users.find((u) => u.id === id);
return user;
}
/**
* Insert a new user into localStorage.
* @param {Object} newUser - The new user object to insert.
*/
insertUser(newUser) {
newUser.id = this.#getMaxId() + 1;
const str = localStorage.getItem("userData");
const users = JSON.parse(str);
users.push(newUser);
localStorage.setItem("userData", JSON.stringify(users));
}
/**
* Update an existing user in localStorage.
* @param {Object} updatedUser - The updated user object.
*/
updateUser(updatedUser) {
const str = localStorage.getItem("userData");
const users = JSON.parse(str);
const indexOfUserToUpdate = users.findIndex(u => updatedUser.id === u.id);
users[indexOfUserToUpdate] = updatedUser;
localStorage.setItem("userData", JSON.stringify(users));
}
/**
* Delete a user from localStorage by their ID.
* @param {number} id - The ID of the user to delete.
*/
deleteUser(id) {
const str = localStorage.getItem("userData");
const users = JSON.parse(str);
const indexOfUserToRemove = users.findIndex(u => id === u.id);
users.splice(indexOfUserToRemove, 1);
localStorage.setItem("userData", JSON.stringify(users));
}
/**
* Private method to get the maximum user ID in the localStorage data.
* @returns {number} The maximum user ID.
* @private
*/
#getMaxId() {
const str = localStorage.getItem("userData");
const users = JSON.parse(str);
let maxId = 0;
for (let x = 0; x < users.length; x++) {
if (users[x].id > maxId) {
maxId = users[x].id;
}
}
return maxId;
}
}