From 6518159069466270dfa5abbdcab5ccc495f42856 Mon Sep 17 00:00:00 2001 From: Jonas Lochmann Date: Mon, 31 Aug 2020 02:00:00 +0200 Subject: [PATCH] Fix adding time when not using sqlite --- src/database/index.ts | 4 +++- .../apply-actions/dispatch-app-logic-action/addusedtime.ts | 5 ++++- .../apply-actions/dispatch-app-logic-action/addusedtime2.ts | 5 ++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/database/index.ts b/src/database/index.ts index 9aaaec0..852af1f 100644 --- a/src/database/index.ts +++ b/src/database/index.ts @@ -56,6 +56,7 @@ export interface Database { user: UserModelStatic userLimitLoginCategory: UserLimitLoginCategoryModelStatic transaction: (autoCallback: (t: Sequelize.Transaction) => Promise) => Promise + dialect: string } const createDatabase = (sequelize: Sequelize.Sequelize): Database => ({ @@ -79,7 +80,8 @@ const createDatabase = (sequelize: Sequelize.Sequelize): Database => ({ userLimitLoginCategory: createUserLimitLoginCategoryModel(sequelize), transaction: (autoCallback: (transaction: Sequelize.Transaction) => Promise) => (sequelize.transaction({ isolationLevel: Sequelize.Transaction.ISOLATION_LEVELS.READ_COMMITTED - }, autoCallback) as any) as Promise + }, autoCallback) as any) as Promise, + dialect: sequelize.getDialect() }) export const sequelize = new Sequelize.Sequelize(process.env.DATABASE_URL || 'sqlite://test.db', { 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 54776b6..a7ceb91 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 @@ -64,9 +64,12 @@ export async function dispatchAddUsedTime ({ deviceId, action, cache }: { currentExtraTime: number }) => { if (action.timeToAdd !== 0) { + const maxOperator = cache.database.dialect === 'sqlite' ? 'MAX' : 'GREATEST' + const minOperator = cache.database.dialect === 'sqlite' ? 'MIN' : 'LEAST' + // try to update first const [updatedRows] = await cache.database.usedTime.update({ - usedTime: Sequelize.literal(`MAX(0, MIN(usedTime + ${action.timeToAdd}, ${dayLengthInMs}))`) as any, + usedTime: Sequelize.literal(`${maxOperator}(0, ${minOperator}(usedTime + ${action.timeToAdd}, ${dayLengthInMs}))`) as any, lastUpdate: roundedTimestamp }, { where: { 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 2cc3233..9f13263 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 @@ -67,9 +67,12 @@ export async function dispatchAddUsedTimeVersion2 ({ deviceId, action, cache }: const lengthInMinutes = (end - start) + 1 const lengthInMs = lengthInMinutes * 1000 * 60 + const maxOperator = cache.database.dialect === 'sqlite' ? 'MAX' : 'GREATEST' + const minOperator = cache.database.dialect === 'sqlite' ? 'MIN' : 'LEAST' + // try to update first const [updatedRows] = await cache.database.usedTime.update({ - usedTime: Sequelize.literal(`MAX(0, MIN(usedTime + ${item.timeToAdd}, ${lengthInMs}))`) as any, + usedTime: Sequelize.literal(`${maxOperator}(0, ${minOperator}(usedTime + ${item.timeToAdd}, ${lengthInMs}))`) as any, lastUpdate: roundedTimestampForUsedTime }, { where: {