mirror of
https://codeberg.org/timelimit/timelimit-server.git
synced 2026-08-31 19:03:45 +02:00
Fix adding time when not using sqlite
This commit is contained in:
@@ -56,6 +56,7 @@ export interface Database {
|
|||||||
user: UserModelStatic
|
user: UserModelStatic
|
||||||
userLimitLoginCategory: UserLimitLoginCategoryModelStatic
|
userLimitLoginCategory: UserLimitLoginCategoryModelStatic
|
||||||
transaction: <T> (autoCallback: (t: Sequelize.Transaction) => Promise<T>) => Promise<T>
|
transaction: <T> (autoCallback: (t: Sequelize.Transaction) => Promise<T>) => Promise<T>
|
||||||
|
dialect: string
|
||||||
}
|
}
|
||||||
|
|
||||||
const createDatabase = (sequelize: Sequelize.Sequelize): Database => ({
|
const createDatabase = (sequelize: Sequelize.Sequelize): Database => ({
|
||||||
@@ -79,7 +80,8 @@ const createDatabase = (sequelize: Sequelize.Sequelize): Database => ({
|
|||||||
userLimitLoginCategory: createUserLimitLoginCategoryModel(sequelize),
|
userLimitLoginCategory: createUserLimitLoginCategoryModel(sequelize),
|
||||||
transaction: <T> (autoCallback: (transaction: Sequelize.Transaction) => Promise<T>) => (sequelize.transaction({
|
transaction: <T> (autoCallback: (transaction: Sequelize.Transaction) => Promise<T>) => (sequelize.transaction({
|
||||||
isolationLevel: Sequelize.Transaction.ISOLATION_LEVELS.READ_COMMITTED
|
isolationLevel: Sequelize.Transaction.ISOLATION_LEVELS.READ_COMMITTED
|
||||||
}, autoCallback) as any) as Promise<T>
|
}, autoCallback) as any) as Promise<T>,
|
||||||
|
dialect: sequelize.getDialect()
|
||||||
})
|
})
|
||||||
|
|
||||||
export const sequelize = new Sequelize.Sequelize(process.env.DATABASE_URL || 'sqlite://test.db', {
|
export const sequelize = new Sequelize.Sequelize(process.env.DATABASE_URL || 'sqlite://test.db', {
|
||||||
|
|||||||
@@ -64,9 +64,12 @@ export async function dispatchAddUsedTime ({ deviceId, action, cache }: {
|
|||||||
currentExtraTime: number
|
currentExtraTime: number
|
||||||
}) => {
|
}) => {
|
||||||
if (action.timeToAdd !== 0) {
|
if (action.timeToAdd !== 0) {
|
||||||
|
const maxOperator = cache.database.dialect === 'sqlite' ? 'MAX' : 'GREATEST'
|
||||||
|
const minOperator = cache.database.dialect === 'sqlite' ? 'MIN' : 'LEAST'
|
||||||
|
|
||||||
// try to update first
|
// try to update first
|
||||||
const [updatedRows] = await cache.database.usedTime.update({
|
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
|
lastUpdate: roundedTimestamp
|
||||||
}, {
|
}, {
|
||||||
where: {
|
where: {
|
||||||
|
|||||||
@@ -67,9 +67,12 @@ export async function dispatchAddUsedTimeVersion2 ({ deviceId, action, cache }:
|
|||||||
const lengthInMinutes = (end - start) + 1
|
const lengthInMinutes = (end - start) + 1
|
||||||
const lengthInMs = lengthInMinutes * 1000 * 60
|
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
|
// try to update first
|
||||||
const [updatedRows] = await cache.database.usedTime.update({
|
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
|
lastUpdate: roundedTimestampForUsedTime
|
||||||
}, {
|
}, {
|
||||||
where: {
|
where: {
|
||||||
|
|||||||
Reference in New Issue
Block a user