Skip to content

Commit

Permalink
coderabbit and fixed client and server style
Browse files Browse the repository at this point in the history
  • Loading branch information
az108 committed Sep 14, 2024
1 parent e7d16c7 commit 289d2ea
Show file tree
Hide file tree
Showing 8 changed files with 40 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -560,37 +560,42 @@ public FeedbackAnalysisResponseDTO getFeedbackDetailsOnPage(long exerciseId, Sea
List<FeedbackDetailDTO> feedbackDetails = studentParticipationRepository.findAggregatedFeedbackByExerciseId(exerciseId);
String searchTerm = search.getSearchTerm() != null ? search.getSearchTerm().toLowerCase() : "";

long totalFeedbackCount = feedbackDetails.size();

Predicate<FeedbackDetailDTO> matchesSearchTerm = detail -> searchTerm.isEmpty() || detail.detailText().toLowerCase().contains(searchTerm)
|| detail.testCaseName().toLowerCase().contains(searchTerm) || String.valueOf(detail.count()).contains(searchTerm)
|| String.valueOf(detail.taskNumber()).contains(searchTerm) || String.valueOf(detail.relativeCount()).contains(searchTerm);

feedbackDetails = feedbackDetails.stream().map(detail -> {
double relativeCount = (detail.count() * 100.0) / distinctResultCount;
int taskNumber = IntStream.range(0, tasks.size())
.filter(i -> tasks.stream().toList().get(i).getTestCases().stream().anyMatch(tc -> tc.getTestName().equals(detail.testCaseName()))).findFirst().orElse(-1) + 1;
int taskNumber = determineTaskNumberOfTestCase(detail.testCaseName(), tasks);

return new FeedbackDetailDTO(detail.count(), relativeCount, detail.detailText(), detail.testCaseName(), taskNumber);
}).filter(matchesSearchTerm).collect(Collectors.toList());
}).filter(matchesSearchTerm(searchTerm)).sorted(getComparatorForFeedbackDetails(search)).toList();

return paginateFeedbackDetails(feedbackDetails, search.getPage(), search.getPageSize());
}

private Predicate<FeedbackDetailDTO> matchesSearchTerm(String searchTerm) {
return detail -> searchTerm.isEmpty() || detail.detailText().toLowerCase().contains(searchTerm) || detail.testCaseName().toLowerCase().contains(searchTerm)
|| String.valueOf(detail.count()).contains(searchTerm) || String.valueOf(detail.taskNumber()).contains(searchTerm)
|| String.valueOf(detail.relativeCount()).contains(searchTerm);
}

private Comparator<FeedbackDetailDTO> getComparatorForFeedbackDetails(SearchTermPageableSearchDTO<String> search) {
Map<String, Comparator<FeedbackDetailDTO>> comparators = Map.of("count", Comparator.comparingLong(FeedbackDetailDTO::count), "detailText",
Comparator.comparing(FeedbackDetailDTO::detailText, String.CASE_INSENSITIVE_ORDER), "testCaseName",
Comparator.comparing(FeedbackDetailDTO::testCaseName, String.CASE_INSENSITIVE_ORDER), "taskNumber", Comparator.comparingInt(FeedbackDetailDTO::taskNumber),
"relativeCount", Comparator.comparingDouble(FeedbackDetailDTO::relativeCount));

Comparator<FeedbackDetailDTO> comparator = comparators.getOrDefault(search.getSortedColumn(), (a, b) -> 0);
feedbackDetails.sort(search.getSortingOrder() == SortingOrder.ASCENDING ? comparator : comparator.reversed());
return search.getSortingOrder() == SortingOrder.ASCENDING ? comparator : comparator.reversed();
}

int pageSize = search.getPageSize();
int page = search.getPage();
private int determineTaskNumberOfTestCase(String testCaseName, Set<ProgrammingExerciseTask> tasks) {
return IntStream.range(0, tasks.size()).filter(i -> tasks.stream().toList().get(i).getTestCases().stream().anyMatch(tc -> tc.getTestName().equals(testCaseName)))
.findFirst().orElse(-1) + 1;
}

