backend-storage_accomplishments-api.js
/**
* Class LocalStorageAccomplishmentsApi for creating, reading, updating and deleting accomplishments
* @class
*/
export default class LocalStorageAccomplishmentsApi {
/**
* Gets all accomplishments from LocalStorage
* @returns {AccomplishmentsObj[]} array of accoplishment objects
*/
static getAllAccomplishmentsObj() {
try {
const Accomplishments =
JSON.parse(localStorage.getItem("Accomplishments")) || [];
return Accomplishments;
} catch (error) {
console.warn(error);
console.warn("Returning Empty List");
return [];
}
}
/**
* Creates a new accomplishments object in LocalStorage
* @param {AccomplishmentsObj} accomplishmentsObj accomplishments object
* @throws {Error} could not create accomplishments object due to date already existing
*/
static createAccomplishmentsObj(accomplishmentsObj) {
const Accomplishments = this.getAllAccomplishmentsObj();
const existingAccomplishmentsObj = Accomplishments.find(
(object) => object.id === accomplishmentsObj.id
);
if (existingAccomplishmentsObj) {
throw new Error(
"Could not create accomplishments object, object with date already exists:",
accomplishmentsObj.id
);
}
Accomplishments.push(accomplishmentsObj);
localStorage.setItem(
"Accomplishments",
JSON.stringify(Accomplishments)
);
}
/**
* Updates an accomplishmentsObj in LocalStorage
* @param {AccomplishmentsObj} accomplishmentsObj accomplishments object
* @throws {Error} could not update accomplishments object due to object date not found
*/
static updateAccomplishmentsObj(accomplishmentsObj) {
const Accomplishments = this.getAllAccomplishmentsObj();
const existingAccomplishmentsObj = Accomplishments.find(
(object) => object.id === accomplishmentsObj.id
);
if (!existingAccomplishmentsObj) {
throw new Error(
"Could not update accomplishments object, object for date not found:",
accomplishmentsObj.id
);
}
existingAccomplishmentsObj.content = accomplishmentsObj.content;
localStorage.setItem(
"Accomplishments",
JSON.stringify(Accomplishments)
);
}
/**
* Gets an accomplishmentsObj from LocalStorage by date
* @param {Date} date date ojbect (new Date(Year, Month, Day))
* @throws {Error} accomplishments object not found for date if it doesn't exist
* @returns {AccomplishmentsObj} accomplishments object
*/
static getAccomplishmentsObjByDate(date) {
date = this._handleDateInput(date);
const Accomplishments = this.getAllAccomplishmentsObj();
const accomplishmentsObj = Accomplishments.find(
(object) => object.id === date.getTime()
);
if (!accomplishmentsObj) {
throw new Error(
"Accomplishments object not found for date",
date.toLocaleDateString("en-US")
);
}
return accomplishmentsObj;
}
/**
* Checks if an accomplishments object exists in localStorage by date
* @param {Date} date date object (new Date(Year, Month, Day))
* @returns {Boolean} true if accomplishments object exists, false if it doesn't exist
*/
static hasAccomplishmentsObjByDate(date) {
date = this._handleDateInput(date);
const Accomplishments = this.getAllAccomplishmentsObj();
const accomplishmentsObj = Accomplishments.find(
(object) => object.id === date.getTime()
);
if (!accomplishmentsObj) {
return false;
}
return true;
}
/**
* Deletes an accomplishments object from localStorage
* @param {Date} date date object (new Date(Year, Month, Day))
* @throws {Error} could not delete accomplishments object due to date not found
*/
static deleteAccomplishmentsObj(date) {
date = this._handleDateInput(date);
const Accomplishments = this.getAllAccomplishmentsObj();
const notDeletedAccomplishments = Accomplishments.filter(
(object) => object.id !== date.getTime()
);
if (notDeletedAccomplishments.length === Accomplishments.length) {
throw new Error(
"Could not delete accomplishments object, object not found for date:",
date.toLocaleDateString("en-US")
);
}
localStorage.setItem(
"Accomplishments",
JSON.stringify(notDeletedAccomplishments)
);
}
/**
* Turn a date object into a new date object that only contains year, month, date
* @param {Date} date date object (new Date(Year, Month, Day))
* @returns {Date} returns a new date object with same Year, Month, Date
*/
static _handleDateInput(date) {
// make sure hours, minutes, seconds, miliseconds aren't taken into account
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
}
}