Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 42 additions & 3 deletions db/persist.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,52 @@ async function getItem(itemName, parse = false) {
try {
const data = await documentClient.get(params).promise()
console.log(`Getting '${itemName}'`)

return parse ? JSON.parse(data.Item[itemName]) : data.Item[itemName]
} catch (err) {
console.error(`Error getting db item: '${itemName}'`)
console.error(err)
return err
return null
}
}

/**
* Retrieves the settings for a given item name.
* create default db values for settings if they don't exist
* @param {string} itemName - The name of the item.
* @param {*} defaultVal - The default value to set if the item does not exist.
* @param {boolean} [parse=false] - Indicates whether to parse the retrieved item.
* @returns {Promise<*>} - The retrieved settings.
* @throws {Error} - If the item name is not provided.
*/
async function getSettings(itemName, defaultVal, parse = false) {
if(!itemName) throw new Error('Name is required');

let data;
try {
console.log(`Getting settings for '${itemName}'`)
data = await getItem(itemName, parse);
} catch (error) {
console.error(`Failed to get item: ${itemName}`, error);
return null
}

if (!data) {
console.log(`Creating default settings for '${itemName}'`)
let newData;
try {
await setItem(itemName, defaultVal)
newData = await getItem(itemName, parse)
} catch (error) {
console.error(`Failed to set item: ${itemName}`, error)
return null
}
return newData
}

return data
}

/**
* Instead of purpose written methods for each attribute, this generic wrapper
* uses the itemName to generate the appropriate `update` syntax.
Expand All @@ -61,7 +99,7 @@ async function setItem(itemName, data) {
}

try {
const data = await documentClient.update(params).promise()
await documentClient.update(params).promise()
console.log(`Attribute '${itemName}' Updated`)
} catch (err) {
console.error(`Error setting db item: '${itemName}'`)
Expand All @@ -72,5 +110,6 @@ async function setItem(itemName, data) {

module.exports = {
getItem,
setItem
setItem,
getSettings
}
6 changes: 3 additions & 3 deletions handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ async function initCache(sectionHandle) {
const onenote = await db.getItem('onenote', true)
localStorage.setItem('onenote', onenote)

const count = await db.getItem(`${sectionHandle}_section_count`)
const count = await db.getSettings(`${sectionHandle}_section_count`, "0")
localStorage.setItem(`${sectionHandle}_section_count`, count)

const lastPage = await db.getItem(`${sectionHandle}_last_page`)
const lastPage = await db.getSettings(`${sectionHandle}_last_page`, "-1")
localStorage.setItem(`${sectionHandle}_last_page`, lastPage)

const recent = (await db.getItem(`recent_${sectionHandle}`, true)) || []
const recent = (await db.getSettings(`recent_${sectionHandle}`, "[]", true))
localStorage.setItem(`recent_${sectionHandle}`, recent)

console.log('Restore localStorage')
Expand Down