diff --git a/doc/api.yml b/doc/api.yml index fffa62d6da..b8eb4204d9 100644 --- a/doc/api.yml +++ b/doc/api.yml @@ -463,7 +463,9 @@ paths: in: query description: Filter students by status value return all by default schema: - $ref: '#/components/schemas/EnableStatus' + type: array + items: + $ref: '#/components/schemas/EnableStatus' - name: sex required: false in: query diff --git a/src/main/java/school/hei/haapi/endpoint/rest/controller/StudentController.java b/src/main/java/school/hei/haapi/endpoint/rest/controller/StudentController.java index f448c07f6f..674870859c 100644 --- a/src/main/java/school/hei/haapi/endpoint/rest/controller/StudentController.java +++ b/src/main/java/school/hei/haapi/endpoint/rest/controller/StudentController.java @@ -77,13 +77,15 @@ public List getStudents( @RequestParam(value = "first_name", required = false, defaultValue = "") String firstName, @RequestParam(value = "last_name", required = false, defaultValue = "") String lastName, @RequestParam(value = "course_id", required = false, defaultValue = "") String courseId, - @RequestParam(name = "status", required = false) EnableStatus status, + @RequestParam(name = "status", required = false, defaultValue = "ENABLED,SUSPENDED") + List status, @RequestParam(name = "sex", required = false) Sex sex, @RequestParam(name = "work_study_status", required = false) WorkStudyStatus workStatus, @RequestParam(name = "commitment_begin_date", required = false) Instant commitmentBeginDate, @RequestParam(name = "exclude_groups", required = false) List excludeGroupIds) { User.Sex domainSex = sexEnumMapper.toDomainSexEnum(sex); - User.Status domainStatus = statusEnumMapper.toDomainStatus(status); + List domainStatus = + status == null ? null : status.stream().map(statusEnumMapper::toDomainStatus).toList(); return userService .getByLinkedCourse( STUDENT, diff --git a/src/main/java/school/hei/haapi/repository/dao/UserManagerDao.java b/src/main/java/school/hei/haapi/repository/dao/UserManagerDao.java index 209350fb52..ece4d84749 100644 --- a/src/main/java/school/hei/haapi/repository/dao/UserManagerDao.java +++ b/src/main/java/school/hei/haapi/repository/dao/UserManagerDao.java @@ -29,7 +29,7 @@ public List findByCriteria( String firstName, String lastName, Pageable pageable, - User.Status status, + List status, User.Sex sex, WorkStudyStatus workStatus, Instant commitmentBeginDate, @@ -80,7 +80,7 @@ public List findByCriteria( } if (status != null) { - predicate = builder.and(predicate, builder.equal(root.get("status"), status)); + predicate = builder.and(predicate, root.get("status").in(status)); } if (sex != null) { diff --git a/src/main/java/school/hei/haapi/service/UserService.java b/src/main/java/school/hei/haapi/service/UserService.java index 2a7e7bd371..7da50e74c6 100644 --- a/src/main/java/school/hei/haapi/service/UserService.java +++ b/src/main/java/school/hei/haapi/service/UserService.java @@ -214,9 +214,10 @@ public List getByCriteria( User.Sex sex) { Pageable pageable = PageRequest.of(page.getValue() - 1, pageSize.getValue(), Sort.by(ASC, "ref")); + List statusList = status == null ? null : List.of(status); return userManagerDao.findByCriteria( - role, ref, firstName, lastName, pageable, status, sex, null, null, null, null, null); + role, ref, firstName, lastName, pageable, statusList, sex, null, null, null, null, null); } public List getByLinkedCourse( @@ -227,7 +228,7 @@ public List getByLinkedCourse( String courseId, PageFromOne page, BoundedPageSize pageSize, - User.Status status, + List status, User.Sex sex, WorkStudyStatus workStatus, Instant commitmentBeginDate, diff --git a/src/test/java/school/hei/haapi/integration/StudentIT.java b/src/test/java/school/hei/haapi/integration/StudentIT.java index e4383fda74..867e4aaba0 100644 --- a/src/test/java/school/hei/haapi/integration/StudentIT.java +++ b/src/test/java/school/hei/haapi/integration/StudentIT.java @@ -10,6 +10,7 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static school.hei.haapi.endpoint.rest.model.EnableStatus.DISABLED; import static school.hei.haapi.endpoint.rest.model.EnableStatus.ENABLED; import static school.hei.haapi.endpoint.rest.model.EnableStatus.SUSPENDED; import static school.hei.haapi.endpoint.rest.model.PaymentFrequency.MONTHLY; @@ -79,7 +80,6 @@ import school.hei.haapi.endpoint.rest.client.ApiException; import school.hei.haapi.endpoint.rest.model.Coordinates; import school.hei.haapi.endpoint.rest.model.CrupdateStudent; -import school.hei.haapi.endpoint.rest.model.EnableStatus; import school.hei.haapi.endpoint.rest.model.Fee; import school.hei.haapi.endpoint.rest.model.Group; import school.hei.haapi.endpoint.rest.model.Statistics; @@ -271,7 +271,7 @@ public static Student disabledStudent1() { .lastName("One") .email("test+disable1@hei.school") .ref("STD29001") - .status(EnableStatus.DISABLED) + .status(DISABLED) .sex(M) .birthDate(LocalDate.parse("2000-12-01")) .entranceDatetime(Instant.parse("2021-11-08T08:25:24.00Z")) @@ -498,8 +498,7 @@ void manager_read_by_disabled_status_ok() throws ApiException { UsersApi api = new UsersApi(manager1Client); List actualStudents = - api.getStudents( - 1, 10, null, null, null, null, EnableStatus.DISABLED, null, null, null, null); + api.getStudents(1, 10, null, null, null, null, List.of(DISABLED), null, null, null, null); assertEquals(2, actualStudents.size()); assertTrue(actualStudents.contains(disabledStudent1())); } @@ -511,7 +510,7 @@ void manager_read_by_suspended_status_ok() throws ApiException { UsersApi api = new UsersApi(manager1Client); List actualStudents = - api.getStudents(1, 10, null, null, null, null, SUSPENDED, null, null, null, null); + api.getStudents(1, 10, null, null, null, null, List.of(SUSPENDED), null, null, null, null); assertEquals(1, actualStudents.size()); assertTrue(actualStudents.contains(suspendedStudent1())); } @@ -535,7 +534,7 @@ void manager_read_by_status_and_sex_ok() throws ApiException { UsersApi api = new UsersApi(manager1Client); List actualStudents = - api.getStudents(1, 10, null, null, null, null, EnableStatus.DISABLED, F, null, null, null); + api.getStudents(1, 10, null, null, null, null, List.of(DISABLED), F, null, null, null); assertEquals(1, actualStudents.size()); } @@ -988,7 +987,8 @@ void manager_write_suspended_student() throws ApiException { List actual = api.createOrUpdateStudents(List.of(creatableSuspendedStudent()), null); Student created = actual.get(0); List suspended = - api.getStudents(1, 10, null, "Suspended", null, null, SUSPENDED, null, null, null, null); + api.getStudents( + 1, 10, null, "Suspended", null, null, List.of(SUSPENDED), null, null, null, null); assertTrue(suspended.contains(created)); assertEquals(1, actual.size()); @@ -1004,7 +1004,7 @@ void manager_update_student_to_suspended() throws ApiException { api.createOrUpdateStudents(List.of(createStudent2().status(SUSPENDED)), null); Student updated = actual.getFirst(); List suspended = - api.getStudents(1, 10, null, null, null, null, SUSPENDED, null, null, null, null); + api.getStudents(1, 10, null, null, null, null, List.of(SUSPENDED), null, null, null, null); assertTrue(suspended.contains(updated)); assertEquals(1, actual.size()); @@ -1016,11 +1016,50 @@ void stats_are_exact() throws ApiException { UsersApi usersApi = new UsersApi(manager1Client); Integer women = - usersApi.getStudents(1, 200, null, null, null, null, null, F, null, null, null).size(); + usersApi + .getStudents( + 1, + 200, + null, + null, + null, + null, + List.of(SUSPENDED, ENABLED, DISABLED), + F, + null, + null, + null) + .size(); Integer men = - usersApi.getStudents(1, 200, null, null, null, null, null, M, null, null, null).size(); + usersApi + .getStudents( + 1, + 200, + null, + null, + null, + null, + List.of(SUSPENDED, ENABLED, DISABLED), + M, + null, + null, + null) + .size(); Integer totalStudents = - usersApi.getStudents(1, 200, null, null, null, null, null, null, null, null, null).size(); + usersApi + .getStudents( + 1, + 200, + null, + null, + null, + null, + List.of(SUSPENDED, ENABLED, DISABLED), + null, + null, + null, + null) + .size(); Statistics statistics = usersApi.getStats(); assertEquals(statistics.getWomen().getTotal(), women);