Conversation
Allow instructors to configure CQI component weights (effort, LoC,
temporal spread, ownership) per exercise via REST API and UI panel.
Falls back to application.yml defaults when no custom config exists.
Backend: new entity, repository, service, REST endpoints
(GET/PUT/DELETE /api/exercises/{id}/cqi-weights).
Frontend: CqiWeightsPanel component integrated into Teams page.
|
🤖 OpenAPI spec and client code auto-updated and committed. |
|
🤖 No OpenAPI or client changes needed. |
|
🤖 No OpenAPI or client changes needed. |
949474e to
9f4b81c
Compare
|
🤖 OpenAPI spec and client code auto-updated and committed. |
|
🤖 No OpenAPI or client changes needed. |
1 similar comment
|
🤖 No OpenAPI or client changes needed. |
ba9120f to
7a44890
Compare
|
🤖 No OpenAPI or client changes needed. |
…hema - Return descriptive validation error messages from CqiWeightResource - Display backend error messages in CqiWeightsPanel toasts - Initialize timestamps in CqiWeightConfiguration constructor - Use orElseGet with proper constructor for entity creation - Move cqi_weight_configurations table into 001-initial-schema.xml
|
🤖 OpenAPI spec and client code auto-updated and committed. |
|
🤖 No OpenAPI or client changes needed. |
|
🤖 No OpenAPI or client changes needed. |
Add unit tests for CqiWeightResource (9 tests), CqiWeightService (4 tests), and CqiWeightsPanel (9 tests). Fix weak assertions in ContributionBalanceCalculatorTest with exact computed values. Fix broken node_modules symlink in test webapp.
|
🤖 No OpenAPI or client changes needed. |
Cathy0123456789
left a comment
There was a problem hiding this comment.
Thank you for adding this, I added a few comments on the code.
Also, when testing an error occurred when trying to save weights with this server log:
HttpMessageNotReadableException: JSON parse error: Cannot map null into type boolean (set DeserializationConfig.DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES to 'false' to allow)]
Can we also improve the toast message that occurs in such a case?

src/main/java/de/tum/cit/aet/analysis/domain/CqiWeightConfiguration.java
Outdated
Show resolved
Hide resolved
buildRenormalizedWeightsWithoutEffort and renormalizeWithoutEffort now resolve weights via CqiWeightService instead of reading cqiConfig directly, so custom per-exercise weights are respected in SIMPLE mode. Also fixes a stray duplicate Javadoc opener in CQICalculatorService.
- Remove unused `isValid()` from CqiWeightConfiguration - Fix `isDefault` deserialization by changing boolean to Boolean in CqiWeightsDTO - Replace raw fetch() with generated OpenAPI client in CqiWeightsPanel - Improve error toast messages with fixed title and server error as description - Update tests to mock API client instead of globalThis.fetch
Wrap the panel in a Collapsible so it starts closed and can be expanded by clicking the header. Adds a chevron indicator for the toggle state. Tests updated accordingly.
|
🤖 No OpenAPI or client changes needed. |
…isted value reconstructCqiDetails() was returning participation.getCqi() which was computed at analysis time with whatever weights were active then. After changing custom weights the CQI didn't update. Now recalculates the weighted sum from persisted component scores and current weights.
The AI recompute and SIMPLE mode paths were building ClientResponseDTO with the persisted/locally-calculated CQI instead of the recalculated value from reconstructCqiDetails. Also fixed SIMPLE mode using default weights (buildWeightsDTO() without exerciseId) instead of per-exercise weights via renormalizeWithoutEffort.
|
🤖 No OpenAPI or client changes needed. |
2 similar comments
|
🤖 No OpenAPI or client changes needed. |
|
🤖 No OpenAPI or client changes needed. |
|
🤖 No OpenAPI or client changes needed. |
2 similar comments
|
🤖 No OpenAPI or client changes needed. |
|
🤖 No OpenAPI or client changes needed. |
|
🤖 No OpenAPI or client changes needed. |
|
🤖 No OpenAPI or client changes needed. |
Description
Allow instructors to configure, add, remove, and weight CQI indicators per course.
Closes #191