Files
Verso/services/web/app/src/Features/Cooldown/CooldownManager.mjs
T
Andrew RumbleandCopybot d748d8d606 Merge pull request #29795 from overleaf/ar-last-infrastructure-conversions
[web] last infrastructure conversions

GitOrigin-RevId: 68aa11625a9bc6d0d5324ecd95bb5ac52af8ee96
2025-11-27 09:05:30 +00:00

49 lines
1.2 KiB
JavaScript

import RedisWrapper from '../../infrastructure/RedisWrapper.mjs'
import logger from '@overleaf/logger'
import { promisify } from '@overleaf/promise-utils'
const rclient = RedisWrapper.client('cooldown')
const COOLDOWN_IN_SECONDS = 60 * 10
const CooldownManager = {
_buildKey(projectId) {
return `Cooldown:{${projectId}}`
},
putProjectOnCooldown(projectId, callback) {
if (callback == null) {
callback = function () {}
}
logger.debug(
{ projectId },
`[Cooldown] putting project on cooldown for ${COOLDOWN_IN_SECONDS} seconds`
)
rclient.set(
CooldownManager._buildKey(projectId),
'1',
'EX',
COOLDOWN_IN_SECONDS,
callback
)
},
isProjectOnCooldown(projectId, callback) {
if (callback == null) {
callback = function () {}
}
rclient.get(CooldownManager._buildKey(projectId), function (err, result) {
if (err != null) {
return callback(err)
}
return callback(null, result === '1')
})
},
}
CooldownManager.promises = {
putProjectOnCooldown: promisify(CooldownManager.putProjectOnCooldown),
isProjectOnCooldown: promisify(CooldownManager.isProjectOnCooldown),
}
export default CooldownManager