@@ -51,42 +51,62 @@ internal object Jobs : IntIdTable() {
51
51
}
52
52
}
53
53
54
+ typealias JobCallback = (Job ) -> Unit
55
+
54
56
class JobDb (private val database : Database ) {
57
+
58
+ private val observers = mutableListOf<JobCallback >()
59
+
55
60
init {
56
61
transaction(database) {
57
62
SchemaUtils .create(Jobs )
58
63
}
59
64
}
60
65
61
- fun create (job : Job ): Int? = transaction(database) {
62
- Jobs .insertAndGetId { row ->
63
- row[name] = job.name
64
- row[status] = job.status.serialize()
65
- row[userOldModelPath] = job.userOldModelPath
66
- row[userNewModelName] = job.userNewModelName
67
- row[userDataset] = job.userDataset.serialize()
68
- row[userOptimizer] = job.userOptimizer.serialize()
69
- row[userLoss] = job.userLoss.serialize()
70
- row[userMetrics] = klaxon.toJsonString(job.userMetrics)
71
- row[userEpochs] = job.userEpochs
72
- row[userModel] = job.userModel.serialize()
73
- row[generateDebugComments] = job.generateDebugComments
74
- }.value
66
+ fun subscribe (onUpdate : JobCallback ) {
67
+ observers.add(onUpdate)
68
+ }
69
+
70
+ fun create (job : Job ): Job {
71
+ val newId = transaction(database) {
72
+ Jobs .insertAndGetId { row ->
73
+ row[name] = job.name
74
+ row[status] = job.status.serialize()
75
+ row[userOldModelPath] = job.userOldModelPath
76
+ row[userNewModelName] = job.userNewModelName
77
+ row[userDataset] = job.userDataset.serialize()
78
+ row[userOptimizer] = job.userOptimizer.serialize()
79
+ row[userLoss] = job.userLoss.serialize()
80
+ row[userMetrics] = klaxon.toJsonString(job.userMetrics)
81
+ row[userEpochs] = job.userEpochs
82
+ row[userModel] = job.userModel.serialize()
83
+ row[generateDebugComments] = job.generateDebugComments
84
+ }.value
85
+ }
86
+
87
+ val newJob = job.copy(id = newId)
88
+ observers.forEach { it(newJob) }
89
+
90
+ return newJob
75
91
}
76
92
77
- fun update (job : Job ): Int? = transaction(database) {
78
- Jobs .update({ Jobs .id eq job.id }) {
79
- it[name] = job.name
80
- it[status] = job.status.serialize()
81
- it[userOldModelPath] = job.userOldModelPath
82
- it[userNewModelName] = job.userNewModelName
83
- it[userDataset] = job.userDataset.serialize()
84
- it[userOptimizer] = job.userOptimizer.serialize()
85
- it[userLoss] = job.userLoss.serialize()
86
- it[userMetrics] = klaxon.toJsonString(job.userMetrics)
87
- it[userEpochs] = job.userEpochs
88
- it[generateDebugComments] = job.generateDebugComments
93
+ fun update (job : Job ) {
94
+ transaction(database) {
95
+ Jobs .update({ Jobs .id eq job.id }) {
96
+ it[name] = job.name
97
+ it[status] = job.status.serialize()
98
+ it[userOldModelPath] = job.userOldModelPath
99
+ it[userNewModelName] = job.userNewModelName
100
+ it[userDataset] = job.userDataset.serialize()
101
+ it[userOptimizer] = job.userOptimizer.serialize()
102
+ it[userLoss] = job.userLoss.serialize()
103
+ it[userMetrics] = klaxon.toJsonString(job.userMetrics)
104
+ it[userEpochs] = job.userEpochs
105
+ it[generateDebugComments] = job.generateDebugComments
106
+ }
89
107
}
108
+
109
+ observers.forEach { it(job) }
90
110
}
91
111
92
112
fun count (): Int = transaction(database) {
@@ -111,9 +131,11 @@ class JobDb(private val database: Database) {
111
131
.firstOrNull()
112
132
}
113
133
114
- fun remove (id : Int ): Int? = transaction(database) {
115
- Jobs .deleteWhere { Jobs .id eq id }
116
- }
134
+ fun remove (job : Job ) {
135
+ transaction(database) {
136
+ Jobs .deleteWhere { Jobs .id eq job.id }
137
+ }
117
138
118
- fun remove (job : Job ): Int? = remove(job.id)
139
+ observers.forEach { it(job) }
140
+ }
119
141
}
0 commit comments