@neutron.co.id/pendidikan-operation 1.3.0 → 1.4.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.cjs +241 -28
- package/build/index.d.ts +55 -13
- package/build/index.mjs +239 -29
- package/package.json +4 -4
package/build/index.cjs
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
const core = require('@neon.id/core');
|
|
4
4
|
const operation = require('@neon.id/operation');
|
|
5
5
|
const query = require('@neon.id/query');
|
|
6
|
+
const value = require('@neon.id/utils/value');
|
|
6
7
|
const nanoid = require('nanoid');
|
|
7
8
|
|
|
8
9
|
const setSomething = operation.Action.define({
|
|
@@ -136,34 +137,6 @@ const syncCommitment = operation.Action.define({
|
|
|
136
137
|
}
|
|
137
138
|
});
|
|
138
139
|
|
|
139
|
-
const calculateManyComparator = operation.Action.define({
|
|
140
|
-
key: "calculateManyComparator",
|
|
141
|
-
name: "Create Penilaian dan Score",
|
|
142
|
-
type: "command",
|
|
143
|
-
category: "domain",
|
|
144
|
-
execute: async ({ gradingComparatorId }, stream) => {
|
|
145
|
-
console.log("id", gradingComparatorId);
|
|
146
|
-
console.time("\u23F1\uFE0F syncGradingComparator");
|
|
147
|
-
const result = await stream.actions.data.syncMany.execute(
|
|
148
|
-
{
|
|
149
|
-
model: "neu:penilaian:gradingComparator",
|
|
150
|
-
useDry: false,
|
|
151
|
-
query: query.Query.define({
|
|
152
|
-
limit: 1e5
|
|
153
|
-
})
|
|
154
|
-
},
|
|
155
|
-
stream
|
|
156
|
-
);
|
|
157
|
-
console.log(result);
|
|
158
|
-
console.timeEnd("\u23F1\uFE0F syncGradingComparator");
|
|
159
|
-
return core.Result.ok({
|
|
160
|
-
state: "ComparatorCalculated",
|
|
161
|
-
message: "Camparator have been calculated.",
|
|
162
|
-
data: {}
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
|
|
167
140
|
const generateGrading = operation.Action.define({
|
|
168
141
|
key: "generateGrading",
|
|
169
142
|
name: "Create Penilaian dan Score",
|
|
@@ -366,6 +339,240 @@ async function _destroyMany(stream, input) {
|
|
|
366
339
|
console.timeEnd("\u23F1\uFE0F destroyManyGradingComparisonItem");
|
|
367
340
|
}
|
|
368
341
|
|
|
342
|
+
class NumberUtil {
|
|
343
|
+
static transformDecimal(value) {
|
|
344
|
+
if (!value)
|
|
345
|
+
return 0;
|
|
346
|
+
const string = value.toString();
|
|
347
|
+
const float = parseFloat(string);
|
|
348
|
+
return float || 0;
|
|
349
|
+
}
|
|
350
|
+
static twoDecimal(value) {
|
|
351
|
+
return Math.round(value * 100) / 100;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
const calculateManyComparator = operation.Action.define({
|
|
356
|
+
key: "calculateManyComparator",
|
|
357
|
+
name: "Create Penilaian dan Score",
|
|
358
|
+
type: "command",
|
|
359
|
+
category: "domain",
|
|
360
|
+
execute: async (_, stream) => {
|
|
361
|
+
console.time("\u23F1\uFE0F getManyComparators");
|
|
362
|
+
const comparators = await _getManyComparators(stream);
|
|
363
|
+
console.timeEnd("\u23F1\uFE0F getManyComparators");
|
|
364
|
+
console.time("\u23F1\uFE0F updateManyComparators");
|
|
365
|
+
await _updateManyComparators(stream, comparators);
|
|
366
|
+
console.timeEnd("\u23F1\uFE0F updateManyComparators");
|
|
367
|
+
console.time("\u23F1\uFE0F syncGradingComparator");
|
|
368
|
+
const result = await stream.actions.data.syncMany.execute(
|
|
369
|
+
{
|
|
370
|
+
model: "neu:penilaian:gradingComparator",
|
|
371
|
+
useDry: false,
|
|
372
|
+
query: query.Query.define({
|
|
373
|
+
limit: 1e5
|
|
374
|
+
})
|
|
375
|
+
},
|
|
376
|
+
stream
|
|
377
|
+
);
|
|
378
|
+
console.log(result);
|
|
379
|
+
console.timeEnd("\u23F1\uFE0F syncGradingComparator");
|
|
380
|
+
return core.Result.ok({
|
|
381
|
+
state: "ComparatorCalculated",
|
|
382
|
+
message: "Camparator have been calculated.",
|
|
383
|
+
data: {}
|
|
384
|
+
});
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
async function _getManyComparators(stream) {
|
|
388
|
+
const result = await stream.actions.data.getMany.execute(
|
|
389
|
+
{
|
|
390
|
+
model: "neu:penilaian:gradingComparator",
|
|
391
|
+
query: query.Query.define({
|
|
392
|
+
fields: {
|
|
393
|
+
id: 1,
|
|
394
|
+
overrideComparison: 1,
|
|
395
|
+
derivativeComparison: 1,
|
|
396
|
+
acceptedGradingRasionalizations: {
|
|
397
|
+
student: {
|
|
398
|
+
name: 1
|
|
399
|
+
},
|
|
400
|
+
acceptedValidation: 1,
|
|
401
|
+
scores: 1
|
|
402
|
+
}
|
|
403
|
+
},
|
|
404
|
+
limit: 1e4
|
|
405
|
+
})
|
|
406
|
+
},
|
|
407
|
+
stream
|
|
408
|
+
);
|
|
409
|
+
if (result.isFailure)
|
|
410
|
+
throw result;
|
|
411
|
+
return result.value;
|
|
412
|
+
}
|
|
413
|
+
async function _updateManyComparators(stream, comparators) {
|
|
414
|
+
const operations = [];
|
|
415
|
+
comparators.map((comparator) => {
|
|
416
|
+
const comparison = _calculateComparison(comparator);
|
|
417
|
+
operations.push({
|
|
418
|
+
updateOne: {
|
|
419
|
+
filter: {
|
|
420
|
+
_id: comparator.id
|
|
421
|
+
},
|
|
422
|
+
update: {
|
|
423
|
+
$set: {
|
|
424
|
+
comparison
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
});
|
|
429
|
+
});
|
|
430
|
+
console.dir({ operations }, { depth: 5 });
|
|
431
|
+
await stream.core.dbs["neu-penilaian"].models["neu:penilaian:gradingComparator"].bulkWrite(operations);
|
|
432
|
+
}
|
|
433
|
+
function _calculateComparison(o) {
|
|
434
|
+
console.dir(o, { depth: 10 });
|
|
435
|
+
if (o.overrideComparison && !value.ValueUtil.isEmpty(o.overrideComparison)) {
|
|
436
|
+
return o.overrideComparison;
|
|
437
|
+
}
|
|
438
|
+
if (!o.acceptedGradingRasionalizations?.length) {
|
|
439
|
+
if (o.derivativeComparison && !value.ValueUtil.isEmpty(o.derivativeComparison)) {
|
|
440
|
+
return o.derivativeComparison;
|
|
441
|
+
}
|
|
442
|
+
return {};
|
|
443
|
+
}
|
|
444
|
+
const comparison = o.acceptedGradingRasionalizations.filter((item) => item.acceptedValidation == "verified").reduce((final, comparison2) => {
|
|
445
|
+
if (!comparison2.scores)
|
|
446
|
+
return final;
|
|
447
|
+
const scores = Object.entries(comparison2.scores);
|
|
448
|
+
for (const [gradingComponentId, score] of scores) {
|
|
449
|
+
let value = NumberUtil.transformDecimal(score);
|
|
450
|
+
value = NumberUtil.twoDecimal(value);
|
|
451
|
+
if (!final[gradingComponentId]) {
|
|
452
|
+
final[gradingComponentId] = {
|
|
453
|
+
total: 0,
|
|
454
|
+
count: 0,
|
|
455
|
+
average: 0,
|
|
456
|
+
max: 0,
|
|
457
|
+
min: 1e4
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
final[gradingComponentId].total += value;
|
|
461
|
+
final[gradingComponentId].count += 1;
|
|
462
|
+
final[gradingComponentId].max = Math.max(
|
|
463
|
+
final[gradingComponentId].max,
|
|
464
|
+
value
|
|
465
|
+
);
|
|
466
|
+
final[gradingComponentId].min = Math.min(
|
|
467
|
+
final[gradingComponentId].min,
|
|
468
|
+
value
|
|
469
|
+
);
|
|
470
|
+
}
|
|
471
|
+
for (const gradingComponentId of Object.keys(final)) {
|
|
472
|
+
const average = final[gradingComponentId].total / final[gradingComponentId].count;
|
|
473
|
+
final[gradingComponentId].average = NumberUtil.twoDecimal(average);
|
|
474
|
+
}
|
|
475
|
+
return final;
|
|
476
|
+
}, {});
|
|
477
|
+
return comparison;
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
const calculateOneComparator = operation.Action.define({
|
|
481
|
+
key: "calculateOneComparator",
|
|
482
|
+
name: "Calculate One Comparator",
|
|
483
|
+
type: "command",
|
|
484
|
+
category: "domain",
|
|
485
|
+
execute: async ({ gradingComparatorId }, stream) => {
|
|
486
|
+
console.time("\u23F1\uFE0F getOneComparator");
|
|
487
|
+
const gradingComparator = await _getOneComparator(
|
|
488
|
+
stream,
|
|
489
|
+
gradingComparatorId
|
|
490
|
+
);
|
|
491
|
+
console.timeEnd("\u23F1\uFE0F getOneComparator");
|
|
492
|
+
console.time("\u23F1\uFE0F updateOneComparator");
|
|
493
|
+
await _updateOneComparator(stream, gradingComparator);
|
|
494
|
+
console.timeEnd("\u23F1\uFE0F updateOneComparator");
|
|
495
|
+
return core.Result.ok({
|
|
496
|
+
state: "comparatorCalculated",
|
|
497
|
+
message: "Comparator have been calculated.",
|
|
498
|
+
data: {}
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
});
|
|
502
|
+
async function _getOneComparator(stream, gradingComparatorId) {
|
|
503
|
+
const result = await stream.actions.data.getOne.execute(
|
|
504
|
+
{
|
|
505
|
+
model: "neu:penilaian:gradingComparator",
|
|
506
|
+
id: gradingComparatorId,
|
|
507
|
+
query: query.Query.define({
|
|
508
|
+
fields: {
|
|
509
|
+
id: 1,
|
|
510
|
+
overrideComparison: 1,
|
|
511
|
+
derivativeComparison: 1,
|
|
512
|
+
acceptedGradingRasionalizations: {
|
|
513
|
+
student: {
|
|
514
|
+
name: 1
|
|
515
|
+
},
|
|
516
|
+
acceptedValidation: 1,
|
|
517
|
+
scores: 1
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
})
|
|
521
|
+
},
|
|
522
|
+
stream
|
|
523
|
+
);
|
|
524
|
+
if (result.isFailure)
|
|
525
|
+
throw result;
|
|
526
|
+
return result.value;
|
|
527
|
+
}
|
|
528
|
+
async function _updateOneComparator(stream, comparator) {
|
|
529
|
+
const comparison = _calculateComparison(comparator);
|
|
530
|
+
console.dir({ comparison }, { depth: 10 });
|
|
531
|
+
const result = await stream.actions.data.updateOne.execute(
|
|
532
|
+
{
|
|
533
|
+
model: "neu:penilaian:gradingComparator",
|
|
534
|
+
id: comparator.id,
|
|
535
|
+
data: {
|
|
536
|
+
comparison
|
|
537
|
+
},
|
|
538
|
+
query: query.Query.define({})
|
|
539
|
+
},
|
|
540
|
+
stream
|
|
541
|
+
);
|
|
542
|
+
if (result.isFailure)
|
|
543
|
+
throw result;
|
|
544
|
+
return result.value;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
const clearAllOverrides = operation.Action.define({
|
|
548
|
+
key: "clearAllOverrides",
|
|
549
|
+
name: "Clear All Overrides",
|
|
550
|
+
type: "command",
|
|
551
|
+
category: "domain",
|
|
552
|
+
execute: async (_, stream) => {
|
|
553
|
+
console.time("\u23F1\uFE0F clearAllOverrides");
|
|
554
|
+
await _clearAllOverrides(stream);
|
|
555
|
+
console.timeEnd("\u23F1\uFE0F clearAllOverrides");
|
|
556
|
+
return core.Result.ok({
|
|
557
|
+
state: "overridesCleared",
|
|
558
|
+
message: "Overrides have been cleared.",
|
|
559
|
+
data: {}
|
|
560
|
+
});
|
|
561
|
+
}
|
|
562
|
+
});
|
|
563
|
+
async function _clearAllOverrides(stream) {
|
|
564
|
+
await stream.actions.data.updateMany.execute(
|
|
565
|
+
{
|
|
566
|
+
model: "neu:penilaian:gradingComparator",
|
|
567
|
+
data: { overrideComparison: {} },
|
|
568
|
+
query: query.Query.define({
|
|
569
|
+
limit: 1e4
|
|
570
|
+
})
|
|
571
|
+
},
|
|
572
|
+
stream
|
|
573
|
+
);
|
|
574
|
+
}
|
|
575
|
+
|
|
369
576
|
const clearGrading = operation.Action.define({
|
|
370
577
|
key: "clearGrading",
|
|
371
578
|
name: "Clear Grading",
|
|
@@ -827,9 +1034,12 @@ const sendAnswer = operation.Action.define({
|
|
|
827
1034
|
|
|
828
1035
|
const index = {
|
|
829
1036
|
__proto__: null,
|
|
1037
|
+
_calculateComparison: _calculateComparison,
|
|
830
1038
|
acceptQuestion: acceptQuestion,
|
|
831
1039
|
calculateGrading: calculateGrading,
|
|
832
1040
|
calculateManyComparator: calculateManyComparator,
|
|
1041
|
+
calculateOneComparator: calculateOneComparator,
|
|
1042
|
+
clearAllOverrides: clearAllOverrides,
|
|
833
1043
|
clearGrading: clearGrading,
|
|
834
1044
|
createGradingAndScores: createGradingAndScores,
|
|
835
1045
|
editAnswer: editAnswer,
|
|
@@ -843,10 +1053,13 @@ const index = {
|
|
|
843
1053
|
updateGradingAndScores: updateGradingAndScores
|
|
844
1054
|
};
|
|
845
1055
|
|
|
1056
|
+
exports._calculateComparison = _calculateComparison;
|
|
846
1057
|
exports.acceptQuestion = acceptQuestion;
|
|
847
1058
|
exports.actions = index;
|
|
848
1059
|
exports.calculateGrading = calculateGrading;
|
|
849
1060
|
exports.calculateManyComparator = calculateManyComparator;
|
|
1061
|
+
exports.calculateOneComparator = calculateOneComparator;
|
|
1062
|
+
exports.clearAllOverrides = clearAllOverrides;
|
|
850
1063
|
exports.clearGrading = clearGrading;
|
|
851
1064
|
exports.createGradingAndScores = createGradingAndScores;
|
|
852
1065
|
exports.editAnswer = editAnswer;
|
package/build/index.d.ts
CHANGED
|
@@ -43,14 +43,27 @@ interface SyncCommitmentMeta {
|
|
|
43
43
|
declare const syncCommitment: Action<"syncCommitment", SyncCommitmentInput, SyncCommitmentOutput, SyncCommitmentMeta>;
|
|
44
44
|
type SyncCommitmentAction = typeof syncCommitment;
|
|
45
45
|
|
|
46
|
+
interface CalculateGradingInput {
|
|
47
|
+
gradingInsertId: string;
|
|
48
|
+
gradingContextIds: string[];
|
|
49
|
+
sourceSchoolId: string;
|
|
50
|
+
gradingId: string;
|
|
51
|
+
}
|
|
52
|
+
interface CalculateGradingOutput {
|
|
53
|
+
}
|
|
54
|
+
interface CalculateGradingMeta {
|
|
55
|
+
}
|
|
56
|
+
declare const calculateGrading: Action<"calculateGrading", CalculateGradingInput, CalculateGradingOutput, CalculateGradingMeta>;
|
|
57
|
+
type CalculateGradingAction = typeof calculateGrading;
|
|
58
|
+
|
|
46
59
|
interface CalculateManyComparatorInput {
|
|
47
|
-
gradingComparatorId: string;
|
|
48
60
|
}
|
|
49
61
|
interface CalculateManyComparatorOutput {
|
|
50
62
|
}
|
|
51
63
|
interface CalculateManyComparatorMeta {
|
|
52
64
|
}
|
|
53
65
|
declare const calculateManyComparator: Action<"calculateManyComparator", CalculateManyComparatorInput, CalculateManyComparatorOutput, CalculateManyComparatorMeta>;
|
|
66
|
+
declare function _calculateComparison(o: GradingComparator): GradingComparatorComparison;
|
|
54
67
|
interface GradingComparatorComparison {
|
|
55
68
|
[key: string]: {
|
|
56
69
|
total: number;
|
|
@@ -61,27 +74,34 @@ interface GradingComparatorComparison {
|
|
|
61
74
|
};
|
|
62
75
|
}
|
|
63
76
|
interface GradingComparator {
|
|
64
|
-
|
|
77
|
+
id: string;
|
|
78
|
+
acceptedGradingRasionalizations?: {
|
|
65
79
|
scores?: Record<string, number>;
|
|
80
|
+
acceptedValidation?: 'verified' | 'accept' | 'rejected';
|
|
66
81
|
}[];
|
|
67
|
-
comparison?: GradingComparatorComparison;
|
|
68
82
|
derivativeComparison?: GradingComparatorComparison;
|
|
69
83
|
overrideComparison?: GradingComparatorComparison;
|
|
70
84
|
}
|
|
71
85
|
type CalculateManyComparatorAction = typeof calculateManyComparator;
|
|
72
86
|
|
|
73
|
-
interface
|
|
74
|
-
|
|
75
|
-
gradingContextIds: string[];
|
|
76
|
-
sourceSchoolId: string;
|
|
77
|
-
gradingId: string;
|
|
87
|
+
interface CalculateOneComparatorInput {
|
|
88
|
+
gradingComparatorId: string;
|
|
78
89
|
}
|
|
79
|
-
interface
|
|
90
|
+
interface CalculateOneComparatorOutput {
|
|
80
91
|
}
|
|
81
|
-
interface
|
|
92
|
+
interface CalculateOneComparatorMeta {
|
|
82
93
|
}
|
|
83
|
-
declare const
|
|
84
|
-
type
|
|
94
|
+
declare const calculateOneComparator: Action<"calculateOneComparator", CalculateOneComparatorInput, CalculateOneComparatorOutput, CalculateOneComparatorMeta>;
|
|
95
|
+
type CalculateOneComparatorAction = typeof calculateOneComparator;
|
|
96
|
+
|
|
97
|
+
interface ClearAllOverridesInput {
|
|
98
|
+
}
|
|
99
|
+
interface ClearAllOverridesOutput {
|
|
100
|
+
}
|
|
101
|
+
interface ClearAllOverridesMeta {
|
|
102
|
+
}
|
|
103
|
+
declare const clearAllOverrides: Action<"clearAllOverrides", ClearAllOverridesInput, ClearAllOverridesOutput, ClearAllOverridesMeta>;
|
|
104
|
+
type ClearAllOverridesAction = typeof clearAllOverrides;
|
|
85
105
|
|
|
86
106
|
interface ClearGradingInput {
|
|
87
107
|
gradingInsertId: string;
|
|
@@ -184,6 +204,14 @@ type index_CalculateManyComparatorAction = CalculateManyComparatorAction;
|
|
|
184
204
|
type index_CalculateManyComparatorInput = CalculateManyComparatorInput;
|
|
185
205
|
type index_CalculateManyComparatorMeta = CalculateManyComparatorMeta;
|
|
186
206
|
type index_CalculateManyComparatorOutput = CalculateManyComparatorOutput;
|
|
207
|
+
type index_CalculateOneComparatorAction = CalculateOneComparatorAction;
|
|
208
|
+
type index_CalculateOneComparatorInput = CalculateOneComparatorInput;
|
|
209
|
+
type index_CalculateOneComparatorMeta = CalculateOneComparatorMeta;
|
|
210
|
+
type index_CalculateOneComparatorOutput = CalculateOneComparatorOutput;
|
|
211
|
+
type index_ClearAllOverridesAction = ClearAllOverridesAction;
|
|
212
|
+
type index_ClearAllOverridesInput = ClearAllOverridesInput;
|
|
213
|
+
type index_ClearAllOverridesMeta = ClearAllOverridesMeta;
|
|
214
|
+
type index_ClearAllOverridesOutput = ClearAllOverridesOutput;
|
|
187
215
|
type index_ClearGradingAction = ClearGradingAction;
|
|
188
216
|
type index_ClearGradingInput = ClearGradingInput;
|
|
189
217
|
type index_ClearGradingMeta = ClearGradingMeta;
|
|
@@ -230,9 +258,12 @@ type index_UpdateGradingAndScoresAction = UpdateGradingAndScoresAction;
|
|
|
230
258
|
type index_UpdateGradingAndScoresInput = UpdateGradingAndScoresInput;
|
|
231
259
|
type index_UpdateGradingAndScoresMeta = UpdateGradingAndScoresMeta;
|
|
232
260
|
type index_UpdateGradingAndScoresOutput = UpdateGradingAndScoresOutput;
|
|
261
|
+
declare const index__calculateComparison: typeof _calculateComparison;
|
|
233
262
|
declare const index_acceptQuestion: typeof acceptQuestion;
|
|
234
263
|
declare const index_calculateGrading: typeof calculateGrading;
|
|
235
264
|
declare const index_calculateManyComparator: typeof calculateManyComparator;
|
|
265
|
+
declare const index_calculateOneComparator: typeof calculateOneComparator;
|
|
266
|
+
declare const index_clearAllOverrides: typeof clearAllOverrides;
|
|
236
267
|
declare const index_clearGrading: typeof clearGrading;
|
|
237
268
|
declare const index_createGradingAndScores: typeof createGradingAndScores;
|
|
238
269
|
declare const index_editAnswer: typeof editAnswer;
|
|
@@ -258,6 +289,14 @@ declare namespace index {
|
|
|
258
289
|
index_CalculateManyComparatorInput as CalculateManyComparatorInput,
|
|
259
290
|
index_CalculateManyComparatorMeta as CalculateManyComparatorMeta,
|
|
260
291
|
index_CalculateManyComparatorOutput as CalculateManyComparatorOutput,
|
|
292
|
+
index_CalculateOneComparatorAction as CalculateOneComparatorAction,
|
|
293
|
+
index_CalculateOneComparatorInput as CalculateOneComparatorInput,
|
|
294
|
+
index_CalculateOneComparatorMeta as CalculateOneComparatorMeta,
|
|
295
|
+
index_CalculateOneComparatorOutput as CalculateOneComparatorOutput,
|
|
296
|
+
index_ClearAllOverridesAction as ClearAllOverridesAction,
|
|
297
|
+
index_ClearAllOverridesInput as ClearAllOverridesInput,
|
|
298
|
+
index_ClearAllOverridesMeta as ClearAllOverridesMeta,
|
|
299
|
+
index_ClearAllOverridesOutput as ClearAllOverridesOutput,
|
|
261
300
|
index_ClearGradingAction as ClearGradingAction,
|
|
262
301
|
index_ClearGradingInput as ClearGradingInput,
|
|
263
302
|
index_ClearGradingMeta as ClearGradingMeta,
|
|
@@ -304,9 +343,12 @@ declare namespace index {
|
|
|
304
343
|
index_UpdateGradingAndScoresInput as UpdateGradingAndScoresInput,
|
|
305
344
|
index_UpdateGradingAndScoresMeta as UpdateGradingAndScoresMeta,
|
|
306
345
|
index_UpdateGradingAndScoresOutput as UpdateGradingAndScoresOutput,
|
|
346
|
+
index__calculateComparison as _calculateComparison,
|
|
307
347
|
index_acceptQuestion as acceptQuestion,
|
|
308
348
|
index_calculateGrading as calculateGrading,
|
|
309
349
|
index_calculateManyComparator as calculateManyComparator,
|
|
350
|
+
index_calculateOneComparator as calculateOneComparator,
|
|
351
|
+
index_clearAllOverrides as clearAllOverrides,
|
|
310
352
|
index_clearGrading as clearGrading,
|
|
311
353
|
index_createGradingAndScores as createGradingAndScores,
|
|
312
354
|
index_editAnswer as editAnswer,
|
|
@@ -321,4 +363,4 @@ declare namespace index {
|
|
|
321
363
|
};
|
|
322
364
|
}
|
|
323
365
|
|
|
324
|
-
export { AcceptQuestionAction, AcceptQuestionInput, AcceptQuestionMeta, AcceptQuestionOutput, CalculateGradingAction, CalculateGradingInput, CalculateGradingMeta, CalculateGradingOutput, CalculateManyComparatorAction, CalculateManyComparatorInput, CalculateManyComparatorMeta, CalculateManyComparatorOutput, ClearGradingAction, ClearGradingInput, ClearGradingMeta, ClearGradingOutput, CreateGradingAndScoresAction, CreateGradingAndScoresInput, CreateGradingAndScoresMeta, CreateGradingAndScoresOutput, EditAnswerAction, EditAnswerInput, EditAnswerMeta, EditAnswerOutput, GenerateGradingAction, GenerateGradingInput, GenerateGradingMeta, GenerateGradingOutput, GradingComparator, GradingComparatorComparison, PresenceSessionStudentAction, PresenceSessionStudentInput, PresenceSessionStudentMeta, PresenceSessionStudentOutput, PresenceSessionTeacherAction, PresenceSessionTeacherInput, PresenceSessionTeacherMeta, PresenceSessionTeacherOutput, RasionalizeGradingAction, RasionalizeGradingInput, RasionalizeGradingMeta, RasionalizeGradingOutput, SendAnswerAction, SendAnswerInput, SendAnswerMeta, SendAnswerOutput, SetSomethingAction, SetSomethingInput, SetSomethingMeta, SetSomethingOutput, SyncCommitmentAction, SyncCommitmentInput, SyncCommitmentMeta, SyncCommitmentOutput, UpdateGradingAndScoresAction, UpdateGradingAndScoresInput, UpdateGradingAndScoresMeta, UpdateGradingAndScoresOutput, acceptQuestion, index as actions, calculateGrading, calculateManyComparator, clearGrading, createGradingAndScores, editAnswer, generateGrading, presenceSessionStudent, presenceSessionTeacher, rasionalizeGrading, sendAnswer, setSomething, syncCommitment, updateGradingAndScores };
|
|
366
|
+
export { AcceptQuestionAction, AcceptQuestionInput, AcceptQuestionMeta, AcceptQuestionOutput, CalculateGradingAction, CalculateGradingInput, CalculateGradingMeta, CalculateGradingOutput, CalculateManyComparatorAction, CalculateManyComparatorInput, CalculateManyComparatorMeta, CalculateManyComparatorOutput, CalculateOneComparatorAction, CalculateOneComparatorInput, CalculateOneComparatorMeta, CalculateOneComparatorOutput, ClearAllOverridesAction, ClearAllOverridesInput, ClearAllOverridesMeta, ClearAllOverridesOutput, ClearGradingAction, ClearGradingInput, ClearGradingMeta, ClearGradingOutput, CreateGradingAndScoresAction, CreateGradingAndScoresInput, CreateGradingAndScoresMeta, CreateGradingAndScoresOutput, EditAnswerAction, EditAnswerInput, EditAnswerMeta, EditAnswerOutput, GenerateGradingAction, GenerateGradingInput, GenerateGradingMeta, GenerateGradingOutput, GradingComparator, GradingComparatorComparison, PresenceSessionStudentAction, PresenceSessionStudentInput, PresenceSessionStudentMeta, PresenceSessionStudentOutput, PresenceSessionTeacherAction, PresenceSessionTeacherInput, PresenceSessionTeacherMeta, PresenceSessionTeacherOutput, RasionalizeGradingAction, RasionalizeGradingInput, RasionalizeGradingMeta, RasionalizeGradingOutput, SendAnswerAction, SendAnswerInput, SendAnswerMeta, SendAnswerOutput, SetSomethingAction, SetSomethingInput, SetSomethingMeta, SetSomethingOutput, SyncCommitmentAction, SyncCommitmentInput, SyncCommitmentMeta, SyncCommitmentOutput, UpdateGradingAndScoresAction, UpdateGradingAndScoresInput, UpdateGradingAndScoresMeta, UpdateGradingAndScoresOutput, _calculateComparison, acceptQuestion, index as actions, calculateGrading, calculateManyComparator, calculateOneComparator, clearAllOverrides, clearGrading, createGradingAndScores, editAnswer, generateGrading, presenceSessionStudent, presenceSessionTeacher, rasionalizeGrading, sendAnswer, setSomething, syncCommitment, updateGradingAndScores };
|
package/build/index.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Result } from '@neon.id/core';
|
|
2
2
|
import { Action } from '@neon.id/operation';
|
|
3
3
|
import { Query } from '@neon.id/query';
|
|
4
|
+
import { ValueUtil } from '@neon.id/utils/value';
|
|
4
5
|
import { customAlphabet } from 'nanoid';
|
|
5
6
|
|
|
6
7
|
const setSomething = Action.define({
|
|
@@ -134,34 +135,6 @@ const syncCommitment = Action.define({
|
|
|
134
135
|
}
|
|
135
136
|
});
|
|
136
137
|
|
|
137
|
-
const calculateManyComparator = Action.define({
|
|
138
|
-
key: "calculateManyComparator",
|
|
139
|
-
name: "Create Penilaian dan Score",
|
|
140
|
-
type: "command",
|
|
141
|
-
category: "domain",
|
|
142
|
-
execute: async ({ gradingComparatorId }, stream) => {
|
|
143
|
-
console.log("id", gradingComparatorId);
|
|
144
|
-
console.time("\u23F1\uFE0F syncGradingComparator");
|
|
145
|
-
const result = await stream.actions.data.syncMany.execute(
|
|
146
|
-
{
|
|
147
|
-
model: "neu:penilaian:gradingComparator",
|
|
148
|
-
useDry: false,
|
|
149
|
-
query: Query.define({
|
|
150
|
-
limit: 1e5
|
|
151
|
-
})
|
|
152
|
-
},
|
|
153
|
-
stream
|
|
154
|
-
);
|
|
155
|
-
console.log(result);
|
|
156
|
-
console.timeEnd("\u23F1\uFE0F syncGradingComparator");
|
|
157
|
-
return Result.ok({
|
|
158
|
-
state: "ComparatorCalculated",
|
|
159
|
-
message: "Camparator have been calculated.",
|
|
160
|
-
data: {}
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
|
|
165
138
|
const generateGrading = Action.define({
|
|
166
139
|
key: "generateGrading",
|
|
167
140
|
name: "Create Penilaian dan Score",
|
|
@@ -364,6 +337,240 @@ async function _destroyMany(stream, input) {
|
|
|
364
337
|
console.timeEnd("\u23F1\uFE0F destroyManyGradingComparisonItem");
|
|
365
338
|
}
|
|
366
339
|
|
|
340
|
+
class NumberUtil {
|
|
341
|
+
static transformDecimal(value) {
|
|
342
|
+
if (!value)
|
|
343
|
+
return 0;
|
|
344
|
+
const string = value.toString();
|
|
345
|
+
const float = parseFloat(string);
|
|
346
|
+
return float || 0;
|
|
347
|
+
}
|
|
348
|
+
static twoDecimal(value) {
|
|
349
|
+
return Math.round(value * 100) / 100;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
const calculateManyComparator = Action.define({
|
|
354
|
+
key: "calculateManyComparator",
|
|
355
|
+
name: "Create Penilaian dan Score",
|
|
356
|
+
type: "command",
|
|
357
|
+
category: "domain",
|
|
358
|
+
execute: async (_, stream) => {
|
|
359
|
+
console.time("\u23F1\uFE0F getManyComparators");
|
|
360
|
+
const comparators = await _getManyComparators(stream);
|
|
361
|
+
console.timeEnd("\u23F1\uFE0F getManyComparators");
|
|
362
|
+
console.time("\u23F1\uFE0F updateManyComparators");
|
|
363
|
+
await _updateManyComparators(stream, comparators);
|
|
364
|
+
console.timeEnd("\u23F1\uFE0F updateManyComparators");
|
|
365
|
+
console.time("\u23F1\uFE0F syncGradingComparator");
|
|
366
|
+
const result = await stream.actions.data.syncMany.execute(
|
|
367
|
+
{
|
|
368
|
+
model: "neu:penilaian:gradingComparator",
|
|
369
|
+
useDry: false,
|
|
370
|
+
query: Query.define({
|
|
371
|
+
limit: 1e5
|
|
372
|
+
})
|
|
373
|
+
},
|
|
374
|
+
stream
|
|
375
|
+
);
|
|
376
|
+
console.log(result);
|
|
377
|
+
console.timeEnd("\u23F1\uFE0F syncGradingComparator");
|
|
378
|
+
return Result.ok({
|
|
379
|
+
state: "ComparatorCalculated",
|
|
380
|
+
message: "Camparator have been calculated.",
|
|
381
|
+
data: {}
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
});
|
|
385
|
+
async function _getManyComparators(stream) {
|
|
386
|
+
const result = await stream.actions.data.getMany.execute(
|
|
387
|
+
{
|
|
388
|
+
model: "neu:penilaian:gradingComparator",
|
|
389
|
+
query: Query.define({
|
|
390
|
+
fields: {
|
|
391
|
+
id: 1,
|
|
392
|
+
overrideComparison: 1,
|
|
393
|
+
derivativeComparison: 1,
|
|
394
|
+
acceptedGradingRasionalizations: {
|
|
395
|
+
student: {
|
|
396
|
+
name: 1
|
|
397
|
+
},
|
|
398
|
+
acceptedValidation: 1,
|
|
399
|
+
scores: 1
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
limit: 1e4
|
|
403
|
+
})
|
|
404
|
+
},
|
|
405
|
+
stream
|
|
406
|
+
);
|
|
407
|
+
if (result.isFailure)
|
|
408
|
+
throw result;
|
|
409
|
+
return result.value;
|
|
410
|
+
}
|
|
411
|
+
async function _updateManyComparators(stream, comparators) {
|
|
412
|
+
const operations = [];
|
|
413
|
+
comparators.map((comparator) => {
|
|
414
|
+
const comparison = _calculateComparison(comparator);
|
|
415
|
+
operations.push({
|
|
416
|
+
updateOne: {
|
|
417
|
+
filter: {
|
|
418
|
+
_id: comparator.id
|
|
419
|
+
},
|
|
420
|
+
update: {
|
|
421
|
+
$set: {
|
|
422
|
+
comparison
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
});
|
|
427
|
+
});
|
|
428
|
+
console.dir({ operations }, { depth: 5 });
|
|
429
|
+
await stream.core.dbs["neu-penilaian"].models["neu:penilaian:gradingComparator"].bulkWrite(operations);
|
|
430
|
+
}
|
|
431
|
+
function _calculateComparison(o) {
|
|
432
|
+
console.dir(o, { depth: 10 });
|
|
433
|
+
if (o.overrideComparison && !ValueUtil.isEmpty(o.overrideComparison)) {
|
|
434
|
+
return o.overrideComparison;
|
|
435
|
+
}
|
|
436
|
+
if (!o.acceptedGradingRasionalizations?.length) {
|
|
437
|
+
if (o.derivativeComparison && !ValueUtil.isEmpty(o.derivativeComparison)) {
|
|
438
|
+
return o.derivativeComparison;
|
|
439
|
+
}
|
|
440
|
+
return {};
|
|
441
|
+
}
|
|
442
|
+
const comparison = o.acceptedGradingRasionalizations.filter((item) => item.acceptedValidation == "verified").reduce((final, comparison2) => {
|
|
443
|
+
if (!comparison2.scores)
|
|
444
|
+
return final;
|
|
445
|
+
const scores = Object.entries(comparison2.scores);
|
|
446
|
+
for (const [gradingComponentId, score] of scores) {
|
|
447
|
+
let value = NumberUtil.transformDecimal(score);
|
|
448
|
+
value = NumberUtil.twoDecimal(value);
|
|
449
|
+
if (!final[gradingComponentId]) {
|
|
450
|
+
final[gradingComponentId] = {
|
|
451
|
+
total: 0,
|
|
452
|
+
count: 0,
|
|
453
|
+
average: 0,
|
|
454
|
+
max: 0,
|
|
455
|
+
min: 1e4
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
final[gradingComponentId].total += value;
|
|
459
|
+
final[gradingComponentId].count += 1;
|
|
460
|
+
final[gradingComponentId].max = Math.max(
|
|
461
|
+
final[gradingComponentId].max,
|
|
462
|
+
value
|
|
463
|
+
);
|
|
464
|
+
final[gradingComponentId].min = Math.min(
|
|
465
|
+
final[gradingComponentId].min,
|
|
466
|
+
value
|
|
467
|
+
);
|
|
468
|
+
}
|
|
469
|
+
for (const gradingComponentId of Object.keys(final)) {
|
|
470
|
+
const average = final[gradingComponentId].total / final[gradingComponentId].count;
|
|
471
|
+
final[gradingComponentId].average = NumberUtil.twoDecimal(average);
|
|
472
|
+
}
|
|
473
|
+
return final;
|
|
474
|
+
}, {});
|
|
475
|
+
return comparison;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
const calculateOneComparator = Action.define({
|
|
479
|
+
key: "calculateOneComparator",
|
|
480
|
+
name: "Calculate One Comparator",
|
|
481
|
+
type: "command",
|
|
482
|
+
category: "domain",
|
|
483
|
+
execute: async ({ gradingComparatorId }, stream) => {
|
|
484
|
+
console.time("\u23F1\uFE0F getOneComparator");
|
|
485
|
+
const gradingComparator = await _getOneComparator(
|
|
486
|
+
stream,
|
|
487
|
+
gradingComparatorId
|
|
488
|
+
);
|
|
489
|
+
console.timeEnd("\u23F1\uFE0F getOneComparator");
|
|
490
|
+
console.time("\u23F1\uFE0F updateOneComparator");
|
|
491
|
+
await _updateOneComparator(stream, gradingComparator);
|
|
492
|
+
console.timeEnd("\u23F1\uFE0F updateOneComparator");
|
|
493
|
+
return Result.ok({
|
|
494
|
+
state: "comparatorCalculated",
|
|
495
|
+
message: "Comparator have been calculated.",
|
|
496
|
+
data: {}
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
});
|
|
500
|
+
async function _getOneComparator(stream, gradingComparatorId) {
|
|
501
|
+
const result = await stream.actions.data.getOne.execute(
|
|
502
|
+
{
|
|
503
|
+
model: "neu:penilaian:gradingComparator",
|
|
504
|
+
id: gradingComparatorId,
|
|
505
|
+
query: Query.define({
|
|
506
|
+
fields: {
|
|
507
|
+
id: 1,
|
|
508
|
+
overrideComparison: 1,
|
|
509
|
+
derivativeComparison: 1,
|
|
510
|
+
acceptedGradingRasionalizations: {
|
|
511
|
+
student: {
|
|
512
|
+
name: 1
|
|
513
|
+
},
|
|
514
|
+
acceptedValidation: 1,
|
|
515
|
+
scores: 1
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
})
|
|
519
|
+
},
|
|
520
|
+
stream
|
|
521
|
+
);
|
|
522
|
+
if (result.isFailure)
|
|
523
|
+
throw result;
|
|
524
|
+
return result.value;
|
|
525
|
+
}
|
|
526
|
+
async function _updateOneComparator(stream, comparator) {
|
|
527
|
+
const comparison = _calculateComparison(comparator);
|
|
528
|
+
console.dir({ comparison }, { depth: 10 });
|
|
529
|
+
const result = await stream.actions.data.updateOne.execute(
|
|
530
|
+
{
|
|
531
|
+
model: "neu:penilaian:gradingComparator",
|
|
532
|
+
id: comparator.id,
|
|
533
|
+
data: {
|
|
534
|
+
comparison
|
|
535
|
+
},
|
|
536
|
+
query: Query.define({})
|
|
537
|
+
},
|
|
538
|
+
stream
|
|
539
|
+
);
|
|
540
|
+
if (result.isFailure)
|
|
541
|
+
throw result;
|
|
542
|
+
return result.value;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
const clearAllOverrides = Action.define({
|
|
546
|
+
key: "clearAllOverrides",
|
|
547
|
+
name: "Clear All Overrides",
|
|
548
|
+
type: "command",
|
|
549
|
+
category: "domain",
|
|
550
|
+
execute: async (_, stream) => {
|
|
551
|
+
console.time("\u23F1\uFE0F clearAllOverrides");
|
|
552
|
+
await _clearAllOverrides(stream);
|
|
553
|
+
console.timeEnd("\u23F1\uFE0F clearAllOverrides");
|
|
554
|
+
return Result.ok({
|
|
555
|
+
state: "overridesCleared",
|
|
556
|
+
message: "Overrides have been cleared.",
|
|
557
|
+
data: {}
|
|
558
|
+
});
|
|
559
|
+
}
|
|
560
|
+
});
|
|
561
|
+
async function _clearAllOverrides(stream) {
|
|
562
|
+
await stream.actions.data.updateMany.execute(
|
|
563
|
+
{
|
|
564
|
+
model: "neu:penilaian:gradingComparator",
|
|
565
|
+
data: { overrideComparison: {} },
|
|
566
|
+
query: Query.define({
|
|
567
|
+
limit: 1e4
|
|
568
|
+
})
|
|
569
|
+
},
|
|
570
|
+
stream
|
|
571
|
+
);
|
|
572
|
+
}
|
|
573
|
+
|
|
367
574
|
const clearGrading = Action.define({
|
|
368
575
|
key: "clearGrading",
|
|
369
576
|
name: "Clear Grading",
|
|
@@ -825,9 +1032,12 @@ const sendAnswer = Action.define({
|
|
|
825
1032
|
|
|
826
1033
|
const index = {
|
|
827
1034
|
__proto__: null,
|
|
1035
|
+
_calculateComparison: _calculateComparison,
|
|
828
1036
|
acceptQuestion: acceptQuestion,
|
|
829
1037
|
calculateGrading: calculateGrading,
|
|
830
1038
|
calculateManyComparator: calculateManyComparator,
|
|
1039
|
+
calculateOneComparator: calculateOneComparator,
|
|
1040
|
+
clearAllOverrides: clearAllOverrides,
|
|
831
1041
|
clearGrading: clearGrading,
|
|
832
1042
|
createGradingAndScores: createGradingAndScores,
|
|
833
1043
|
editAnswer: editAnswer,
|
|
@@ -841,4 +1051,4 @@ const index = {
|
|
|
841
1051
|
updateGradingAndScores: updateGradingAndScores
|
|
842
1052
|
};
|
|
843
1053
|
|
|
844
|
-
export { acceptQuestion, index as actions, calculateGrading, calculateManyComparator, clearGrading, createGradingAndScores, editAnswer, generateGrading, presenceSessionStudent, presenceSessionTeacher, rasionalizeGrading, sendAnswer, setSomething, syncCommitment, updateGradingAndScores };
|
|
1054
|
+
export { _calculateComparison, acceptQuestion, index as actions, calculateGrading, calculateManyComparator, calculateOneComparator, clearAllOverrides, clearGrading, createGradingAndScores, editAnswer, generateGrading, presenceSessionStudent, presenceSessionTeacher, rasionalizeGrading, sendAnswer, setSomething, syncCommitment, updateGradingAndScores };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neutron.co.id/pendidikan-operation",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0-beta.1",
|
|
4
4
|
"description": "Operation package of Neutron Pendidikan.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"contributors": [
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"@neon.id/utils": "0.33.5",
|
|
40
40
|
"@neutron.co.id/akademik-models": "1.2.0",
|
|
41
41
|
"@neutron.co.id/jadwal-models": "1.2.0",
|
|
42
|
-
"@neutron.co.id/penilaian-models": "1.
|
|
42
|
+
"@neutron.co.id/penilaian-models": "1.4.0-beta.1",
|
|
43
43
|
"@neutron.co.id/tanya-models": "1.1.0",
|
|
44
44
|
"mongoose": "6.9.1",
|
|
45
45
|
"nanoid": "4.0.1",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"@neon.id/utils": "^0.33.5",
|
|
69
69
|
"@neutron.co.id/akademik-models": "^1.2.0",
|
|
70
70
|
"@neutron.co.id/jadwal-models": "^1.2.0",
|
|
71
|
-
"@neutron.co.id/penilaian-models": "^1.
|
|
71
|
+
"@neutron.co.id/penilaian-models": "^1.4.0-beta.1",
|
|
72
72
|
"@neutron.co.id/tanya-models": "^1.1.0",
|
|
73
73
|
"mongoose": "^6.9.1",
|
|
74
74
|
"ofetch": "^1.0.0"
|
|
@@ -76,5 +76,5 @@
|
|
|
76
76
|
"publishConfig": {
|
|
77
77
|
"access": "public"
|
|
78
78
|
},
|
|
79
|
-
"build":
|
|
79
|
+
"build": 16
|
|
80
80
|
}
|