From ec730416c0d72a1abb87df9037f603c1183387c6 Mon Sep 17 00:00:00 2001 From: maxdo1511 Date: Tue, 26 Nov 2024 13:53:07 +0300 Subject: [PATCH] groups --- .../study_groups/StudyGroupController.java | 26 ++++----- .../iptip/study_groups/StudyGroupService.java | 2 +- .../study_groups/StudyGroupServiceImpl.java | 56 +++++++++++++++---- ...va => AttachUsersToStudyGroupRequest.java} | 6 +- .../CreateStudyGroupWithUsersRequest.java | 2 +- 5 files changed, 64 insertions(+), 28 deletions(-) rename MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/{AttachUserToStudyGroupRequest.java => AttachUsersToStudyGroupRequest.java} (71%) diff --git a/MainService/src/main/java/ru/espada/ep/iptip/study_groups/StudyGroupController.java b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/StudyGroupController.java index 7d2917b..50fb8e1 100644 --- a/MainService/src/main/java/ru/espada/ep/iptip/study_groups/StudyGroupController.java +++ b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/StudyGroupController.java @@ -16,19 +16,19 @@ @RequestMapping("/studyGroup") public class StudyGroupController { - private StudyGroupRepository studyGroupRepository; + private StudyGroupService studyGroupService; // TODO: add methods: create, add users, remove users, get users, set semester @PostMapping("/studyGroup") - public ResponseEntity createStudyGroup(Principal principal, @Valid @RequestBody CreateStudyGroupRequest createStudyGroupRequest) { - // TODO: implementation - return null; + public ResponseEntity createStudyGroup(Principal principal, @Valid @RequestBody CreateStudyGroupRequest createStudyGroupRequest) { + Long id = studyGroupService.createStudyGroup(principal, createStudyGroupRequest).getId(); + return ResponseEntity.ok(id); } @PostMapping("/studyGroupWithUsers") - public ResponseEntity createStudyGroupWithUsers(Principal principal, @Valid @RequestBody CreateStudyGroupWithUsersRequest createStudyGroupWithUsersRequest) { - // TODO: implementation - return null; + public ResponseEntity createStudyGroupWithUsers(Principal principal, @Valid @RequestBody CreateStudyGroupWithUsersRequest createStudyGroupWithUsersRequest) { + Long id = studyGroupService.createStudyGroupWithUsers(principal, createStudyGroupWithUsersRequest).getId(); + return ResponseEntity.ok(id); } @PatchMapping("/studyGroup") @@ -39,19 +39,19 @@ public ResponseEntity modifyStudyGroup(Principal principal, @Valid @RequestBo @DeleteMapping("/studyGroup") public ResponseEntity deleteStudyGroup(Principal principal, Long studyGroupId) { - // TODO: implementation + studyGroupService.deleteStudyGroup(principal, studyGroupId); return null; } @GetMapping("/studyGroup") public ResponseEntity getStudyGroup(Principal principal, Long studyGroupId) { - // TODO: implementation + studyGroupService.getStudyGroup(principal, studyGroupId); return null; } @PostMapping("/attachUser") - public ResponseEntity attachUserToStudyGroup(Principal principal, @Valid @RequestBody AttachUserToStudyGroupRequest attachUserToStudyGroupRequest) { - // TODO: implementation + public ResponseEntity attachUserToStudyGroup(Principal principal, @Valid @RequestBody AttachUsersToStudyGroupRequest attachUsersToStudyGroupRequest) { + studyGroupService.attachUserToStudyGroup(principal, attachUsersToStudyGroupRequest); return null; } @@ -74,8 +74,8 @@ public ResponseEntity getStudyGroupMembers(Principal principal, Long studyGro } @Autowired - public void setStudyGroupRepository(StudyGroupRepository studyGroupRepository) { - this.studyGroupRepository = studyGroupRepository; + public void setStudyGroupService(StudyGroupService studyGroupService) { + this.studyGroupService = studyGroupService; } } diff --git a/MainService/src/main/java/ru/espada/ep/iptip/study_groups/StudyGroupService.java b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/StudyGroupService.java index 07fcd53..640b1bc 100644 --- a/MainService/src/main/java/ru/espada/ep/iptip/study_groups/StudyGroupService.java +++ b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/StudyGroupService.java @@ -14,7 +14,7 @@ public interface StudyGroupService { StudyGroupEntity getStudyGroup(Principal principal, Long studyGroupId); void deleteStudyGroup(Principal principal, Long studyGroupId); - void attachUserToStudyGroup(Principal principal, AttachUserToStudyGroupRequest request); + void attachUserToStudyGroup(Principal principal, AttachUsersToStudyGroupRequest request); void detachUserFromStudyGroup(Principal principal, DetachUserFromStudyGroupRequest request); void setStudyGroupMembersSemester(Principal principal, SetStudyGroupMembersSemesterRequest request); List getStudyGroupMembers(Principal principal, Long studyGroupId); diff --git a/MainService/src/main/java/ru/espada/ep/iptip/study_groups/StudyGroupServiceImpl.java b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/StudyGroupServiceImpl.java index e4e9ccf..6751a50 100644 --- a/MainService/src/main/java/ru/espada/ep/iptip/study_groups/StudyGroupServiceImpl.java +++ b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/StudyGroupServiceImpl.java @@ -3,11 +3,14 @@ import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import ru.espada.ep.iptip.exceptions.custom.ForbiddenException; import ru.espada.ep.iptip.study_groups.models.requests.*; import ru.espada.ep.iptip.university.UniversityEntity; import ru.espada.ep.iptip.university.institute.InstituteEntity; import ru.espada.ep.iptip.university.institute.major.MajorEntity; import ru.espada.ep.iptip.university.institute.major.faculty.FacultyEntity; +import ru.espada.ep.iptip.university.institute.major.faculty.FacultyRepository; import ru.espada.ep.iptip.user.UserEntity; import ru.espada.ep.iptip.user.UserService; import ru.espada.ep.iptip.user.permission.UserPermissionEntity; @@ -23,6 +26,7 @@ public class StudyGroupServiceImpl implements StudyGroupService { private StudyGroupRepository studyGroupRepository; private UserService userService; private UserPermissionService userPermissionService; + private FacultyRepository facultyRepository; @Override public boolean hasPermission(String username, Long studyGroupId) { @@ -59,14 +63,37 @@ public boolean hasPermission(String username, Long studyGroupId) { @Override public StudyGroupEntity createStudyGroup(Principal principal, CreateStudyGroupRequest request) { - // TODO: implementation - return null; + FacultyEntity faculty = facultyRepository.findById(request.getFacultyId()).orElseThrow(() -> new IllegalArgumentException("Invalid faculty id")); + if (!userPermissionService.hasPermission(principal.getName(), "university.%s.institute.%s.major.%s.faculty.%s".formatted( + faculty.getMajor().getInstitute().getUniversity().getId(), + faculty.getMajor().getInstitute().getId(), + faculty.getMajor().getId(), + faculty.getId() + ))) throw new ForbiddenException("Permission denied"); + + StudyGroupEntity studyGroup = StudyGroupEntity.builder() + .name(request.getName()) + .faculty(faculty) + .build(); + + return studyGroupRepository.save(studyGroup); } @Override + @Transactional public StudyGroupEntity createStudyGroupWithUsers(Principal principal, CreateStudyGroupWithUsersRequest createRequest) { - // TODO: implementation - return null; + StudyGroupEntity studyGroup = createStudyGroup(principal, CreateStudyGroupRequest.builder() + .facultyId(createRequest.getFacultyId()) + .name(createRequest.getName()) + .build()); + + attachUserToStudyGroup(principal, AttachUsersToStudyGroupRequest.builder() + .studyGroupId(studyGroup.getId()) + .userIds(createRequest.getUsers()) + .build() + ); + + return studyGroup; } @Override @@ -77,20 +104,22 @@ public StudyGroupEntity modifyStudyGroup(Principal principal, ModifyStudyGroupRe @Override public StudyGroupEntity getStudyGroup(Principal principal, Long studyGroupId) { - // TODO: implementation - return null; + return studyGroupRepository.findById(studyGroupId).orElse(null); } @Override public void deleteStudyGroup(Principal principal, Long studyGroupId) { - // TODO: implementation - + studyGroupRepository.deleteById(studyGroupId); } @Override - public void attachUserToStudyGroup(Principal principal, AttachUserToStudyGroupRequest request) { - // TODO: implementation - + @Transactional + public void attachUserToStudyGroup(Principal principal, AttachUsersToStudyGroupRequest request) { + StudyGroupEntity studyGroup = studyGroupRepository.findById(request.getStudyGroupId()).orElseThrow(() -> new IllegalArgumentException("Invalid study group id")); + for (Long userId : request.getUserIds()) { + studyGroup.getUsers().add(userService.getUser(userId)); + } + studyGroupRepository.save(studyGroup); } @Override @@ -124,4 +153,9 @@ public void setUserService(UserService userService) { public void setUserPermissionService(UserPermissionService userPermissionService) { this.userPermissionService = userPermissionService; } + + @Autowired + public void setFacultyRepository(FacultyRepository facultyRepository) { + this.facultyRepository = facultyRepository; + } } diff --git a/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/AttachUserToStudyGroupRequest.java b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/AttachUsersToStudyGroupRequest.java similarity index 71% rename from MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/AttachUserToStudyGroupRequest.java rename to MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/AttachUsersToStudyGroupRequest.java index 76715e1..0f9a331 100644 --- a/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/AttachUserToStudyGroupRequest.java +++ b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/AttachUsersToStudyGroupRequest.java @@ -5,11 +5,13 @@ import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; + @Data @AllArgsConstructor @NoArgsConstructor @Builder -public class AttachUserToStudyGroupRequest { +public class AttachUsersToStudyGroupRequest { private Long studyGroupId; - private Long userId; + private List userIds; } diff --git a/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/CreateStudyGroupWithUsersRequest.java b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/CreateStudyGroupWithUsersRequest.java index 7b31f58..f1ab88a 100644 --- a/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/CreateStudyGroupWithUsersRequest.java +++ b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/CreateStudyGroupWithUsersRequest.java @@ -11,7 +11,7 @@ @AllArgsConstructor @NoArgsConstructor @Builder -public class CreateStudyGroupWithUsersRequest { +public class CreateStudyGroupWithUsersRequest { private Long id; private String name; private Long facultyId;