private FeedbackAnalysisResponseDTO paginateFeedbackDetails(List<FeedbackDetailDTO> feedbackDetails, int page, int pageSize) {
int start = (page - 1) * pageSize;
int end = Math.min(start + pageSize, feedbackDetails.size());

List<FeedbackDetailDTO> paginatedFeedbackDetails = feedbackDetails.subList(start, end);

int totalPages = (feedbackDetails.size() + pageSize - 1) / pageSize;
return new FeedbackAnalysisResponseDTO(new SearchResultPageDTO<>(paginatedFeedbackDetails, totalPages), totalFeedbackCount);
return new FeedbackAnalysisResponseDTO(new SearchResultPageDTO<>(paginatedFeedbackDetails, totalPages), feedbackDetails.size());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,7 @@ public ResponseEntity<Result> createResultForExternalSubmission(@PathVariable Lo
* @param search The pageable search DTO containing page number, page size, sorting options, and a search term for filtering results.
* @return A {@link ResponseEntity} containing a {@link FeedbackAnalysisResponseDTO}, which includes the paginated feedback details and the total count of distinct results.
*/
@PostMapping("/exercises/{exerciseId}/feedback-details-paged")
@PostMapping("exercises/{exerciseId}/feedback-details-paged")
@EnforceAtLeastEditorInExercise
public ResponseEntity<FeedbackAnalysisResponseDTO> getFeedbackDetailsPaged(@PathVariable long exerciseId, @RequestBody SearchTermPageableSearchDTO<String> search) {
FeedbackAnalysisResponseDTO response = resultService.getFeedbackDetailsOnPage(exerciseId, search);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,10 @@ <h5 class="mb-3" jhiTranslate="artemisApp.programmingExercise.configureGrading.f
<p>{{ feedbackDetail.detailText }}</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-primary" (click)="activeModal.close('Close click')">Ok</button>
<button
type="button"
class="btn btn-outline-primary"
jhiTranslate="artemisApp.programmingExercise.configureGrading.feedbackAnalysis.feedbackModal.ok"
(click)="activeModal.close('Close click')"
></button>
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ export interface FeedbackDetail {
taskNumber: number;
}

@Injectable({ providedIn: 'root' })
@Injectable()
export class FeedbackAnalysisService extends BaseApiHttpService {
constructor() {
super();
Expand Down
3 changes: 2 additions & 1 deletion src/main/webapp/i18n/de/programmingExercise.json
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,8 @@
"error": "Beim Laden des Feedback ist ein Fehler aufgetreten.",
"feedbackModal": {
"header": "Fehler Details",
"feedbackTitle": "Testfall Feedback"
"feedbackTitle": "Testfall Feedback",
"ok": "Ok"
}
},
"help": {
Expand Down
3 changes: 2 additions & 1 deletion src/main/webapp/i18n/en/programmingExercise.json
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,8 @@
"error": "An error occurred while loading the feedback.",
"feedbackModal": {
"header": "Error Details",
"feedbackTitle": "Test Case Feedback"
"feedbackTitle": "Test Case Feedback",
"ok": "Ok"
}
},
"help": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ describe('FeedbackAnalysisComponent', () => {
FeedbackAnalysisService,
],
}).compileComponents();

fixture = TestBed.createComponent(FeedbackAnalysisComponent);
component = fixture.componentInstance;
feedbackAnalysisService = fixture.debugElement.injector.get(FeedbackAnalysisService);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { TestBed } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
import { FeedbackAnalysisResponse, FeedbackAnalysisService, FeedbackDetail } from 'app/exercises/programming/manage/grading/feedback-analysis/feedback-analysis.service';
import { SearchTermPageableSearch, SortingOrder } from 'app/shared/table/pageable-table';

describe('FeedbackAnalysisService', () => {
let service: FeedbackAnalysisService;
Expand Down Expand Up @@ -32,7 +33,13 @@ describe('FeedbackAnalysisService', () => {

describe('search', () => {
it('should retrieve feedback details for a given exercise', async () => {
const pageable = { page: 1, pageSize: 10, searchTerm: '', sortingOrder: 'ASC', sortedColumn: 'count' };
const pageable: SearchTermPageableSearch = {
page: 1,
pageSize: 10,
searchTerm: '',
sortingOrder: SortingOrder.ASCENDING,
sortedColumn: 'count',
};
const exerciseId = 1;

const responsePromise = service.search(pageable, { exerciseId });
Expand Down

0 comments on commit 289d2ea

Please sign in to comment.