@@ -11,30 +11,12 @@ interface AutoScoreRule extends RuleConfig {
1111 lastExecuted ?: Date
1212}
1313
14- interface AutoScoreRuleFileData {
15- id : number
16- enabled : boolean
17- name : string
18- studentNames : string [ ]
19- lastExecuted ?: string
20- triggers ?: Array < { event : string ; value ?: string ; relation ?: 'AND' | 'OR' } >
21- actions ?: Array < { event : string ; value ?: string ; reason ?: string } >
22- }
23-
24- interface AutoScoreRulesFile {
25- version : number
26- rules : AutoScoreRuleFileData [ ]
27- updatedAt ?: string
28- }
29-
3014declare module '../../shared/kernel' {
3115 interface Context {
3216 autoScore : AutoScoreService
3317 }
3418}
3519
36- const RULES_FILE_NAME = 'auto-score-rules.json'
37-
3820export class AutoScoreService extends Service {
3921 private rules : AutoScoreRule [ ] = [ ]
4022 private timers : Map < number , NodeJS . Timeout > = new Map ( )
@@ -130,83 +112,7 @@ export class AutoScoreService extends Service {
130112 }
131113
132114 private async loadRulesFromFile ( ) : Promise < void > {
133- try {
134- const fs = this . mainCtx . fileSystem
135- if ( ! fs ) {
136- this . logger . warn ( 'FileSystemService not available, falling back to settings' )
137- await this . loadRulesFromSettings ( )
138- return
139- }
140-
141- const data = await fs . readJsonFile < AutoScoreRulesFile > ( RULES_FILE_NAME , 'automatic' )
142- if ( data && data . rules ) {
143- this . rules = data . rules . map ( ( rule : any ) => {
144- const migratedRule = this . migrateRule ( rule )
145- return {
146- ...migratedRule ,
147- lastExecuted : migratedRule . lastExecuted
148- ? new Date ( migratedRule . lastExecuted )
149- : undefined
150- }
151- } )
152- if (
153- data . rules . some (
154- ( rule : any ) => rule . intervalMinutes !== undefined || rule . scoreValue !== undefined
155- )
156- ) {
157- await this . saveRulesToFile ( )
158- }
159- } else {
160- await this . loadRulesFromSettings ( )
161- await this . saveRulesToFile ( )
162- }
163- } catch ( error ) {
164- this . logger . warn ( 'Failed to load auto score rules from file, falling back to settings' , {
165- error
166- } )
167- await this . loadRulesFromSettings ( )
168- }
169- }
170-
171- private migrateRule ( rule : any ) : AutoScoreRule {
172- if ( ! rule . intervalMinutes && ! rule . scoreValue ) {
173- return rule
174- }
175-
176- const migratedRule : AutoScoreRule = {
177- id : rule . id ,
178- enabled : rule . enabled ,
179- name : rule . name ,
180- studentNames : rule . studentNames || [ ] ,
181- lastExecuted : rule . lastExecuted ,
182- triggers : rule . triggers || [ ] ,
183- actions : rule . actions || [ ]
184- }
185-
186- if (
187- rule . intervalMinutes &&
188- ! migratedRule . triggers ?. find ( ( t ) => t . event === 'interval_time_passed' )
189- ) {
190- migratedRule . triggers = migratedRule . triggers || [ ]
191- migratedRule . triggers . push ( {
192- event : 'interval_time_passed' ,
193- value : String ( rule . intervalMinutes )
194- } )
195- }
196-
197- if (
198- rule . scoreValue !== undefined &&
199- ! migratedRule . actions ?. find ( ( a ) => a . event === 'add_score' )
200- ) {
201- migratedRule . actions = migratedRule . actions || [ ]
202- migratedRule . actions . push ( {
203- event : 'add_score' ,
204- value : String ( rule . scoreValue ) ,
205- reason : rule . reason
206- } )
207- }
208-
209- return migratedRule
115+ await this . loadRulesFromSettings ( )
210116 }
211117
212118 private async loadRulesFromSettings ( ) {
@@ -226,32 +132,7 @@ export class AutoScoreService extends Service {
226132 }
227133
228134 private async saveRulesToFile ( ) : Promise < void > {
229- try {
230- const fs = this . mainCtx . fileSystem
231- if ( ! fs ) {
232- this . logger . warn ( 'FileSystemService not available, falling back to settings' )
233- await this . saveRulesToSettings ( )
234- return
235- }
236-
237- const data : AutoScoreRulesFile = {
238- version : 1 ,
239- rules : this . rules . map ( ( { lastExecuted, ...rule } ) => ( {
240- ...rule ,
241- lastExecuted : lastExecuted ?. toISOString ( )
242- } ) ) ,
243- updatedAt : new Date ( ) . toISOString ( )
244- }
245-
246- const success = await fs . writeJsonFile ( RULES_FILE_NAME , data , 'automatic' )
247- if ( ! success ) {
248- this . logger . warn ( 'Failed to save rules to file, falling back to settings' )
249- await this . saveRulesToSettings ( )
250- }
251- } catch ( error ) {
252- this . logger . error ( 'Failed to save auto score rules to file:' , { error } )
253- await this . saveRulesToSettings ( )
254- }
135+ await this . saveRulesToSettings ( )
255136 }
256137
257138 private async saveRulesToSettings ( ) {
0 commit comments