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 87fd013..258cd54 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 @@ -1,9 +1,13 @@ package ru.espada.ep.iptip.study_groups; import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import jakarta.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import ru.espada.ep.iptip.study_groups.models.requests.*; + +import java.security.Principal; @RestController @SecurityRequirement(name = "JWT") @@ -13,6 +17,59 @@ public class StudyGroupController { private StudyGroupRepository studyGroupRepository; // 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; + } + + @PostMapping("/studyGroupWithUsers") + public ResponseEntity createStudyGroupWithUsers(Principal principal, @Valid @RequestBody CreateStudyGroupWithUsersRequest createStudyGroupWithUsersRequest) { + // TODO: implementation + return null; + } + + @PatchMapping("/studyGroup") + public ResponseEntity modifyStudyGroup(Principal principal, @Valid @RequestBody ModifyStudyGroupRequest modifyStudyGroupRequest) { + // TODO: implementation + return null; + } + + @DeleteMapping("/studyGroup") + public ResponseEntity deleteStudyGroup(Principal principal, Long studyGroupId) { + // TODO: implementation + return null; + } + + @GetMapping("/studyGroup") + public ResponseEntity getStudyGroup(Principal principal, Long studyGroupId) { + // TODO: implementation + return null; + } + + @PostMapping("/attachUser") + public ResponseEntity attachUserToStudyGroup(Principal principal, @Valid @RequestBody AttachUserToStudyGroupRequest attachUserToStudyGroupRequest) { + // TODO: implementation + return null; + } + + @DeleteMapping("/detachUser") + public ResponseEntity detachUserFromStudyGroup(Principal principal, @Valid @RequestBody DetachUserFromStudyGroupRequest detachUserFromStudyGroupRequest) { + // TODO: implementation + return null; + } + + @PutMapping("/setStudyGroupSemester") + public ResponseEntity setStudyGroupSemester(Principal principal, @Valid @RequestBody SetStudyGroupMembersSemesterRequest setStudyGroupMembersSemesterRequest) { + // TODO: implementation + return null; + } + + @GetMapping("/getStudyGroupMembers") + public ResponseEntity getStudyGroupMembers(Principal principal, Long studyGroupId) { + // TODO: implementation + return null; + } @Autowired public void setStudyGroupRepository(StudyGroupRepository studyGroupRepository) { 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 7dc81ff..07fcd53 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 @@ -1,5 +1,21 @@ package ru.espada.ep.iptip.study_groups; +import ru.espada.ep.iptip.study_groups.models.requests.*; + +import java.security.Principal; +import java.util.List; + public interface StudyGroupService { boolean hasPermission(String name, Long studyGroupId); + + StudyGroupEntity createStudyGroup(Principal principal, CreateStudyGroupRequest request); + StudyGroupEntity createStudyGroupWithUsers(Principal principal, CreateStudyGroupWithUsersRequest createRequest); + StudyGroupEntity modifyStudyGroup(Principal principal, ModifyStudyGroupRequest request); + StudyGroupEntity getStudyGroup(Principal principal, Long studyGroupId); + void deleteStudyGroup(Principal principal, Long studyGroupId); + + void attachUserToStudyGroup(Principal principal, AttachUserToStudyGroupRequest 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 2132fe1..e4e9ccf 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,6 +3,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +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; @@ -12,6 +13,7 @@ import ru.espada.ep.iptip.user.permission.UserPermissionEntity; import ru.espada.ep.iptip.user.permission.UserPermissionService; +import java.security.Principal; import java.util.List; @RequiredArgsConstructor @@ -55,6 +57,59 @@ public boolean hasPermission(String username, Long studyGroupId) { )); } + @Override + public StudyGroupEntity createStudyGroup(Principal principal, CreateStudyGroupRequest request) { + // TODO: implementation + return null; + } + + @Override + public StudyGroupEntity createStudyGroupWithUsers(Principal principal, CreateStudyGroupWithUsersRequest createRequest) { + // TODO: implementation + return null; + } + + @Override + public StudyGroupEntity modifyStudyGroup(Principal principal, ModifyStudyGroupRequest request) { + // TODO: implementation + return null; + } + + @Override + public StudyGroupEntity getStudyGroup(Principal principal, Long studyGroupId) { + // TODO: implementation + return null; + } + + @Override + public void deleteStudyGroup(Principal principal, Long studyGroupId) { + // TODO: implementation + + } + + @Override + public void attachUserToStudyGroup(Principal principal, AttachUserToStudyGroupRequest request) { + // TODO: implementation + + } + + @Override + public void detachUserFromStudyGroup(Principal principal, DetachUserFromStudyGroupRequest request) { + // TODO: implementation + + } + + @Override + public void setStudyGroupMembersSemester(Principal principal, SetStudyGroupMembersSemesterRequest request) { + // TODO: implementation + } + + @Override + public List getStudyGroupMembers(Principal principal, Long studyGroupId) { + // TODO: implementation + return List.of(); + } + @Autowired public void setStudyGroupRepository(StudyGroupRepository studyGroupRepository) { this.studyGroupRepository = studyGroupRepository; 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/AttachUserToStudyGroupRequest.java new file mode 100644 index 0000000..76715e1 --- /dev/null +++ b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/AttachUserToStudyGroupRequest.java @@ -0,0 +1,15 @@ +package ru.espada.ep.iptip.study_groups.models.requests; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class AttachUserToStudyGroupRequest { + private Long studyGroupId; + private Long userId; +} diff --git a/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/CreateStudyGroupRequest.java b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/CreateStudyGroupRequest.java new file mode 100644 index 0000000..e738cb3 --- /dev/null +++ b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/CreateStudyGroupRequest.java @@ -0,0 +1,15 @@ +package ru.espada.ep.iptip.study_groups.models.requests; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CreateStudyGroupRequest { + private String name; + private Long facultyId; +} 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 new file mode 100644 index 0000000..7b31f58 --- /dev/null +++ b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/CreateStudyGroupWithUsersRequest.java @@ -0,0 +1,19 @@ +package ru.espada.ep.iptip.study_groups.models.requests; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class CreateStudyGroupWithUsersRequest { + private Long id; + private String name; + private Long facultyId; + private List users; +} diff --git a/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/DetachUserFromStudyGroupRequest.java b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/DetachUserFromStudyGroupRequest.java new file mode 100644 index 0000000..f3296ec --- /dev/null +++ b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/DetachUserFromStudyGroupRequest.java @@ -0,0 +1,15 @@ +package ru.espada.ep.iptip.study_groups.models.requests; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class DetachUserFromStudyGroupRequest { + private Long studyGroupId; + private Long userId; +} diff --git a/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/ModifyStudyGroupRequest.java b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/ModifyStudyGroupRequest.java new file mode 100644 index 0000000..826a19d --- /dev/null +++ b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/ModifyStudyGroupRequest.java @@ -0,0 +1,16 @@ +package ru.espada.ep.iptip.study_groups.models.requests; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class ModifyStudyGroupRequest { + private Long id; + private String name; + private Long facultyId; +} diff --git a/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/SetStudyGroupMembersSemesterRequest.java b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/SetStudyGroupMembersSemesterRequest.java new file mode 100644 index 0000000..80b269c --- /dev/null +++ b/MainService/src/main/java/ru/espada/ep/iptip/study_groups/models/requests/SetStudyGroupMembersSemesterRequest.java @@ -0,0 +1,15 @@ +package ru.espada.ep.iptip.study_groups.models.requests; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class SetStudyGroupMembersSemesterRequest { + private Long studyGroupId; + private Long semesterId; +} diff --git a/MainService/src/main/java/ru/espada/ep/iptip/user/UserService.java b/MainService/src/main/java/ru/espada/ep/iptip/user/UserService.java index 24eecde..41e83bd 100644 --- a/MainService/src/main/java/ru/espada/ep/iptip/user/UserService.java +++ b/MainService/src/main/java/ru/espada/ep/iptip/user/UserService.java @@ -159,26 +159,26 @@ public String getAvatarUrl(String name) { @Transactional public InstituteInfoResponse getInstituteInfo(String username) { - UserEntity user = getUser(username); - ProfileEntity profile = user.getProfile(); + UserEntity user = userRepository.findByUsername(username).orElseThrow(() -> new UsernameNotFoundException("User not found")); + ProfileEntity profile = profileRepository.findByUserId(user.getId()); int semester = profile.getSemester(); int course = semester / 2; StudyGroupEntity studyGroup = user.getStudyGroups().stream().findFirst().orElse(null); // FIXME: this may be null - FacultyEntity faculty = studyGroup.getFaculty(); - MajorEntity major = faculty.getMajor(); - InstituteEntity insitute = major.getInstitute(); - UniversityEntity university = insitute.getUniversity(); + FacultyEntity faculty = studyGroup == null ? null : studyGroup.getFaculty(); + MajorEntity major = faculty == null ? null : faculty.getMajor(); + InstituteEntity insitute = major == null ? null : major.getInstitute(); + UniversityEntity university = insitute == null ? null : insitute.getUniversity(); return InstituteInfoResponse.builder() - .major(major.getName()) - .majorCode(major.getMajorCode()) - .faculty(faculty.getName()) - .institute(insitute.getName()) - .university(university.getName()) - .studyGroup(studyGroup.getName()) + .major(major == null ? null : major.getName()) + .majorCode(major == null ? null : major.getMajorCode()) + .faculty(faculty == null ? null : faculty.getName()) + .institute(insitute == null ? null : insitute.getName()) + .university(university == null ? null : university.getName()) + .studyGroup(studyGroup == null ? null : studyGroup.getName()) .semester(semester) .course(course) .build(); diff --git a/MainService/src/main/java/ru/espada/ep/iptip/user/profile/ProfileRepository.java b/MainService/src/main/java/ru/espada/ep/iptip/user/profile/ProfileRepository.java index 152eade..4f59484 100644 --- a/MainService/src/main/java/ru/espada/ep/iptip/user/profile/ProfileRepository.java +++ b/MainService/src/main/java/ru/espada/ep/iptip/user/profile/ProfileRepository.java @@ -5,4 +5,5 @@ @Repository public interface ProfileRepository extends JpaRepository { + ProfileEntity findByUserId(Object unknownAttr1); }