78 lines
1.8 KiB
JavaScript
78 lines
1.8 KiB
JavaScript
const moment = require('moment-jalaali')
|
|
|
|
const BLOCK_THRESHOLD = 5
|
|
const BLOCK_DURATION_MS = 7 * 24 * 60 * 60 * 1000
|
|
|
|
const applyAutoBlockSuspension = (user) => {
|
|
if (user.blocked_by.length >= BLOCK_THRESHOLD) {
|
|
user.block_status = true
|
|
user.blocked_until = new Date(Date.now() + BLOCK_DURATION_MS)
|
|
}
|
|
}
|
|
|
|
const clearAutoBlockSuspension = (user) => {
|
|
if (user.blocked_by.length < BLOCK_THRESHOLD && user.blocked_until) {
|
|
user.block_status = null
|
|
user.blocked_until = null
|
|
}
|
|
}
|
|
|
|
const isUserCurrentlyBlocked = (user) => {
|
|
if (!user.block_status) {
|
|
return false
|
|
}
|
|
|
|
if (user.blocked_until) {
|
|
if (new Date() >= new Date(user.blocked_until)) {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
return user.block_status === true
|
|
}
|
|
|
|
const expireBlockSuspensionIfNeeded = async (user) => {
|
|
if (!user.blocked_until) {
|
|
return user
|
|
}
|
|
|
|
if (new Date() >= new Date(user.blocked_until)) {
|
|
user.block_status = null
|
|
user.blocked_until = null
|
|
await user.save()
|
|
}
|
|
|
|
return user
|
|
}
|
|
|
|
const getBlockedAccountResponse = (user) => {
|
|
if (!isUserCurrentlyBlocked(user)) {
|
|
return null
|
|
}
|
|
|
|
const untilText = user.blocked_until
|
|
? moment(user.blocked_until).format('jYYYY/jMM/jDD')
|
|
: null
|
|
|
|
return {
|
|
status: 'error',
|
|
code: 403,
|
|
message: untilText
|
|
? `حساب کاربری شما به دلیل بلاک شدن توسط ${BLOCK_THRESHOLD} کاربر تا تاریخ ${untilText} غیرفعال است.`
|
|
: 'حساب کاربری شما مسدود شده است، برای اطلاعات بیشتر با پشتیبانی تماس بگیرید!',
|
|
type: 'block',
|
|
blocked_until: user.blocked_until || null
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
BLOCK_THRESHOLD,
|
|
BLOCK_DURATION_MS,
|
|
applyAutoBlockSuspension,
|
|
clearAutoBlockSuspension,
|
|
isUserCurrentlyBlocked,
|
|
expireBlockSuspensionIfNeeded,
|
|
getBlockedAccountResponse
|
|
}
|