Skip to content

Commit

Permalink
groups
Browse files Browse the repository at this point in the history
  • Loading branch information
maxdo1511 committed Nov 26, 2024
1 parent b64d581 commit ec73041
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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<Long> 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<Long> createStudyGroupWithUsers(Principal principal, @Valid @RequestBody CreateStudyGroupWithUsersRequest createStudyGroupWithUsersRequest) {
Long id = studyGroupService.createStudyGroupWithUsers(principal, createStudyGroupWithUsersRequest).getId();
return ResponseEntity.ok(id);
}

@PatchMapping("/studyGroup")
Expand All @@ -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;
}

Expand All @@ -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;
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -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<Long> getStudyGroupMembers(Principal principal, Long studyGroupId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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) {
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<Long> userIds;
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class CreateStudyGroupWithUsersRequest {
public class CreateStudyGroupWithUsersRequest {
private Long id;
private String name;
private Long facultyId;
Expand Down

0 comments on commit ec73041

Please sign in to comment.