Source: userDataAccess.js

/**
 * 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;
    }
}