From 259c4d94a9bdf370e1207d3818355392c136230f Mon Sep 17 00:00:00 2001 From: Jonas Lochmann Date: Mon, 23 Nov 2020 01:00:00 +0100 Subject: [PATCH] Add support for rules per day --- .../schema/SerializedParentAction.schema.json | 6 +++ docs/schema/ServerDataStatus.schema.json | 4 ++ ...rializedtimelimitrule-properties-perday.md | 16 ++++++++ ...ion-definitions-serializedtimelimitrule.md | 17 +++++++++ ...tetimelimitruleaction-properties-perday.md | 16 ++++++++ ...ons-serializedupdatetimelimitruleaction.md | 17 +++++++++ docs/schema/serializedparentaction.md | 34 +++++++++++++++++ ...s-servertimelimitrule-properties-perday.md | 16 ++++++++ ...astatus-definitions-servertimelimitrule.md | 17 +++++++++ docs/schema/serverdatastatus.md | 17 +++++++++ src/action/updatetimelimitrule.ts | 12 ++++-- src/api/validator.ts | 10 +++++ .../migrations/20201123-add-per-day-rules.ts | 38 +++++++++++++++++++ src/database/timelimitrule.ts | 22 ++++++++++- .../createtimelimitrule.ts | 3 +- .../updatetimelimitrule.ts | 1 + .../get-server-data-status/category/rules.ts | 9 +++-- src/model/timelimitrule.ts | 12 ++++-- src/object/serverdatastatus.ts | 1 + 19 files changed, 256 insertions(+), 12 deletions(-) create mode 100644 docs/schema/serializedparentaction-definitions-serializedtimelimitrule-properties-perday.md create mode 100644 docs/schema/serializedparentaction-definitions-serializedupdatetimelimitruleaction-properties-perday.md create mode 100644 docs/schema/serverdatastatus-definitions-servertimelimitrule-properties-perday.md create mode 100644 src/database/migration/migrations/20201123-add-per-day-rules.ts diff --git a/docs/schema/SerializedParentAction.schema.json b/docs/schema/SerializedParentAction.schema.json index 536d614..ba05a46 100644 --- a/docs/schema/SerializedParentAction.schema.json +++ b/docs/schema/SerializedParentAction.schema.json @@ -371,6 +371,9 @@ }, "pause": { "type": "number" + }, + "perDay": { + "type": "boolean" } }, "additionalProperties": false, @@ -1380,6 +1383,9 @@ }, "pause": { "type": "number" + }, + "perDay": { + "type": "boolean" } }, "additionalProperties": false, diff --git a/docs/schema/ServerDataStatus.schema.json b/docs/schema/ServerDataStatus.schema.json index 121ca43..8f618ad 100644 --- a/docs/schema/ServerDataStatus.schema.json +++ b/docs/schema/ServerDataStatus.schema.json @@ -595,6 +595,9 @@ }, "pause": { "type": "number" + }, + "perDay": { + "type": "boolean" } }, "additionalProperties": false, @@ -605,6 +608,7 @@ "id", "maxTime", "pause", + "perDay", "session", "start" ], diff --git a/docs/schema/serializedparentaction-definitions-serializedtimelimitrule-properties-perday.md b/docs/schema/serializedparentaction-definitions-serializedtimelimitrule-properties-perday.md new file mode 100644 index 0000000..2fedab2 --- /dev/null +++ b/docs/schema/serializedparentaction-definitions-serializedtimelimitrule-properties-perday.md @@ -0,0 +1,16 @@ +# Untitled boolean in SerializedParentAction Schema + +```txt +https://timelimit.io/SerializedParentAction#/definitions/SerializedTimeLimitRule/properties/perDay +``` + + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") | + +## perDay Type + +`boolean` diff --git a/docs/schema/serializedparentaction-definitions-serializedtimelimitrule.md b/docs/schema/serializedparentaction-definitions-serializedtimelimitrule.md index ccea630..5bb4f1f 100644 --- a/docs/schema/serializedparentaction-definitions-serializedtimelimitrule.md +++ b/docs/schema/serializedparentaction-definitions-serializedtimelimitrule.md @@ -28,6 +28,7 @@ https://timelimit.io/SerializedParentAction#/definitions/SerializedTimeLimitRule | [end](#end) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedtimelimitrule-properties-end.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedTimeLimitRule/properties/end") | | [dur](#dur) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedtimelimitrule-properties-dur.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedTimeLimitRule/properties/dur") | | [pause](#pause) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedtimelimitrule-properties-pause.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedTimeLimitRule/properties/pause") | +| [perDay](#perDay) | `boolean` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedtimelimitrule-properties-perday.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedTimeLimitRule/properties/perDay") | ## ruleId @@ -172,3 +173,19 @@ https://timelimit.io/SerializedParentAction#/definitions/SerializedTimeLimitRule ### pause Type `number` + +## perDay + + + + +`perDay` + +- is optional +- Type: `boolean` +- cannot be null +- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedtimelimitrule-properties-perday.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedTimeLimitRule/properties/perDay") + +### perDay Type + +`boolean` diff --git a/docs/schema/serializedparentaction-definitions-serializedupdatetimelimitruleaction-properties-perday.md b/docs/schema/serializedparentaction-definitions-serializedupdatetimelimitruleaction-properties-perday.md new file mode 100644 index 0000000..7d5b7f0 --- /dev/null +++ b/docs/schema/serializedparentaction-definitions-serializedupdatetimelimitruleaction-properties-perday.md @@ -0,0 +1,16 @@ +# Untitled boolean in SerializedParentAction Schema + +```txt +https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateTimelimitRuleAction/properties/perDay +``` + + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [SerializedParentAction.schema.json\*](SerializedParentAction.schema.json "open original schema") | + +## perDay Type + +`boolean` diff --git a/docs/schema/serializedparentaction-definitions-serializedupdatetimelimitruleaction.md b/docs/schema/serializedparentaction-definitions-serializedupdatetimelimitruleaction.md index 9918d65..38de034 100644 --- a/docs/schema/serializedparentaction-definitions-serializedupdatetimelimitruleaction.md +++ b/docs/schema/serializedparentaction-definitions-serializedupdatetimelimitruleaction.md @@ -28,6 +28,7 @@ https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateTimelim | [end](#end) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatetimelimitruleaction-properties-end.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateTimelimitRuleAction/properties/end") | | [dur](#dur) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatetimelimitruleaction-properties-dur.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateTimelimitRuleAction/properties/dur") | | [pause](#pause) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatetimelimitruleaction-properties-pause.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateTimelimitRuleAction/properties/pause") | +| [perDay](#perDay) | `boolean` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatetimelimitruleaction-properties-perday.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateTimelimitRuleAction/properties/perDay") | ## type @@ -180,3 +181,19 @@ https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateTimelim ### pause Type `number` + +## perDay + + + + +`perDay` + +- is optional +- Type: `boolean` +- cannot be null +- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedupdatetimelimitruleaction-properties-perday.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateTimelimitRuleAction/properties/perDay") + +### perDay Type + +`boolean` diff --git a/docs/schema/serializedparentaction.md b/docs/schema/serializedparentaction.md index 1b52ae0..1f47ad0 100644 --- a/docs/schema/serializedparentaction.md +++ b/docs/schema/serializedparentaction.md @@ -696,6 +696,7 @@ Reference this group by using | [end](#end) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedtimelimitrule-properties-end.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedTimeLimitRule/properties/end") | | [dur](#dur) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedtimelimitrule-properties-dur.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedTimeLimitRule/properties/dur") | | [pause](#pause) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedtimelimitrule-properties-pause.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedTimeLimitRule/properties/pause") | +| [perDay](#perDay) | `boolean` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedtimelimitrule-properties-perday.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedTimeLimitRule/properties/perDay") | ### ruleId @@ -841,6 +842,22 @@ Reference this group by using `number` +### perDay + + + + +`perDay` + +- is optional +- Type: `boolean` +- cannot be null +- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedtimelimitrule-properties-perday.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedTimeLimitRule/properties/perDay") + +#### perDay Type + +`boolean` + ## Definitions group SerializedDeleteCategoryAction Reference this group by using @@ -3751,6 +3768,7 @@ Reference this group by using | [end](#end) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatetimelimitruleaction-properties-end.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateTimelimitRuleAction/properties/end") | | [dur](#dur) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatetimelimitruleaction-properties-dur.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateTimelimitRuleAction/properties/dur") | | [pause](#pause) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatetimelimitruleaction-properties-pause.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateTimelimitRuleAction/properties/pause") | +| [perDay](#perDay) | `boolean` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedupdatetimelimitruleaction-properties-perday.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateTimelimitRuleAction/properties/perDay") | ### type @@ -3904,6 +3922,22 @@ Reference this group by using `number` +### perDay + + + + +`perDay` + +- is optional +- Type: `boolean` +- cannot be null +- defined in: [SerializedParentAction](serializedparentaction-definitions-serializedupdatetimelimitruleaction-properties-perday.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedUpdateTimelimitRuleAction/properties/perDay") + +#### perDay Type + +`boolean` + ## Definitions group SerializedUpdateUserFlagsAction Reference this group by using diff --git a/docs/schema/serverdatastatus-definitions-servertimelimitrule-properties-perday.md b/docs/schema/serverdatastatus-definitions-servertimelimitrule-properties-perday.md new file mode 100644 index 0000000..5214f82 --- /dev/null +++ b/docs/schema/serverdatastatus-definitions-servertimelimitrule-properties-perday.md @@ -0,0 +1,16 @@ +# Untitled boolean in ServerDataStatus Schema + +```txt +https://timelimit.io/ServerDataStatus#/definitions/ServerTimeLimitRule/properties/perDay +``` + + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | ---------- | -------------- | ----------------------- | :---------------- | --------------------- | ------------------- | ------------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [ServerDataStatus.schema.json\*](ServerDataStatus.schema.json "open original schema") | + +## perDay Type + +`boolean` diff --git a/docs/schema/serverdatastatus-definitions-servertimelimitrule.md b/docs/schema/serverdatastatus-definitions-servertimelimitrule.md index 62c50cf..62bbdd2 100644 --- a/docs/schema/serverdatastatus-definitions-servertimelimitrule.md +++ b/docs/schema/serverdatastatus-definitions-servertimelimitrule.md @@ -27,6 +27,7 @@ https://timelimit.io/ServerDataStatus#/definitions/ServerTimeLimitRule | [end](#end) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-servertimelimitrule-properties-end.md "https://timelimit.io/ServerDataStatus#/definitions/ServerTimeLimitRule/properties/end") | | [session](#session) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-servertimelimitrule-properties-session.md "https://timelimit.io/ServerDataStatus#/definitions/ServerTimeLimitRule/properties/session") | | [pause](#pause) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-servertimelimitrule-properties-pause.md "https://timelimit.io/ServerDataStatus#/definitions/ServerTimeLimitRule/properties/pause") | +| [perDay](#perDay) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-servertimelimitrule-properties-perday.md "https://timelimit.io/ServerDataStatus#/definitions/ServerTimeLimitRule/properties/perDay") | ## id @@ -155,3 +156,19 @@ https://timelimit.io/ServerDataStatus#/definitions/ServerTimeLimitRule ### pause Type `number` + +## perDay + + + + +`perDay` + +- is required +- Type: `boolean` +- cannot be null +- defined in: [ServerDataStatus](serverdatastatus-definitions-servertimelimitrule-properties-perday.md "https://timelimit.io/ServerDataStatus#/definitions/ServerTimeLimitRule/properties/perDay") + +### perDay Type + +`boolean` diff --git a/docs/schema/serverdatastatus.md b/docs/schema/serverdatastatus.md index 8751380..c6ca4dd 100644 --- a/docs/schema/serverdatastatus.md +++ b/docs/schema/serverdatastatus.md @@ -1709,6 +1709,7 @@ Reference this group by using | [end](#end) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-servertimelimitrule-properties-end.md "https://timelimit.io/ServerDataStatus#/definitions/ServerTimeLimitRule/properties/end") | | [session](#session) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-servertimelimitrule-properties-session.md "https://timelimit.io/ServerDataStatus#/definitions/ServerTimeLimitRule/properties/session") | | [pause](#pause) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-servertimelimitrule-properties-pause.md "https://timelimit.io/ServerDataStatus#/definitions/ServerTimeLimitRule/properties/pause") | +| [perDay](#perDay) | `boolean` | Required | cannot be null | [ServerDataStatus](serverdatastatus-definitions-servertimelimitrule-properties-perday.md "https://timelimit.io/ServerDataStatus#/definitions/ServerTimeLimitRule/properties/perDay") | ### id @@ -1838,6 +1839,22 @@ Reference this group by using `number` +### perDay + + + + +`perDay` + +- is required +- Type: `boolean` +- cannot be null +- defined in: [ServerDataStatus](serverdatastatus-definitions-servertimelimitrule-properties-perday.md "https://timelimit.io/ServerDataStatus#/definitions/ServerTimeLimitRule/properties/perDay") + +#### perDay Type + +`boolean` + ## Definitions group ServerUpdatedCategoryTasks Reference this group by using diff --git a/src/action/updatetimelimitrule.ts b/src/action/updatetimelimitrule.ts index af8e1ed..6a582f6 100644 --- a/src/action/updatetimelimitrule.ts +++ b/src/action/updatetimelimitrule.ts @@ -31,10 +31,12 @@ export class UpdateTimelimitRuleAction extends ParentAction { readonly end: number readonly sessionDurationMilliseconds: number readonly sessionPauseMilliseconds: number + readonly perDay: boolean constructor ({ ruleId, maximumTimeInMillis, dayMask, applyToExtraTimeUsage, - start, end, sessionDurationMilliseconds, sessionPauseMilliseconds + start, end, sessionDurationMilliseconds, sessionPauseMilliseconds, + perDay }: { ruleId: string maximumTimeInMillis: number @@ -44,6 +46,7 @@ export class UpdateTimelimitRuleAction extends ParentAction { end: number sessionDurationMilliseconds: number sessionPauseMilliseconds: number + perDay: boolean }) { super() @@ -55,6 +58,7 @@ export class UpdateTimelimitRuleAction extends ParentAction { this.end = end this.sessionDurationMilliseconds = sessionDurationMilliseconds this.sessionPauseMilliseconds = sessionPauseMilliseconds + this.perDay = perDay assertIdWithinFamily({ actionType, field: 'ruleId', value: ruleId }) @@ -90,7 +94,7 @@ export class UpdateTimelimitRuleAction extends ParentAction { } } - static parse = ({ ruleId, time, days, extraTime, start, end, dur, pause }: SerializedUpdateTimelimitRuleAction) => ( + static parse = ({ ruleId, time, days, extraTime, start, end, dur, pause, perDay }: SerializedUpdateTimelimitRuleAction) => ( new UpdateTimelimitRuleAction({ ruleId, maximumTimeInMillis: time, @@ -99,7 +103,8 @@ export class UpdateTimelimitRuleAction extends ParentAction { start: start ?? MinuteOfDay.MIN, end: end ?? MinuteOfDay.MAX, sessionDurationMilliseconds: dur ?? 0, - sessionPauseMilliseconds: pause ?? 0 + sessionPauseMilliseconds: pause ?? 0, + perDay: perDay ?? false }) ) } @@ -114,4 +119,5 @@ export interface SerializedUpdateTimelimitRuleAction { end?: number dur?: number pause?: number + perDay?: boolean } diff --git a/src/api/validator.ts b/src/api/validator.ts index ee22472..3e204d8 100644 --- a/src/api/validator.ts +++ b/src/api/validator.ts @@ -330,6 +330,9 @@ const definitions = { }, "pause": { "type": "number" + }, + "perDay": { + "type": "boolean" } }, "additionalProperties": false, @@ -1300,6 +1303,9 @@ const definitions = { }, "pause": { "type": "number" + }, + "perDay": { + "type": "boolean" } }, "additionalProperties": false, @@ -2267,6 +2273,9 @@ const definitions = { }, "pause": { "type": "number" + }, + "perDay": { + "type": "boolean" } }, "additionalProperties": false, @@ -2277,6 +2286,7 @@ const definitions = { "id", "maxTime", "pause", + "perDay", "session", "start" ] diff --git a/src/database/migration/migrations/20201123-add-per-day-rules.ts b/src/database/migration/migrations/20201123-add-per-day-rules.ts new file mode 100644 index 0000000..44f26bb --- /dev/null +++ b/src/database/migration/migrations/20201123-add-per-day-rules.ts @@ -0,0 +1,38 @@ +/* + * server component for the TimeLimit App + * 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 + * published by the Free Software Foundation, version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import { QueryInterface, Sequelize, Transaction } from 'sequelize' +import { attributesVersion3 as ruleAttributes } from '../../timelimitrule' + +export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: Transaction.TYPES.EXCLUSIVE + }, async (transaction) => { + // timelimit rule table + await queryInterface.addColumn('TimelimitRules', 'perDay', { + ...ruleAttributes.perDay + }, { transaction }) + }) +} + +export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: Transaction.TYPES.EXCLUSIVE + }, async (transaction) => { + await queryInterface.removeColumn('TimelimitRules', 'perDay', { transaction }) + }) +} diff --git a/src/database/timelimitrule.ts b/src/database/timelimitrule.ts index fe16614..c31ca8e 100644 --- a/src/database/timelimitrule.ts +++ b/src/database/timelimitrule.ts @@ -37,7 +37,12 @@ interface TimelimitRuleAttributesVersion2 { sessionPauseMilliseconds: number } -type TimelimitRuleAttributes = TimelimitRuleAttributesVersion1 & TimelimitRuleAttributesVersion2 +interface TimelimitRuleAttributesVersion3 { + perDay: number +} + +type TimelimitRuleAttributes = TimelimitRuleAttributesVersion1 & + TimelimitRuleAttributesVersion2 & TimelimitRuleAttributesVersion3 export type TimelimitRuleModel = Sequelize.Model & TimelimitRuleAttributes export type TimelimitRuleModelStatic = typeof Sequelize.Model & { @@ -120,9 +125,22 @@ export const attributesVersion2: SequelizeAttributes = { + perDay: { + type: Sequelize.INTEGER, + validate: { + min: 0, + max: 1 + }, + allowNull: false, + defaultValue: 0 + } +} + export const attributes: SequelizeAttributes = { ...attributesVersion1, - ...attributesVersion2 + ...attributesVersion2, + ...attributesVersion3 } export const createTimelimitRuleModel = (sequelize: Sequelize.Sequelize): TimelimitRuleModelStatic => sequelize.define('TimelimitRule', attributes) as TimelimitRuleModelStatic diff --git a/src/function/sync/apply-actions/dispatch-parent-action/createtimelimitrule.ts b/src/function/sync/apply-actions/dispatch-parent-action/createtimelimitrule.ts index 9b6eb87..0d3bb5f 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/createtimelimitrule.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/createtimelimitrule.ts @@ -54,7 +54,8 @@ export async function dispatchCreateTimeLimitRule ({ action, cache, fromChildSel startMinuteOfDay: action.rule.start, endMinuteOfDay: action.rule.end, sessionDurationMilliseconds: action.rule.sessionDurationMilliseconds, - sessionPauseMilliseconds: action.rule.sessionPauseMilliseconds + sessionPauseMilliseconds: action.rule.sessionPauseMilliseconds, + perDay: action.rule.perDay ? 1 : 0 }, { transaction: cache.transaction }) cache.categoriesWithModifiedTimeLimitRules.add(action.rule.categoryId) diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updatetimelimitrule.ts b/src/function/sync/apply-actions/dispatch-parent-action/updatetimelimitrule.ts index 176958c..a96b86a 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatetimelimitrule.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatetimelimitrule.ts @@ -42,6 +42,7 @@ export async function dispatchUpdateTimelimitRule ({ action, cache }: { ruleEntry.endMinuteOfDay = action.end ruleEntry.sessionDurationMilliseconds = action.sessionDurationMilliseconds ruleEntry.sessionPauseMilliseconds = action.sessionPauseMilliseconds + ruleEntry.perDay = action.perDay ? 1 : 0 await ruleEntry.save({ transaction: cache.transaction }) diff --git a/src/function/sync/get-server-data-status/category/rules.ts b/src/function/sync/get-server-data-status/category/rules.ts index 393554a..263e01a 100644 --- a/src/function/sync/get-server-data-status/category/rules.ts +++ b/src/function/sync/get-server-data-status/category/rules.ts @@ -44,7 +44,8 @@ export async function getRules ({ database, transaction, categoryIdsToSyncRules, 'startMinuteOfDay', 'endMinuteOfDay', 'sessionDurationMilliseconds', - 'sessionPauseMilliseconds' + 'sessionPauseMilliseconds', + 'perDay' ], transaction })).map((item) => ({ @@ -56,7 +57,8 @@ export async function getRules ({ database, transaction, categoryIdsToSyncRules, startMinuteOfDay: item.startMinuteOfDay, endMinuteOfDay: item.endMinuteOfDay, sessionDurationMilliseconds: item.sessionDurationMilliseconds, - sessionPauseMilliseconds: item.sessionPauseMilliseconds + sessionPauseMilliseconds: item.sessionPauseMilliseconds, + perDay: item.perDay })) const getCategoryRulesVersion = (categoryId: string) => ( @@ -73,7 +75,8 @@ export async function getRules ({ database, transaction, categoryIdsToSyncRules, start: item.startMinuteOfDay, end: item.endMinuteOfDay, session: item.sessionDurationMilliseconds, - pause: item.sessionPauseMilliseconds + pause: item.sessionPauseMilliseconds, + perDay: item.perDay !== 0 ? true : false })), version: getCategoryRulesVersion(categoryId) })) diff --git a/src/model/timelimitrule.ts b/src/model/timelimitrule.ts index d82d627..f346dc5 100644 --- a/src/model/timelimitrule.ts +++ b/src/model/timelimitrule.ts @@ -28,10 +28,12 @@ export class TimelimitRule { readonly end: number readonly sessionDurationMilliseconds: number readonly sessionPauseMilliseconds: number + readonly perDay: boolean constructor ({ ruleId, categoryId, maxTimeInMillis, dayMask, applyToExtraTimeUsage, - start, end, sessionDurationMilliseconds, sessionPauseMilliseconds + start, end, sessionDurationMilliseconds, sessionPauseMilliseconds, + perDay }: { ruleId: string categoryId: string @@ -42,6 +44,7 @@ export class TimelimitRule { end: number sessionDurationMilliseconds: number sessionPauseMilliseconds: number + perDay: boolean }) { this.ruleId = ruleId this.categoryId = categoryId @@ -52,6 +55,7 @@ export class TimelimitRule { this.end = end this.sessionDurationMilliseconds = sessionDurationMilliseconds this.sessionPauseMilliseconds = sessionPauseMilliseconds + this.perDay = perDay assertIdWithinFamily(ruleId) assertIdWithinFamily(categoryId) @@ -98,7 +102,7 @@ export class TimelimitRule { dur: this.sessionDurationMilliseconds }) - static parse = ({ ruleId, categoryId, time, days, extraTime, start, end, dur, pause }: SerializedTimeLimitRule) => ( + static parse = ({ ruleId, categoryId, time, days, extraTime, start, end, dur, pause, perDay }: SerializedTimeLimitRule) => ( new TimelimitRule({ ruleId, categoryId, @@ -108,7 +112,8 @@ export class TimelimitRule { start: start ?? MinuteOfDay.MIN, end: end ?? MinuteOfDay.MAX, sessionDurationMilliseconds: dur ?? 0, - sessionPauseMilliseconds: pause ?? 0 + sessionPauseMilliseconds: pause ?? 0, + perDay: perDay ?? false }) ) } @@ -123,6 +128,7 @@ export interface SerializedTimeLimitRule { end?: number dur?: number pause?: number + perDay?: boolean } export class ParseTimeLimitRuleException extends Error {} diff --git a/src/object/serverdatastatus.ts b/src/object/serverdatastatus.ts index 8ddefc5..b650085 100644 --- a/src/object/serverdatastatus.ts +++ b/src/object/serverdatastatus.ts @@ -187,6 +187,7 @@ export interface ServerTimeLimitRule { end: number // endMinuteOfDay session: number // maximum session duration pause: number // session pause duration + perDay: boolean } export interface ServerUpdatedCategoryTasks {