/**
* Class representing user data access operations using localStorage.
*/
class UserDataAccess {
/**
* Creates an instance of UserDataAccess.
* Initializes the localStorage database with dummy data if not present.
*/
constructor() {
// Wipe out the database before testing
localStorage.clear();
if (!localStorage.getItem("userData")) {
localStorage.setItem("userData", JSON.stringify(this.#dummyData));
}
}
/**
* Retrieves all users from the localStorage database.
* @returns {Array<Object>} An array of user objects.
*/
getAllUsers() {
const str = localStorage.getItem("userData");
return JSON.parse(str);
}
/**
* Retrieves a user by their ID.
* @param {number} id - The ID of the user.
* @returns {Object|null} The user object if found, otherwise null.
*/
getUserById(id) {
const str = localStorage.getItem("userData");
const users = JSON.parse(str);
return users.find((u) => u.id == id) || null;
}
/**
* Inserts a new user into the localStorage database.
* @param {Object} newUser - The new user object.
*/
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));
}
/**
* Updates an existing user in the localStorage database.
* @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);
if (indexOfUserToUpdate !== -1) {
users[indexOfUserToUpdate] = updatedUser;
localStorage.setItem("userData", JSON.stringify(users));
}
}
/**
* Deletes a user from the localStorage database.
* @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);
if (indexOfUserToRemove !== -1) {
users.splice(indexOfUserToRemove, 1);
localStorage.setItem("userData", JSON.stringify(users));
}
}
/**
* Retrieves the maximum user ID in the database.
* @returns {number} The maximum user ID.
* @private
*/
#getMaxId() {
const str = localStorage.getItem("userData");
const users = JSON.parse(str);
return users.reduce((max, user) => (user.id > max ? user.id : max), 0);
}
/**
* Dummy data used to populate the localStorage database initially.
* @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" }
];
}