mirror of
https://codeberg.org/timelimit/timelimit-server.git
synced 2025-10-03 09:49:32 +02:00
Fix granting extra time for another day after task completion
This commit is contained in:
parent
54faa8cef3
commit
48d7d83db3
11 changed files with 123 additions and 12 deletions
|
@ -640,6 +640,9 @@
|
|||
},
|
||||
"time": {
|
||||
"type": "number"
|
||||
},
|
||||
"day": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
|
|
|
@ -54,10 +54,14 @@
|
|||
},
|
||||
"message": {
|
||||
"type": "string"
|
||||
},
|
||||
"apiLevel": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"apiLevel",
|
||||
"fullVersion"
|
||||
],
|
||||
"definitions": {
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
# Untitled number in SerializedParentAction Schema
|
||||
|
||||
```txt
|
||||
https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/day
|
||||
```
|
||||
|
||||
|
||||
|
||||
| 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") |
|
||||
|
||||
## day Type
|
||||
|
||||
`number`
|
|
@ -22,6 +22,7 @@ https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTa
|
|||
| [taskId](#taskid) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-taskid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/taskId") |
|
||||
| [ok](#ok) | `boolean` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-ok.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/ok") |
|
||||
| [time](#time) | `number` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-time.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/time") |
|
||||
| [day](#day) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-day.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/day") |
|
||||
|
||||
## type
|
||||
|
||||
|
@ -102,3 +103,21 @@ https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTa
|
|||
### time Type
|
||||
|
||||
`number`
|
||||
|
||||
## day
|
||||
|
||||
|
||||
|
||||
`day`
|
||||
|
||||
* is optional
|
||||
|
||||
* Type: `number`
|
||||
|
||||
* cannot be null
|
||||
|
||||
* defined in: [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-day.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/day")
|
||||
|
||||
### day Type
|
||||
|
||||
`number`
|
||||
|
|
|
@ -1791,6 +1791,7 @@ Reference this group by using
|
|||
| [taskId](#taskid-1) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-taskid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/taskId") |
|
||||
| [ok](#ok) | `boolean` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-ok.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/ok") |
|
||||
| [time](#time-1) | `number` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-time.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/time") |
|
||||
| [day](#day-1) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-day.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/day") |
|
||||
|
||||
### type
|
||||
|
||||
|
@ -1872,6 +1873,24 @@ Reference this group by using
|
|||
|
||||
`number`
|
||||
|
||||
### day
|
||||
|
||||
|
||||
|
||||
`day`
|
||||
|
||||
* is optional
|
||||
|
||||
* Type: `number`
|
||||
|
||||
* cannot be null
|
||||
|
||||
* defined in: [SerializedParentAction](serializedparentaction-definitions-serializedreviewchildtaskaction-properties-day.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedReviewChildTaskAction/properties/day")
|
||||
|
||||
#### day Type
|
||||
|
||||
`number`
|
||||
|
||||
## Definitions group SerializedSetCategoryExtraTimeAction
|
||||
|
||||
Reference this group by using
|
||||
|
@ -1885,7 +1904,7 @@ Reference this group by using
|
|||
| [type](#type-16) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedsetcategoryextratimeaction-properties-type.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedSetCategoryExtraTimeAction/properties/type") |
|
||||
| [categoryId](#categoryid-8) | `string` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedsetcategoryextratimeaction-properties-categoryid.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedSetCategoryExtraTimeAction/properties/categoryId") |
|
||||
| [newExtraTime](#newextratime) | `number` | Required | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedsetcategoryextratimeaction-properties-newextratime.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedSetCategoryExtraTimeAction/properties/newExtraTime") |
|
||||
| [day](#day-1) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedsetcategoryextratimeaction-properties-day.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedSetCategoryExtraTimeAction/properties/day") |
|
||||
| [day](#day-2) | `number` | Optional | cannot be null | [SerializedParentAction](serializedparentaction-definitions-serializedsetcategoryextratimeaction-properties-day.md "https://timelimit.io/SerializedParentAction#/definitions/SerializedSetCategoryExtraTimeAction/properties/day") |
|
||||
|
||||
### type
|
||||
|
||||
|
|
15
docs/schema/serverdatastatus-properties-apilevel.md
Normal file
15
docs/schema/serverdatastatus-properties-apilevel.md
Normal file
|
@ -0,0 +1,15 @@
|
|||
# Untitled number in ServerDataStatus Schema
|
||||
|
||||
```txt
|
||||
https://timelimit.io/ServerDataStatus#/properties/apiLevel
|
||||
```
|
||||
|
||||
|
||||
|
||||
| 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") |
|
||||
|
||||
## apiLevel Type
|
||||
|
||||
`number`
|
|
@ -29,6 +29,7 @@ https://timelimit.io/ServerDataStatus
|
|||
| [users](#users) | `object` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-definitions-serveruserlist.md "https://timelimit.io/ServerDataStatus#/properties/users") |
|
||||
| [fullVersion](#fullversion) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-properties-fullversion.md "https://timelimit.io/ServerDataStatus#/properties/fullVersion") |
|
||||
| [message](#message) | `string` | Optional | cannot be null | [ServerDataStatus](serverdatastatus-properties-message.md "https://timelimit.io/ServerDataStatus#/properties/message") |
|
||||
| [apiLevel](#apilevel) | `number` | Required | cannot be null | [ServerDataStatus](serverdatastatus-properties-apilevel.md "https://timelimit.io/ServerDataStatus#/properties/apiLevel") |
|
||||
|
||||
## devices
|
||||
|
||||
|
@ -228,6 +229,24 @@ https://timelimit.io/ServerDataStatus
|
|||
|
||||
`string`
|
||||
|
||||
## apiLevel
|
||||
|
||||
|
||||
|
||||
`apiLevel`
|
||||
|
||||
* is required
|
||||
|
||||
* Type: `number`
|
||||
|
||||
* cannot be null
|
||||
|
||||
* defined in: [ServerDataStatus](serverdatastatus-properties-apilevel.md "https://timelimit.io/ServerDataStatus#/properties/apiLevel")
|
||||
|
||||
### apiLevel Type
|
||||
|
||||
`number`
|
||||
|
||||
# ServerDataStatus Definitions
|
||||
|
||||
## Definitions group ServerDeviceList
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* server component for the TimeLimit App
|
||||
* Copyright (C) 2019 - 2020 Jonas Lochmann
|
||||
* Copyright (C) 2019 - 2022 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
|
||||
|
@ -24,11 +24,13 @@ export class ReviewChildTaskAction extends ParentAction {
|
|||
readonly taskId: string
|
||||
readonly ok: boolean
|
||||
readonly time: number
|
||||
readonly day?: number
|
||||
|
||||
constructor ({ taskId, ok, time }: {
|
||||
constructor ({ taskId, ok, time, day }: {
|
||||
taskId: string
|
||||
ok: boolean
|
||||
time: number
|
||||
day?: number
|
||||
}) {
|
||||
super()
|
||||
|
||||
|
@ -39,13 +41,22 @@ export class ReviewChildTaskAction extends ParentAction {
|
|||
throwOutOfRange({ actionType, field: 'time', value: time })
|
||||
}
|
||||
|
||||
if (day !== undefined) {
|
||||
assertSafeInteger({ actionType, field: 'day', value: day })
|
||||
|
||||
if (day < 0) {
|
||||
throwOutOfRange({ actionType, field: 'day', value: day })
|
||||
}
|
||||
}
|
||||
|
||||
this.taskId = taskId
|
||||
this.ok = ok
|
||||
this.time = time
|
||||
this.day = day
|
||||
}
|
||||
|
||||
static parse = ({ taskId, ok, time }: SerializedReviewChildTaskAction) => (
|
||||
new ReviewChildTaskAction({ taskId, ok, time })
|
||||
static parse = ({ taskId, ok, time, day }: SerializedReviewChildTaskAction) => (
|
||||
new ReviewChildTaskAction({ taskId, ok, time, day })
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -54,4 +65,5 @@ export interface SerializedReviewChildTaskAction {
|
|||
taskId: string
|
||||
ok: boolean
|
||||
time: number
|
||||
day?: number
|
||||
}
|
||||
|
|
|
@ -589,6 +589,9 @@ const definitions = {
|
|||
},
|
||||
"time": {
|
||||
"type": "number"
|
||||
},
|
||||
"day": {
|
||||
"type": "number"
|
||||
}
|
||||
},
|
||||
"additionalProperties": false,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* server component for the TimeLimit App
|
||||
* Copyright (C) 2019 - 2020 Jonas Lochmann
|
||||
* Copyright (C) 2019 - 2022 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
|
||||
|
@ -60,10 +60,13 @@ export async function dispatchReviewChildTaskAction ({ action, cache }: {
|
|||
extraTimeDay: categoryInfoUnsafe.extraTimeDay
|
||||
}
|
||||
|
||||
if (categoryInfo.extraTimeDay !== 0 && categoryInfo.extraTimeInMillis > 0) {
|
||||
// if the current time is daily, then extend the daily time only
|
||||
const resetDayBoundExtraTime = categoryInfo.extraTimeDay !== -1 &&
|
||||
action.day !== undefined && categoryInfo.extraTimeDay !== action.day
|
||||
|
||||
if (resetDayBoundExtraTime) {
|
||||
await cache.database.category.update({
|
||||
extraTimeInMillis: categoryInfo.extraTimeInMillis + taskInfo.extraTimeDuration
|
||||
extraTimeInMillis: taskInfo.extraTimeDuration,
|
||||
extraTimeDay: -1
|
||||
}, {
|
||||
where: {
|
||||
familyId: cache.familyId,
|
||||
|
@ -73,8 +76,7 @@ export async function dispatchReviewChildTaskAction ({ action, cache }: {
|
|||
})
|
||||
} else {
|
||||
await cache.database.category.update({
|
||||
extraTimeInMillis: categoryInfo.extraTimeInMillis + taskInfo.extraTimeDuration,
|
||||
extraTimeDay: -1
|
||||
extraTimeInMillis: categoryInfo.extraTimeInMillis + taskInfo.extraTimeDuration
|
||||
}, {
|
||||
where: {
|
||||
familyId: cache.familyId,
|
||||
|
|
|
@ -44,7 +44,7 @@ export const generateServerDataStatus = async ({ database, clientStatus, familyI
|
|||
familyEntry.hasFullVersion ? parseInt(familyEntry.fullVersionUntil, 10) : 0
|
||||
),
|
||||
message: await getStatusMessage({ database, transaction }) || undefined,
|
||||
apiLevel: 1
|
||||
apiLevel: 2
|
||||
}
|
||||
|
||||
if (familyEntry.deviceListVersion !== clientStatus.devices) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue