Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
4b79f38
Prepare next release cycle
sauterl Jun 3, 2024
90de6eb
Bump braces from 3.0.2 to 3.0.3 in /frontend
dependabot[bot] Jun 19, 2024
ec4dbaf
Bump socket.io from 4.4.1 to 4.7.5 in /frontend
dependabot[bot] Jun 19, 2024
6d97eae
Reworked batch-add of targets and finally fixed a nasty bug which mad…
sauterl Jul 8, 2024
3c4cc4f
Changed evaluation template editor heading to template name
sauterl Jul 8, 2024
f1904c0
Updated backend dependecies where possible
sauterl Jul 8, 2024
9da69c3
Updates to jdk17, gradle 8.8, build file updates and corresponding ch…
sauterl Jul 8, 2024
0d2aece
Updating frontend
sauterl Jul 8, 2024
9f4705e
finished updates angular 16
sauterl Jul 8, 2024
1c53be8
Downgrade apexcharts for angular 17
sauterl Jul 8, 2024
c7c0aca
Angular 17 update step 1
sauterl Jul 8, 2024
ef42ab7
Angular 17 update step 2
sauterl Jul 8, 2024
7550a16
Finished frontend updates
sauterl Jul 9, 2024
d759f3d
Resolved merge conflicts
sauterl Jul 11, 2024
681685e
Merge pull request #482 from dres-dev/dependabot/npm_and_yarn/fronten…
sauterl Jul 11, 2024
c8cbf6a
Resolved merge conflicts
sauterl Jul 11, 2024
3621cbd
Merge pull request #481 from dres-dev/dependabot/npm_and_yarn/fronten…
sauterl Jul 11, 2024
da6869e
Fixed #475
sauterl Jul 11, 2024
3b64c56
Merge pull request #484 from dres-dev/feature/469-housekeeping--upgrades
sauterl Jul 11, 2024
fd5cd6d
Fixed #487
sauterl Jul 11, 2024
2802c5d
Resolved #480
sauterl Jul 12, 2024
157de77
Addressed @lucaro 's comments regarding priority-based dequeue of jud…
sauterl Jul 12, 2024
e033a43
#480 - Actually added higher value = higher priority
sauterl Jul 12, 2024
9480356
Cleanup #480: Explicitely added default priority also in interface
sauterl Jul 15, 2024
966f9d3
#467 Backend support for perpetual tasks
sauterl Jul 15, 2024
9059aeb
First draft #467 and tested in synchronous setting
sauterl Jul 16, 2024
08e1bdb
#467 Added necessary participant skip-task UI element for async case
sauterl Jul 17, 2024
2e09cfa
#467 Added perpetual support for KIS scoring
sauterl Jul 17, 2024
935ffe0
#467 Implemented new kis task scoring for perpetual tasks
sauterl Jul 17, 2024
16b075a
Added leaderboard component
Benyeemin Mar 4, 2026
4193c7d
Compact tiling + make leaderboard show everyone (scrollable for too m…
Benyeemin Mar 5, 2026
4fb9e0b
Merge pull request #490 from dres-dev/feature/467-perpetual-task
lucaro Mar 19, 2026
6821322
Recent submissions viewer
Benyeemin Mar 24, 2026
3c73623
Compact score graph
Benyeemin Mar 24, 2026
104fbf5
Fix viewer not displaying player correctness status
Benyeemin Mar 24, 2026
6324c56
Submissions show timestamp instead of redundant correctness
Benyeemin Mar 24, 2026
056ad75
Expand color palette
Benyeemin Mar 24, 2026
f6cfa9b
Add layout presets
Benyeemin Mar 24, 2026
ef2fce7
Add compile flag to disable popup errors blocking the screen
Benyeemin Mar 24, 2026
eab9114
Address review comments
Benyeemin Mar 26, 2026
fa81467
Layout preset typing
Benyeemin Mar 26, 2026
6fb9cb7
Fix menu naming to reflect usage
Benyeemin Mar 26, 2026
b6fcac0
Merge pull request #506 from Benyeemin/feature/compact-scoreboard
lucaro Mar 27, 2026
a6c1a2d
Issue 494: Required tag added to form
May 5, 2026
3881289
issue 502: Gathered team scores by correct team id and not index
May 5, 2026
8b13883
issue 502: added guarded to not just randomly delete last one if miss…
May 5, 2026
1fd06c5
Merge pull request #509 from Jackzzey/pr/issue-494-clean
lucaro May 8, 2026
acc4700
Angular 18 upgrade
Apr 29, 2026
f9aca0d
fixing styles.scss. making it up to date
Apr 29, 2026
fb05fff
fixing styles.scss. making it up to date
Apr 29, 2026
b205e62
Stable angular 18
Apr 30, 2026
b747123
angular 19
Apr 30, 2026
e3e9cd2
angular version 20
Apr 30, 2026
1cecf2d
angular version 20 stable version added back the qrcode
May 2, 2026
8d318df
Restore Angular 20 package.json versions after rebase conflict resolu…
May 8, 2026
6342840
Fixing some dependency errors
May 8, 2026
7a6f9f8
adding tests for removing tasktype taskgroup and tasks
May 8, 2026
e83a896
issue 493: db query was just calling name. made it call the specific …
May 7, 2026
66b0ed1
Remove accidentally added files
May 8, 2026
6492f5f
deleting unwanted files
May 7, 2026
0702f81
Revert TemplateManager changes, belongs in issue 493 PR
May 8, 2026
83e8f3b
Fix gitignore conflict
May 8, 2026
cd373c4
issue:495 changing sumbmissions from milliseconds to hh:mm:ss format …
May 12, 2026
7b3ce80
added clicking the progress bar to seek, toggle play with space bar a…
May 12, 2026
b82549b
Adding testing and fixed a bug if you left before closing intro dialog
May 12, 2026
32937c9
added table for the how many seconds aswell
May 12, 2026
08d3e85
changing seconds heading
May 12, 2026
3d7fd20
Merge pull request #510 from Jackzzey/pr/angular20-update
lucaro May 17, 2026
b4db6ae
Merge pull request #511 from Jackzzey/pr/issue-502
lucaro May 17, 2026
f721da7
Merge pull request #512 from Jackzzey/pr/issue-493
lucaro May 17, 2026
a18b1d8
Merge pull request #513 from Jackzzey/pr/issue-466
lucaro May 17, 2026
4ec2c80
Merge pull request #515 from Jackzzey/pr/issue-495-clean
lucaro May 17, 2026
4574998
Merge pull request #516 from Jackzzey/pr/issue-383
lucaro May 17, 2026
529bd3d
adding unit test for the submission filters of the submission endpoints
May 19, 2026
f200a65
Just had <= instead of >= so the filter was accepting submissions wit…
May 19, 2026
ed16b03
Adding integration tests for sync async and evaluation template building
May 19, 2026
b68f98d
Async tasks pass
May 19, 2026
e122889
vbs lsc perpetual async and sync done and passed and evulation templa…
May 19, 2026
ead6260
All the automated tests passed
May 19, 2026
75123e3
Fixed broken filter logic added tasksubmissioncounts
May 20, 2026
ba0a7f7
Merge pull request #517 from Jackzzey/pr/442
lucaro May 21, 2026
8f80c44
Deadlock issues cannot upgrade from a read lock to write lock
May 21, 2026
450fb78
Merge pull request #519 from Jackzzey/pr/439
lucaro May 22, 2026
2d7afa3
Merge pull request #518 from Jackzzey/pr/489
lucaro May 22, 2026
4869d9d
deletion was in wrong order
May 22, 2026
66e8c42
Added integration tests for proper deletion
May 22, 2026
64ceb4c
changes to gradle.properties so tests can run on jdk 17
May 22, 2026
19f43df
Merge pull request #520 from Jackzzey/pr/488
lucaro May 23, 2026
08604a5
Minor fix in frontend build
lucaro May 26, 2026
ff0ea36
Adding darkmode
May 26, 2026
6e8b256
defaulting darkmode
May 26, 2026
57ab02c
Merge pull request #521 from Jackzzey/pr/adding-darkmode
lucaro May 27, 2026
3a84eb1
Minor adjustment to theme color
lucaro May 27, 2026
0851ded
Implemented relevant improvements from #505
lucaro May 27, 2026
d8b9750
Prepare for v2.0.5
lucaro May 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ We provide a dedicated __client__ DRES OpenApi specifications for systems to be

## Requirements

To deploy and run DRES, a JRE of at least Java 11 is required, e.g. the [OpenJDK 11](https://jdk.java.net/java-se-ri/11).
To deploy and run DRES, a JRE of at least Java 17 is required, e.g. the [OpenJDK 17](https://jdk.java.net/java-se-ri/17).
For development, besides the JDK, addtitionally [NPM](https://www.npmjs.com/) and the [Angular CLI](https://cli.angular.io/) is recommended.

## Citation
Expand Down
15 changes: 9 additions & 6 deletions backend/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ apply plugin: 'kotlin-kapt'
apply plugin: 'idea'

mainClassName = 'dev.dres.DRES'
sourceCompatibility = 11
sourceCompatibility = 17

/* Configuration for frontend classpath files (see dependencies). */
configurations {
Expand All @@ -37,11 +37,11 @@ repositories {
}

compileKotlin {
kotlinOptions.jvmTarget = "11"
kotlinOptions.jvmTarget = "17"
compilerOptions.freeCompilerArgs.add("-Xcontext-receivers")
}
compileTestKotlin {
kotlinOptions.jvmTarget = "11"
kotlinOptions.jvmTarget = "17"
compilerOptions.freeCompilerArgs.add("-Xcontext-receivers")
}

Expand Down Expand Up @@ -105,18 +105,18 @@ dependencies {
testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: version_junit

///// Jackson / Kotlin
implementation group: 'com.fasterxml.jackson.module', name: 'jackson-module-kotlin', version: '2.13.0'
implementation group: 'com.fasterxml.jackson.module', name: 'jackson-module-kotlin', version: version_jackson_kotlin

///// Kotlin
implementation group: 'org.jetbrains.kotlin', name: 'kotlin-stdlib', version: version_kotlin
implementation group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: version_kotlin
implementation group: 'org.jetbrains.kotlinx', name:'kotlinx-serialization-json', version: '1.6.2'
implementation group: 'org.jetbrains.kotlinx', name:'kotlinx-serialization-json', version: version_kotlinx_serialization
}

kapt {
correctErrorTypes true
useBuildCache true
targetCompatibility = 11
targetCompatibility = 17
}


Expand Down Expand Up @@ -220,3 +220,6 @@ startScripts {
windowsScript.text = windowsScript.text.replaceAll('set CLASSPATH=.*', 'set CLASSPATH=.;%APP_HOME%/lib/*')
}
}

/* Exclude logback-classic. 8. July 2024: Leak comes from openapi-annotation */
configurations.all*.exclude module: "logback-classic"
2 changes: 1 addition & 1 deletion backend/src/main/kotlin/dev/dres/DRES.kt
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ import kotlin.system.exitProcess
*/
object DRES {
/** Version of DRES. */
const val VERSION = "2.0.4"
const val VERSION = "2.0.5"

/** Application root; should be relative to JAR file or classes path. */
val APPLICATION_ROOT: Path =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class DequeueJudgementHandler : AbstractJudgementHandler(),
private fun nextRequest(ctx: Context): ApiJudgementRequest? {
val evaluationManager = ctx.eligibleManagerForId<RunManager>()
checkEligibility(ctx, evaluationManager)
val validator = evaluationManager.judgementValidators.find { it.hasOpen } ?: return null
val validator = evaluationManager.judgementValidators.sortedBy { it.priority }.reversed().find { it.hasOpen } ?: return null
val next = validator.next() ?: return null
val taskDescription = validator.taskTemplate.textualDescription()
return ApiJudgementRequest(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class DequeueVoteHandler: AbstractJudgementHandler(), GetRestHandler<ApiJudgemen
fun nextRequest(ctx: Context): ApiJudgementRequest? { //TODO needs adjustment to deal with answerSets
val evaluationManager = ctx.eligibleManagerForId<RunManager>()

val validator = evaluationManager.judgementValidators.filterIsInstance<VoteValidator>().find { it.isActive } ?: return null
val validator = evaluationManager.judgementValidators.filterIsInstance<VoteValidator>().sortedBy { it.priority }.reversed().find { it.isActive } ?: return null
val next = validator.next()
?: /* No submission awaiting judgement */
return null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ data class ApiClientTaskTemplateInfo(
val name: String,
val taskGroup: String,
val taskType: String,
val duration: Long
val duration: Long?
) {
constructor(task: ApiTaskTemplate) : this(
task.name,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ data class ApiEvaluationState(
val taskId: String?,
val taskStatus: ApiTaskStatus,
val taskTemplateId: String?,
val timeLeft: Long,
val timeLeft: Long?,
val timeElapsed: Long
) {
constructor(run: InteractiveRunManager, context: RunActionContext) : this(
Expand All @@ -27,7 +27,7 @@ data class ApiEvaluationState(
run.currentTask(context)?.taskId,
run.currentTask(context)?.status ?: ApiTaskStatus.NO_TASK,
run.currentTaskTemplate(context).templateId,
run.timeLeft(context) / 1000,
run.timeLeft(context)?.div(1000),
run.timeElapsed(context) / 1000
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ data class ApiTaskOverview(
val name: String,
val type: String,
val group: String,
val duration: Long,
val duration: Long?,
val taskId: String,
val status: ApiTaskStatus,
val started: Long?,
Expand All @@ -24,4 +24,4 @@ data class ApiTaskOverview(
task.status,
task.started,
task.ended)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ data class ApiTaskTemplateInfo(
val comment: String?,
val taskGroup: String,
val taskType: String,
val duration: Long
val duration: Long?
) {
constructor(task: ApiTaskTemplate) : this(
task.id!!,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ data class ApiTaskTemplate(
val name: String,
val taskGroup: String,
val taskType: String,
val duration: Long,
val duration: Long?,
val collectionId: CollectionId,
val targets: List<ApiTarget>,
val hints: List<ApiHint>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import java.nio.file.StandardOpenOption
@Serializable
data class ApiTaskType(
val name: String,
val duration: Long,
val duration: Long?,
val targetOption: ApiTargetOption,
val hintOptions: List<ApiHintOption>,
val submissionOptions: List<ApiSubmissionOption>,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import dev.dres.data.model.template.task.options.DbScoreOption
* @version 1.1.0
*/
enum class ApiScoreOption {
KIS, AVS, LEGACY_AVS;
KIS, AVS, LEGACY_AVS, NOOP;

/**
* Converts this [ApiScoreOption] to a [DbScoreOption] representation. Requires an ongoing transaction.
Expand All @@ -21,5 +21,6 @@ enum class ApiScoreOption {
KIS -> DbScoreOption.KIS
AVS -> DbScoreOption.AVS
LEGACY_AVS -> DbScoreOption.LEGACY_AVS
NOOP -> DbScoreOption.NOOP
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ import kotlinx.dnq.query.*
abstract class AbstractInteractiveTask(store: TransientEntityStore, task: DbTask) : AbstractTask(store, task) {


/** The total duration in milliseconds of this task. Usually determined by the [DbTaskTemplate] but can be adjusted! */
abstract override var duration: Long
/** The total duration in seconds of this task. Usually determined by the [DbTaskTemplate] but can be adjusted! */
abstract override var duration: Long?

/** The [AnswerSetValidator] used to validate [DbSubmission]s. */
final override val validator: AnswerSetValidator
Expand Down Expand Up @@ -50,7 +50,7 @@ abstract class AbstractInteractiveTask(store: TransientEntityStore, task: DbTask
.asSequence().map {
ItemRange(it.item?.name!!, it.start!!, it.end!!)
}.toSet()
BasicJudgementValidator(template.toApi(), this.store, knownCorrectRanges = knownRanges)
BasicJudgementValidator(template.toApi(), this.store, template.taskGroup.type.toApi(), knownCorrectRanges = knownRanges)
}

DbTargetOption.VOTE -> {
Expand All @@ -62,12 +62,12 @@ abstract class AbstractInteractiveTask(store: TransientEntityStore, task: DbTask
val parameters =
template.taskGroup.type.configurations.filter { it.key eq targetOption.description }
.asSequence().associate { it.key to it.value }
BasicVoteValidator(template.toApi(), this.store, knownCorrectRanges = knownRanges, parameters = parameters)
BasicVoteValidator(template.toApi(), this.store, template.taskGroup.type.toApi(), knownCorrectRanges = knownRanges, parameters = parameters)
}

else -> throw IllegalStateException("The provided target option ${targetOption.description} is not supported by interactive tasks.")
}
}
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,11 @@ abstract class AbstractNonInteractiveTask(store: TransientEntityStore, task: DbT
.asSequence().map {
ItemRange(it.item?.name!!, it.start!!, it.end!!)
}.toSet()
BasicJudgementValidator(template.toApi(), this.store, knownCorrectRanges = knownRanges)
BasicJudgementValidator(template.toApi(), this.store, template.taskGroup.type.toApi(), knownCorrectRanges = knownRanges)
}

else -> throw IllegalStateException("The provided target option ${targetOption.description} is not supported by interactive tasks.")
}
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,7 @@ import dev.dres.run.filter.basics.SubmissionFilter
import dev.dres.run.filter.basics.CombiningSubmissionFilter
import dev.dres.run.score.scoreboard.MaxNormalizingScoreBoard
import dev.dres.run.score.scoreboard.Scoreboard
import dev.dres.run.score.scorer.AvsTaskScorer
import dev.dres.run.score.scorer.CachingTaskScorer
import dev.dres.run.score.scorer.KisTaskScorer
import dev.dres.run.score.scorer.LegacyAvsTaskScorer
import dev.dres.run.score.scorer.*
import dev.dres.run.transformer.MapToSegmentTransformer
import dev.dres.run.transformer.SubmissionTaskMatchTransformer
import dev.dres.run.transformer.basics.SubmissionTransformer
Expand Down Expand Up @@ -161,8 +158,8 @@ class InteractiveAsynchronousEvaluation(store: TransientEntityStore, evaluation:
/** The [CachingTaskScorer] instance used by this [InteractiveAsynchronousEvaluation].*/
override val scorer: CachingTaskScorer

/** The total duration in milliseconds of this task. Usually determined by the [DbTaskTemplate] but can be adjusted! */
override var duration: Long = this.template.duration
/** The total duration in seconds of this task. Usually determined by the [DbTaskTemplate] but can be adjusted! NULL represents perpetual task*/
override var duration: Long? = this.template.duration

val teamId = this.dbTask.team!!.id

Expand Down Expand Up @@ -220,6 +217,7 @@ class InteractiveAsynchronousEvaluation(store: TransientEntityStore, evaluation:

DbScoreOption.AVS -> AvsTaskScorer(this, store)
DbScoreOption.LEGACY_AVS -> LegacyAvsTaskScorer(this, store)
DbScoreOption.NOOP -> NoOpTaskScorer(this)
else -> throw IllegalStateException("The task score option $scoreOption is currently not supported.")
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,7 @@ import dev.dres.run.filter.basics.SubmissionFilter
import dev.dres.run.filter.basics.CombiningSubmissionFilter
import dev.dres.run.score.scoreboard.MaxNormalizingScoreBoard
import dev.dres.run.score.scoreboard.Scoreboard
import dev.dres.run.score.scorer.AvsTaskScorer
import dev.dres.run.score.scorer.CachingTaskScorer
import dev.dres.run.score.scorer.KisTaskScorer
import dev.dres.run.score.scorer.LegacyAvsTaskScorer
import dev.dres.run.score.scorer.*
import dev.dres.run.transformer.MapToSegmentTransformer
import dev.dres.run.transformer.SubmissionTaskMatchTransformer
import dev.dres.run.transformer.basics.SubmissionTransformer
Expand Down Expand Up @@ -118,8 +115,8 @@ class InteractiveSynchronousEvaluation(store: TransientEntityStore, evaluation:
/** The [CachingTaskScorer] instance used by this [ISTaskRun]. */
override val scorer: CachingTaskScorer

/** The total duration in milliseconds of this task. Usually determined by the [DbTaskTemplate] but can be adjusted! */
override var duration: Long = this.template.duration
/** The total duration in seconds of this task. Usually determined by the [DbTaskTemplate] but can be adjusted! NULL represents perpetual task */
override var duration: Long? = this.template.duration

/** */
override val teams: List<TeamId> =
Expand Down Expand Up @@ -176,6 +173,7 @@ class InteractiveSynchronousEvaluation(store: TransientEntityStore, evaluation:

DbScoreOption.AVS -> AvsTaskScorer(this, store)
DbScoreOption.LEGACY_AVS -> LegacyAvsTaskScorer(this, store)
DbScoreOption.NOOP -> NoOpTaskScorer(this)
else -> throw IllegalStateException("The task score option $scoreOption is currently not supported.")
}
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,13 @@ class NonInteractiveEvaluation(store: TransientEntityStore, evaluation: DbEvalua
DbScoreOption.KIS -> throw IllegalStateException("KIS task scorer is not applicable to non-interactive evaluations")
DbScoreOption.AVS -> AvsTaskScorer(this, store)
DbScoreOption.LEGACY_AVS -> LegacyAvsTaskScorer(this, store)
DbScoreOption.NOOP -> NoOpTaskScorer(this)
else -> throw IllegalStateException("The task score option $scoreOption is currently not supported.")
}
) }

override val transformer: SubmissionTransformer = store.transactional {
if (task.template.taskGroup.type.options.filter { it eq DbTaskOption.MAP_TO_SEGMENT }.any()) {
if (task.template.taskGroup.type.options.contains(DbTaskOption.MAP_TO_SEGMENT)) {
CombiningSubmissionTransformer(
listOf(
SubmissionTaskMatchTransformer(this.taskId),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ class DbTaskTemplate(entity: Entity) : PersistentEntity(entity), TaskTemplate {
var collection by xdLink1(DbMediaCollection)

/** The duration of the [DbTaskTemplate] in seconds. */
var duration by xdRequiredLongProp { min(0L) }
var duration by xdNullableLongProp()

/** The [DbTaskTemplateTarget]s that identify the target. Multiple entries indicate the existence of multiple targets. */
val targets by xdChildren1_N<DbTaskTemplate, DbTaskTemplateTarget>(DbTaskTemplateTarget::task)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ class DbTaskType(entity: Entity) : XdEntity(entity) {
/** The [DbEvaluationTemplate] this [DbTaskType] belongs to. */
var evaluation: DbEvaluationTemplate by xdParent<DbTaskType,DbEvaluationTemplate>(DbEvaluationTemplate::taskTypes)

/** The (default) duration of this [DbTaskType] in seconds. */
var duration by xdRequiredLongProp() { min(0L) }
/** The (default) duration of this [DbTaskType] in seconds. Defaults to no duration, which means perpetually running task. */
var duration by xdNullableLongProp()

/** The [DbTargetOption] for this [DbTaskType]. Specifies the type of target. */
var target by xdLink1(DbTargetOption)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class DbScoreOption(entity: Entity) : XdEnumEntity(entity) {
val KIS by enumField { description = "KIS" }
val AVS by enumField { description = "AVS" }
val LEGACY_AVS by enumField {description = "LEGACY_AVS"}
val NOOP by enumField { description = "NOOP" }
}

/** Name / description of the [DbScoreOption]. */
Expand Down
Loading
Loading