diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/addusedtime.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/addusedtime.ts index a8dd8e2..54776b6 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/addusedtime.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/addusedtime.ts @@ -26,6 +26,9 @@ export const getRoundedTimestamp = () => { return now - (now % (1000 * 60 * 60 * 24 * 2 /* 2 days */)) } +const dayLengthInMinutes = MinuteOfDay.LENGTH +const dayLengthInMs = dayLengthInMinutes * 1000 * 60 + export async function dispatchAddUsedTime ({ deviceId, action, cache }: { deviceId: string action: AddUsedTimeAction @@ -63,7 +66,7 @@ export async function dispatchAddUsedTime ({ deviceId, action, cache }: { if (action.timeToAdd !== 0) { // try to update first const [updatedRows] = await cache.database.usedTime.update({ - usedTime: Sequelize.literal(`usedTime + ${action.timeToAdd}`) as any, + usedTime: Sequelize.literal(`MAX(0, MIN(usedTime + ${action.timeToAdd}, ${dayLengthInMs}))`) as any, lastUpdate: roundedTimestamp }, { where: { @@ -82,7 +85,7 @@ export async function dispatchAddUsedTime ({ deviceId, action, cache }: { familyId: cache.familyId, categoryId: categoryId, dayOfEpoch: action.dayOfEpoch, - usedTime: action.timeToAdd, + usedTime: Math.min(action.timeToAdd, dayLengthInMs), lastUpdate: roundedTimestamp, startMinuteOfDay: MinuteOfDay.MIN, endMinuteOfDay: MinuteOfDay.MAX diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/addusedtime2.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/addusedtime2.ts index 76b6b53..2cc3233 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/addusedtime2.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/addusedtime2.ts @@ -64,9 +64,12 @@ export async function dispatchAddUsedTimeVersion2 ({ deviceId, action, cache }: // tslint:disable-next-line:no-inner-declarations async function handle (start: number, end: number) { + const lengthInMinutes = (end - start) + 1 + const lengthInMs = lengthInMinutes * 1000 * 60 + // try to update first const [updatedRows] = await cache.database.usedTime.update({ - usedTime: Sequelize.literal(`usedTime + ${item.timeToAdd}`) as any, + usedTime: Sequelize.literal(`MAX(0, MIN(usedTime + ${item.timeToAdd}, ${lengthInMs}))`) as any, lastUpdate: roundedTimestampForUsedTime }, { where: { @@ -85,7 +88,7 @@ export async function dispatchAddUsedTimeVersion2 ({ deviceId, action, cache }: familyId: cache.familyId, categoryId: item.categoryId, dayOfEpoch: action.dayOfEpoch, - usedTime: item.timeToAdd, + usedTime: Math.min(item.timeToAdd, lengthInMs), lastUpdate: roundedTimestampForUsedTime, startMinuteOfDay: start, endMinuteOfDay: end