diff --git a/BackEnd/src/main/java/studycave/studycaverestservice/controller/GroupController.java b/BackEnd/src/main/java/studycave/studycaverestservice/controller/GroupController.java index 5a77013..96ee7d3 100644 --- a/BackEnd/src/main/java/studycave/studycaverestservice/controller/GroupController.java +++ b/BackEnd/src/main/java/studycave/studycaverestservice/controller/GroupController.java @@ -99,12 +99,12 @@ public class GroupController { } @GetMapping("/{group_id}/content/{type}") - public ResponseEntity getContent(@PathVariable(required = true) Long group_id, @PathVariable(required = true) String type) { + public ResponseEntity getContent(@PathVariable(required = true) Integer group_id, @PathVariable(required = true) String type) { return this.groupService.getContent(group_id,type); } @DeleteMapping("/{group_id}/content/{type}/{content_id}") - public ResponseEntity deleteContent(@PathVariable(required = true) Long group_id, @PathVariable(required = true) String type, @PathVariable(required = true) Long content_id) { + public ResponseEntity deleteContent(@PathVariable(required = true) Integer group_id, @PathVariable(required = true) String type, @PathVariable(required = true) Long content_id) { return this.groupService.deleteContent(group_id, type, content_id); } @@ -155,7 +155,7 @@ public class GroupController { } @GetMapping("/{groupId}/content/{type}/unverified") - public ResponseEntity getUnverifiedContent(@PathVariable(required = true) Long groupId, + public ResponseEntity getUnverifiedContent(@PathVariable(required = true) Integer groupId, @PathVariable(required = true) String type) { return this.groupService.getUnverifiedContent(groupId, type); } @@ -186,4 +186,16 @@ public class GroupController { public ResponseEntity getGroupTestLeaderboard(@PathVariable(required = true) Integer group_id) { return this.groupService.getGroupTestLeaderboard(group_id); } + + @GetMapping("/{groupId}/tests") + public ResponseEntity listTestsInGroup(@PathVariable Integer groupId) { + return groupService.getGroupTests(groupId); + } + + @GetMapping("/{groupId}/tests/{testId}/results") + public ResponseEntity listTestsResultsInGroup(@PathVariable Integer groupId, @PathVariable Long testId) { + return groupService.getGroupTestsWithResults(groupId, testId); + } + + } diff --git a/BackEnd/src/main/java/studycave/studycaverestservice/model/flashcardset/SetRepository.java b/BackEnd/src/main/java/studycave/studycaverestservice/model/flashcardset/SetRepository.java index 23b4d68..5dce93a 100644 --- a/BackEnd/src/main/java/studycave/studycaverestservice/model/flashcardset/SetRepository.java +++ b/BackEnd/src/main/java/studycave/studycaverestservice/model/flashcardset/SetRepository.java @@ -18,10 +18,10 @@ public interface SetRepository extends JpaRepository { @Query("select t from Set t where (t.permission = 'GROUP' and t.group.id = :g and t.status = 'VERIFIED' )") - List findSetByGroup(@Param("g") Long g); + List findSetByGroup(@Param("g") Integer g); @Query("select t from Set t where (t.permission = 'GROUP' and t.group.id = :g and t.status = 'UNVERIFIED' )") - List findWaitingSetByGroupKey(@Param("g") Long g); + List findWaitingSetByGroupKey(@Param("g") Integer g); } diff --git a/BackEnd/src/main/java/studycave/studycaverestservice/model/material/MaterialRepository.java b/BackEnd/src/main/java/studycave/studycaverestservice/model/material/MaterialRepository.java index f92de6f..96025ec 100644 --- a/BackEnd/src/main/java/studycave/studycaverestservice/model/material/MaterialRepository.java +++ b/BackEnd/src/main/java/studycave/studycaverestservice/model/material/MaterialRepository.java @@ -18,9 +18,9 @@ public interface MaterialRepository extends JpaRepository { @Query("select t from Material t where (t.permission = 'GROUP' and t.group.id = :g and t.status = 'VERIFIED' )") - List findMaterialByGroup(@Param("g") Long g); + List findMaterialByGroup(@Param("g") Integer g); @Query("select t from Material t where (t.permission = 'GROUP' and t.group.id = :g and t.status = 'UNVERIFIED' )") - List findWaitingMaterialByGroupKey(@Param("g") Long g); + List findWaitingMaterialByGroupKey(@Param("g") Integer g); } diff --git a/BackEnd/src/main/java/studycave/studycaverestservice/model/simpleTest/dto/SimpleTestDTO.java b/BackEnd/src/main/java/studycave/studycaverestservice/model/simpleTest/dto/SimpleTestDTO.java index 90aee38..6589c02 100644 --- a/BackEnd/src/main/java/studycave/studycaverestservice/model/simpleTest/dto/SimpleTestDTO.java +++ b/BackEnd/src/main/java/studycave/studycaverestservice/model/simpleTest/dto/SimpleTestDTO.java @@ -1,6 +1,7 @@ package studycave.studycaverestservice.model.simpleTest.dto; import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Getter; @@ -13,6 +14,7 @@ import java.sql.Date; @Setter @AllArgsConstructor @NoArgsConstructor +@JsonInclude(JsonInclude.Include.NON_NULL) public class SimpleTestDTO { private Long id; private String title; @@ -26,4 +28,6 @@ public class SimpleTestDTO { private Long grade; private String group; + private int maxScore; + } diff --git a/BackEnd/src/main/java/studycave/studycaverestservice/model/studyGroup/GroupService.java b/BackEnd/src/main/java/studycave/studycaverestservice/model/studyGroup/GroupService.java index bfcaf87..eed253f 100644 --- a/BackEnd/src/main/java/studycave/studycaverestservice/model/studyGroup/GroupService.java +++ b/BackEnd/src/main/java/studycave/studycaverestservice/model/studyGroup/GroupService.java @@ -1,9 +1,7 @@ package studycave.studycaverestservice.model.studyGroup; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; +import java.util.*; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @@ -28,12 +26,15 @@ import studycave.studycaverestservice.model.flashcardset.Set; import studycave.studycaverestservice.model.flashcardset.SetRepository; import studycave.studycaverestservice.model.material.Material; import studycave.studycaverestservice.model.material.MaterialRepository; +import studycave.studycaverestservice.model.simpleTest.dto.SimpleTestDTO; import studycave.studycaverestservice.model.studyGroup.dto.*; import studycave.studycaverestservice.model.studyGroupMember.StudyGroupMember; import studycave.studycaverestservice.model.studyGroupMember.StudyGroupMemberRepository; import studycave.studycaverestservice.model.test.Test; import studycave.studycaverestservice.model.test.TestRepository; +import studycave.studycaverestservice.model.test.dto.TestResultResponseDTO; import studycave.studycaverestservice.model.test.question.*; +import studycave.studycaverestservice.model.test.result.TestResult; import studycave.studycaverestservice.model.test.result.TestResultRepository; import studycave.studycaverestservice.model.user.User; import studycave.studycaverestservice.model.user.UserRepository; @@ -176,6 +177,45 @@ public class GroupService { return new ResponseEntity<>(groupKey, HttpStatus.OK); } + public ResponseEntity getGroupTests(Integer group_id) { + ArrayList simpleTestDTOS = new ArrayList(); + List tests = testRepository.findAllByGroupIdOrderByAddDateDesc(group_id); + for (Test test : tests) { + SimpleTestDTO simpleTestDTO = new SimpleTestDTO(); + simpleTestDTO.setId(test.getId()); + simpleTestDTO.setTitle(test.getTitle()); + int testScore = 0; + for (Question question : test.getQuestions()) + testScore += question.getPoints(); + simpleTestDTO.setMaxScore(testScore); + + simpleTestDTOS.add(simpleTestDTO); + } + return new ResponseEntity>(simpleTestDTOS,HttpStatus.OK); + } + + public ResponseEntity getGroupTestsWithResults(Integer groupId, Long testId) { + Optional test = testRepository.findByIdAndGroupId(testId, groupId); + + if (!test.isPresent()) + return new ResponseEntity<>(HttpStatus.NOT_FOUND); + + List testResults = testResultRepository.findAllByIdTestOrderByIdTestDesc(testId); + + List testResultResponseDTOS = new ArrayList<>(); + + for (TestResult testResult : testResults) { + Optional userCheck = userRepository.findById(testResult.getIdOwner()); + if (userCheck.isPresent()) { + User user = userCheck.get(); + testResultResponseDTOS.add(new TestResultResponseDTO(user.getName(), user.getSurname(), testResult.getUserScore(), (testResult.getUserScore()/testResult.getMaxScore()) * 100)); + } + } + Collections.sort(testResultResponseDTOS, + Comparator.comparing(TestResultResponseDTO::getName)); + return new ResponseEntity>(testResultResponseDTOS,HttpStatus.OK); + } + public List getMyGroups(Long id) { // User user = new User(); // user = this.userRepository.findByUsername(username).orElse(null); @@ -339,7 +379,7 @@ public class GroupService { } - public ResponseEntity getContent(Long group_id, String type) { + public ResponseEntity getContent(Integer group_id, String type) { List contents = new ArrayList<>(); switch (type){ @@ -391,7 +431,7 @@ public class GroupService { } - public ResponseEntity getUnverifiedContent(Long group_id, String type){ + public ResponseEntity getUnverifiedContent(Integer group_id, String type){ List contents = new ArrayList<>(); switch (type){ @@ -598,7 +638,7 @@ public class GroupService { return new ResponseEntity<>("Usunięto komentarz", HttpStatus.OK); } - public ResponseEntity deleteContent(Long group_id, String type, Long content_id){ + public ResponseEntity deleteContent(Integer group_id, String type, Long content_id){ switch (type) { case "tests": Test test = this.testRepository.findById(content_id).orElse(null); diff --git a/BackEnd/src/main/java/studycave/studycaverestservice/model/test/TestRepository.java b/BackEnd/src/main/java/studycave/studycaverestservice/model/test/TestRepository.java index 4168537..001e598 100644 --- a/BackEnd/src/main/java/studycave/studycaverestservice/model/test/TestRepository.java +++ b/BackEnd/src/main/java/studycave/studycaverestservice/model/test/TestRepository.java @@ -5,15 +5,21 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.util.List; +import java.util.Optional; public interface TestRepository extends JpaRepository { + Optional findByIdAndGroupId(Long testId, Integer groupId); + @Query("select t from Test t where (t.permission = 'GROUP' and t.group.id = :g and t.status = 'VERIFIED' )") - List findTestByGroup(@Param("g") Long g); + List findTestByGroup(@Param("g") Integer g); @Query("select t from Test t where (t.permission = 'GROUP' and t.group.id = :g and t.status = 'UNVERIFIED' )") - List findWaitingTestByGroupKey(@Param("g") Long g); + List findWaitingTestByGroupKey(@Param("g") Integer g); + + + List findAllByGroupIdOrderByAddDateDesc(Integer id); } diff --git a/BackEnd/src/main/java/studycave/studycaverestservice/model/test/dto/TestResultResponseDTO.java b/BackEnd/src/main/java/studycave/studycaverestservice/model/test/dto/TestResultResponseDTO.java new file mode 100644 index 0000000..dece736 --- /dev/null +++ b/BackEnd/src/main/java/studycave/studycaverestservice/model/test/dto/TestResultResponseDTO.java @@ -0,0 +1,31 @@ +package studycave.studycaverestservice.model.test.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.text.DecimalFormat; + +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class TestResultResponseDTO { + + @Getter + private String name; + + @Getter + private String surname; + + @Getter + private float userScore; + + private float percent; + + public float getPercent(){ + DecimalFormat df = new DecimalFormat(); + df.setMaximumFractionDigits(2); + return Float.parseFloat(df.format(this.percent)); + } +} diff --git a/BackEnd/src/main/java/studycave/studycaverestservice/model/test/result/TestResultRepository.java b/BackEnd/src/main/java/studycave/studycaverestservice/model/test/result/TestResultRepository.java index 9851d7b..f62929a 100644 --- a/BackEnd/src/main/java/studycave/studycaverestservice/model/test/result/TestResultRepository.java +++ b/BackEnd/src/main/java/studycave/studycaverestservice/model/test/result/TestResultRepository.java @@ -6,6 +6,8 @@ import java.util.List; public interface TestResultRepository extends JpaRepository { + List findAllByIdTestOrderByIdTestDesc(Long testId); + List findByIdOwner(Long id); List findByIdOwnerAndIdTest(Long id, Long id2);