Skip to content

Commit

Permalink
tested solution, refactored update item and added a helper function t…
Browse files Browse the repository at this point in the history
…o handle logic
  • Loading branch information
DevinaG007 committed Mar 8, 2024
1 parent aedea1d commit 98acfa1
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 26 deletions.
48 changes: 23 additions & 25 deletions src/api/firebase.js
Original file line number Diff line number Diff line change
Expand Up @@ -190,55 +190,53 @@ export async function addItem(listPath, { itemName, daysUntilNextPurchase }) {
return newItem;
}

//user marks item as purchased
export async function updateItem(listPath, itemID, isChecked) {
const listRef = doc(db, listPath, 'items', itemID);
// We need : today's date in MS, dateLastPurchased in MS, convert MS to # of days between, use to calculateEstimate
// const todaysDate = new Date();
//Helper function to handle estimation logic
async function handleCalculateEstimate(listRef) {
const selectedItem = await getDoc(listRef);

//access array of dateLastPurchased for the selected item
const selectedLastPurchase = selectedItem.data().dateLastPurchased;

//retrieve the most recent purchase date from the array and convert to a date
const lastPurchased =
selectedLastPurchase[selectedLastPurchase.length - 1].toDate();

//calculates the previously estimated days until next purchase
const previousEstimate = getDaysBetweenDates(
lastPurchased,
selectedItem.data().dateNextPurchased.toDate(),
);
let daysSincePrevPurchase = getDaysBetweenDates(lastPurchased, new Date());

//calculates a new estimate based on the previous estimate, days since last purchased, and total purchases
let newEstimate = calculateEstimate(
previousEstimate,
daysSincePrevPurchase,
selectedItem.data().totalPurchases,
);

return { newEstimate, selectedLastPurchase };
}

export async function updateItem(listPath, itemID, isChecked) {
const listRef = doc(db, listPath, 'items', itemID);

let { newEstimate, selectedLastPurchase } =
await handleCalculateEstimate(listRef);

//checks to see if checkbox is checked in front end, updates selected item
if (isChecked) {
await updateDoc(listRef, {
dateLastPurchased: [...selectedLastPurchase, new Date()],
dateNextPurchased: getFutureDate(
calculateEstimate(
previousEstimate,
daysSincePrevPurchase,
selectedItem.data().totalPurchases,
),
),
totalPurchases: isChecked ? increment(1) : increment(-1),
dateNextPurchased: getFutureDate(newEstimate),
totalPurchases: increment(1),
});
const updatedItem = await getDoc(listRef);

console.log(daysSincePrevPurchase + ' days since previous purchase');
console.log(
'estimated next purchase:',
updatedItem.data().dateNextPurchased.toDate(),
);
console.log(newEstimate);
} else {
selectedLastPurchase.pop();
await updateDoc(listRef, {
dateLastPurchased: [...selectedLastPurchase],
totalPurchases: isChecked ? increment(1) : increment(-1),
totalPurchases: increment(-1),
});
const updatedItem = await getDoc(listRef);

console.log(updatedItem.data());
}
}

Expand Down
1 change: 0 additions & 1 deletion src/utils/dates.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,5 @@ export function getDaysBetweenDates(firstDate, secondDate) {
const secondsBetween = secondTime - firstTime;
const daysBetween = secondsBetween / ONE_DAY_IN_MILLISECONDS;
// Round number here
console.log('days between, unrounded:', daysBetween);
return Math.round(daysBetween);
}

0 comments on commit 98acfa1

Please sign in to comment.