mirror of
https://codeberg.org/timelimit/timelimit-server.git
synced 2026-08-31 19:03:45 +02:00
Add support for more limits
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
* server component for the TimeLimit App
|
||||
* Copyright (C) 2019 Jonas Lochmann
|
||||
* Copyright (C) 2019 - 2020 Jonas Lochmann
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
@@ -15,6 +15,7 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { MinuteOfDay } from '../util/minuteofday'
|
||||
import { assertIdWithinFamily } from '../util/token'
|
||||
|
||||
export class TimelimitRule {
|
||||
@@ -23,19 +24,34 @@ export class TimelimitRule {
|
||||
readonly maxTimeInMillis: number
|
||||
readonly dayMask: number // stored as bitmask
|
||||
readonly applyToExtraTimeUsage: boolean
|
||||
readonly start: number
|
||||
readonly end: number
|
||||
readonly sessionDurationMilliseconds: number
|
||||
readonly sessionPauseMilliseconds: number
|
||||
|
||||
constructor ({ ruleId, categoryId, maxTimeInMillis, dayMask, applyToExtraTimeUsage }: {
|
||||
constructor ({
|
||||
ruleId, categoryId, maxTimeInMillis, dayMask, applyToExtraTimeUsage,
|
||||
start, end, sessionDurationMilliseconds, sessionPauseMilliseconds
|
||||
}: {
|
||||
ruleId: string
|
||||
categoryId: string
|
||||
maxTimeInMillis: number
|
||||
dayMask: number
|
||||
applyToExtraTimeUsage: boolean
|
||||
start: number
|
||||
end: number
|
||||
sessionDurationMilliseconds: number
|
||||
sessionPauseMilliseconds: number
|
||||
}) {
|
||||
this.ruleId = ruleId
|
||||
this.categoryId = categoryId
|
||||
this.maxTimeInMillis = maxTimeInMillis
|
||||
this.dayMask = dayMask
|
||||
this.applyToExtraTimeUsage = applyToExtraTimeUsage
|
||||
this.start = start
|
||||
this.end = end
|
||||
this.sessionDurationMilliseconds = sessionDurationMilliseconds
|
||||
this.sessionPauseMilliseconds = sessionPauseMilliseconds
|
||||
|
||||
assertIdWithinFamily(ruleId)
|
||||
assertIdWithinFamily(categoryId)
|
||||
@@ -51,6 +67,23 @@ export class TimelimitRule {
|
||||
)) {
|
||||
throw new Error('invalid day mask')
|
||||
}
|
||||
|
||||
if (
|
||||
(!Number.isSafeInteger(start)) ||
|
||||
(!Number.isSafeInteger(end)) ||
|
||||
(!Number.isSafeInteger(sessionDurationMilliseconds)) ||
|
||||
(!Number.isSafeInteger(sessionPauseMilliseconds))
|
||||
) {
|
||||
throw new Error()
|
||||
}
|
||||
|
||||
if (start < MinuteOfDay.MIN || end > MinuteOfDay.MAX || start > end) {
|
||||
throw new Error()
|
||||
}
|
||||
|
||||
if (sessionDurationMilliseconds < 0 || sessionPauseMilliseconds < 0) {
|
||||
throw new Error()
|
||||
}
|
||||
}
|
||||
|
||||
serialize = (): SerializedTimeLimitRule => ({
|
||||
@@ -58,16 +91,24 @@ export class TimelimitRule {
|
||||
categoryId: this.categoryId,
|
||||
time: this.maxTimeInMillis,
|
||||
days: this.dayMask,
|
||||
extraTime: this.applyToExtraTimeUsage
|
||||
extraTime: this.applyToExtraTimeUsage,
|
||||
start: this.start,
|
||||
end: this.end,
|
||||
pause: this.sessionPauseMilliseconds,
|
||||
dur: this.sessionDurationMilliseconds
|
||||
})
|
||||
|
||||
static parse = ({ ruleId, categoryId, time, days, extraTime }: SerializedTimeLimitRule) => (
|
||||
static parse = ({ ruleId, categoryId, time, days, extraTime, start, end, dur, pause }: SerializedTimeLimitRule) => (
|
||||
new TimelimitRule({
|
||||
ruleId,
|
||||
categoryId,
|
||||
maxTimeInMillis: time,
|
||||
dayMask: days,
|
||||
applyToExtraTimeUsage: extraTime
|
||||
applyToExtraTimeUsage: extraTime,
|
||||
start: start ?? MinuteOfDay.MIN,
|
||||
end: end ?? MinuteOfDay.MAX,
|
||||
sessionDurationMilliseconds: dur ?? 0,
|
||||
sessionPauseMilliseconds: pause ?? 0
|
||||
})
|
||||
)
|
||||
}
|
||||
@@ -78,4 +119,8 @@ export interface SerializedTimeLimitRule {
|
||||
time: number
|
||||
days: number
|
||||
extraTime: boolean
|
||||
start?: number
|
||||
end?: number
|
||||
dur?: number
|
||||
pause?: number
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user