added group controller
This commit is contained in:
parent
bd57610cd5
commit
52ff18a70f
@ -23,6 +23,13 @@
|
|||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter</artifactId>
|
<artifactId>spring-boot-starter</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-text -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-text</artifactId>
|
||||||
|
<version>1.8</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
@ -0,0 +1,189 @@
|
|||||||
|
package studycave.studycaverestservice.controller;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
import org.springframework.security.core.Authentication;
|
||||||
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
|
import org.springframework.web.bind.annotation.CrossOrigin;
|
||||||
|
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.PutMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import studycave.studycaverestservice.model.StudyGroupComment.dto.SimpleStudyGroupCommentDto;
|
||||||
|
import studycave.studycaverestservice.model.studyGroup.CreateGroupDto;
|
||||||
|
import studycave.studycaverestservice.model.studyGroup.GroupService;
|
||||||
|
import studycave.studycaverestservice.model.studyGroup.dto.*;
|
||||||
|
import studycave.studycaverestservice.model.studyGroupMember.StudyGroupMemberRepository;
|
||||||
|
import studycave.studycaverestservice.model.user.UserRepository;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@CrossOrigin
|
||||||
|
@RequestMapping("/groups")
|
||||||
|
@PreAuthorize("isAuthenticated()")
|
||||||
|
@Api
|
||||||
|
public class GroupController {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
GroupService groupService;
|
||||||
|
@Autowired
|
||||||
|
UserRepository userRepository;
|
||||||
|
@Autowired
|
||||||
|
StudyGroupMemberRepository memberRepository;
|
||||||
|
|
||||||
|
// @PreAuthorize("isAuthenticated()")
|
||||||
|
@PreAuthorize("#groupDto.owner == authentication.name")
|
||||||
|
@PostMapping()
|
||||||
|
public ResponseEntity<?> create(@RequestBody CreateGroupDto groupDto) {
|
||||||
|
return this.groupService.createGroup(groupDto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("{group_id}/info")
|
||||||
|
public GroupInfoDto getGroupInfo(@PathVariable(required = true) Long group_id) {
|
||||||
|
return this.groupService.getGroupInfo(group_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/{group_id}/member/{user_id}")
|
||||||
|
public ResponseEntity deleteUserFromGroup(@PathVariable(required = true) Long group_id,
|
||||||
|
@PathVariable(required = true) Long user_id) {
|
||||||
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
String currentPrincipalName = authentication.getName();
|
||||||
|
Long id = userRepository.findByUsername(currentPrincipalName).get().getId();
|
||||||
|
if (this.memberRepository.findUserInGroup(group_id, id).getIsGroupLeader() == true)
|
||||||
|
return this.groupService.deleteUserFromGroup(group_id, user_id);
|
||||||
|
else
|
||||||
|
return new ResponseEntity<>("Brak uprawnien do operacji", HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/{group_id}")
|
||||||
|
public ResponseEntity deleteGroup(@PathVariable(required = true) Long group_id) {
|
||||||
|
return this.groupService.deleteGroup(group_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{group_id}/generate")
|
||||||
|
public ResponseEntity generateCode(@PathVariable(required = true) Long group_id) {
|
||||||
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
String currentPrincipalName = authentication.getName();
|
||||||
|
Long id = userRepository.findByUsername(currentPrincipalName).get().getId();
|
||||||
|
if (this.memberRepository.findUserInGroup(group_id, id).getIsGroupLeader() == true)
|
||||||
|
return this.groupService.generateCode(group_id);
|
||||||
|
else
|
||||||
|
return new ResponseEntity<>("Brak uprawnien do operacji", HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping()
|
||||||
|
public List<SimpleStudyGroupMemberDTO> getMyGroup() {
|
||||||
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
String currentPrincipalName = authentication.getName();
|
||||||
|
Long id = userRepository.findByUsername(currentPrincipalName).get().getId();
|
||||||
|
return this.groupService.getMyGroups(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/members")
|
||||||
|
public ResponseEntity<?> addmember(@RequestBody GroupJoinDto groupDto) {
|
||||||
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
String currentPrincipalName = authentication.getName();
|
||||||
|
Long userId = userRepository.findByUsername(currentPrincipalName).get().getId();
|
||||||
|
return this.groupService.joinToGroup(userId, groupDto.getGroupCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{group_id}/content/{type}")
|
||||||
|
public ResponseEntity<?> getContent(@PathVariable(required = true) Long 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) {
|
||||||
|
return this.groupService.deleteContent(group_id, type, content_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/{groupId}/flashcard-sets")
|
||||||
|
public ResponseEntity<?> addFlashardSet(@PathVariable(required = true) String groupId,
|
||||||
|
@RequestBody List<AddSetDto> setIds) {
|
||||||
|
return this.groupService.addFlashcardSets(groupId, setIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/{groupId}/materials")
|
||||||
|
public ResponseEntity<?> addMaterial(@PathVariable(required = true) String groupId,
|
||||||
|
@RequestBody List<AddMaterialDto> materialIds) {
|
||||||
|
|
||||||
|
return this.groupService.addMaterials(groupId, materialIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/{groupId}/tests")
|
||||||
|
public ResponseEntity<?> addTests(@PathVariable(required = true) String groupId,
|
||||||
|
@RequestBody List<AddTestDto> testIds) {
|
||||||
|
return this.groupService.addTests(groupId, testIds);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/{groupId}/tests/{testId}/status")
|
||||||
|
public ResponseEntity<?> verifyTest(@PathVariable(required = true) String groupId,
|
||||||
|
@PathVariable(required = true) String testId, @Valid @RequestBody VerifyDto dto) {
|
||||||
|
if (dto.getStatus() == VerifyDto.VerifyType.ACCEPTED) {
|
||||||
|
return this.groupService.acceptTest(groupId, testId, dto);
|
||||||
|
}
|
||||||
|
return this.groupService.rejectTest(groupId, testId, dto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/{groupId}/materials/{materialId}/status")
|
||||||
|
public ResponseEntity<?> verifyMaterial(@PathVariable(required = true) String groupId,
|
||||||
|
@PathVariable(required = true) String materialId, @Valid @RequestBody VerifyDto dto) {
|
||||||
|
if (dto.getStatus() == VerifyDto.VerifyType.ACCEPTED) {
|
||||||
|
return this.groupService.acceptMaterial(groupId, materialId, dto);
|
||||||
|
}
|
||||||
|
return this.groupService.rejectMaterial(groupId, materialId, dto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PutMapping("/{groupId}/flashcard-sets/{setId}/status")
|
||||||
|
public ResponseEntity<?> verifySet(@PathVariable(required = true) String groupId,
|
||||||
|
@PathVariable(required = true) String setId, @Valid @RequestBody VerifyDto dto) {
|
||||||
|
if (dto.getStatus() == VerifyDto.VerifyType.ACCEPTED) {
|
||||||
|
return this.groupService.acceptSet(groupId, setId, dto);
|
||||||
|
}
|
||||||
|
return this.groupService.rejectSet(groupId, setId, dto);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{groupId}/content/{type}/unverified")
|
||||||
|
public ResponseEntity<?> getUnverifiedContent(@PathVariable(required = true) Long groupId,
|
||||||
|
@PathVariable(required = true) String type) {
|
||||||
|
return this.groupService.getUnverifiedContent(groupId, type);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{type}/{content_id}/comments")
|
||||||
|
public ResponseEntity<?> getComments(@PathVariable(required = true) String type,
|
||||||
|
@PathVariable(required = true) Long content_id) {
|
||||||
|
return this.groupService.getComments(type, content_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/{type}/{content_id}/comments")
|
||||||
|
public ResponseEntity<?> addComment(@PathVariable(required = true) String type,
|
||||||
|
@PathVariable(required = true) Long content_id, @RequestBody SimpleStudyGroupCommentDto comment) {
|
||||||
|
return this.groupService.addComment(type, content_id, comment);
|
||||||
|
}
|
||||||
|
|
||||||
|
@DeleteMapping("/comments/{comment_id}")
|
||||||
|
public ResponseEntity<?> deleteComment(@PathVariable(required = true) Long comment_id) {
|
||||||
|
return this.groupService.deleteComment(comment_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{group_id}/leaderboard")
|
||||||
|
public ResponseEntity<?> getGroupLeaderboard(@PathVariable(required = true) Long group_id) {
|
||||||
|
return this.groupService.getGroupLeaderboard(group_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{group_id}/testleaderboard")
|
||||||
|
public ResponseEntity<?> getGroupTestLeaderboard(@PathVariable(required = true) Long group_id) {
|
||||||
|
return this.groupService.getGroupTestLeaderboard(group_id);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
package studycave.studycaverestservice.model.StudyGroupComment;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class StudyGroupComment {
|
||||||
|
@Id
|
||||||
|
@Column(name = "id")
|
||||||
|
@GeneratedValue(strategy=GenerationType.IDENTITY)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
@Column(name = "content_id")
|
||||||
|
private Long contentId;
|
||||||
|
|
||||||
|
@Column(name = "user_id")
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
private String text;
|
||||||
|
|
||||||
|
@Column(name = "content_type")
|
||||||
|
private String contentType;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
package studycave.studycaverestservice.model.StudyGroupComment;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import org.springframework.data.repository.query.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface StudyGroupCommentRepository extends JpaRepository<StudyGroupComment , Long> {
|
||||||
|
|
||||||
|
@Query("select c from StudyGroupComment c where ( c.contentId = :id and c.contentType = :t )")
|
||||||
|
List<StudyGroupComment> findCommentsByContent(@Param("t") String t, @Param("id") Long id);
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package studycave.studycaverestservice.model.StudyGroupComment.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@AllArgsConstructor@NoArgsConstructor
|
||||||
|
public class SimpleStudyGroupCommentDto {
|
||||||
|
private String username;
|
||||||
|
private String text;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package studycave.studycaverestservice.model.StudyGroupComment.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class StudyGroupCommentDto {
|
||||||
|
private Long id;
|
||||||
|
private String text;
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,27 @@
|
|||||||
|
package studycave.studycaverestservice.model.flashcardset;
|
||||||
|
|
||||||
|
import org.springframework.data.jpa.repository.JpaRepository;
|
||||||
|
import org.springframework.data.jpa.repository.Query;
|
||||||
|
import org.springframework.data.repository.query.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public interface SetRepository extends JpaRepository<Set, Long> {
|
||||||
|
Set save(Set set);
|
||||||
|
void deleteById(Long id);
|
||||||
|
Optional<Set> findById(Long id);
|
||||||
|
List<Set> findAll();
|
||||||
|
|
||||||
|
@Query("select count(s) from Set s join s.flashcards f where (f.leftSide = :x and f.rightSide = :y and s.id=:id) or (f.leftSide = :y and f.rightSide = :x and s.id=:id)")
|
||||||
|
int findResult(@Param("id") Long id, @Param("x") String x, @Param("y") String y);
|
||||||
|
|
||||||
|
|
||||||
|
@Query("select t from Set t where (t.permission = 'GROUP' and t.group.id = :g and t.status = 'VERIFIED' )")
|
||||||
|
List<Set> findSetByGroup(@Param("g") Long g);
|
||||||
|
|
||||||
|
|
||||||
|
@Query("select t from Set t where (t.permission = 'GROUP' and t.group.id = :g and t.status = 'UNVERIFIED' )")
|
||||||
|
List<Set> findWaitingSetByGroupKey(@Param("g") Long g);
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package studycave.studycaverestservice.model.studyGroup;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class CreateGroupDto {
|
||||||
|
|
||||||
|
private String owner;
|
||||||
|
private String name;
|
||||||
|
private String description;
|
||||||
|
}
|
@ -0,0 +1,692 @@
|
|||||||
|
package studycave.studycaverestservice.model.studyGroup;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.PersistenceContext;
|
||||||
|
|
||||||
|
import org.apache.commons.text.RandomStringGenerator;
|
||||||
|
import org.modelmapper.ModelMapper;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.security.core.Authentication;
|
||||||
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import studycave.studycaverestservice.model.StudyGroupComment.StudyGroupComment;
|
||||||
|
import studycave.studycaverestservice.model.StudyGroupComment.StudyGroupCommentRepository;
|
||||||
|
import studycave.studycaverestservice.model.StudyGroupComment.dto.SimpleStudyGroupCommentDto;
|
||||||
|
import studycave.studycaverestservice.model.StudyGroupComment.dto.StudyGroupCommentDto;
|
||||||
|
import studycave.studycaverestservice.model.badge.Badge;
|
||||||
|
import studycave.studycaverestservice.model.badge.BadgeRepository;
|
||||||
|
import studycave.studycaverestservice.model.flashcard.Flashcard;
|
||||||
|
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.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.question.*;
|
||||||
|
import studycave.studycaverestservice.model.test.result.TestResultRepository;
|
||||||
|
import studycave.studycaverestservice.model.user.User;
|
||||||
|
import studycave.studycaverestservice.model.user.UserRepository;
|
||||||
|
import studycave.studycaverestservice.model.user.dto.LeaderboardDTO;
|
||||||
|
import studycave.studycaverestservice.model.user.dto.SimpleUserInfo;
|
||||||
|
import studycave.studycaverestservice.model.userActivity.UserActivity;
|
||||||
|
import studycave.studycaverestservice.model.userActivity.UserActivityService;
|
||||||
|
import studycave.studycaverestservice.model.userBadge.UserBadge;
|
||||||
|
import studycave.studycaverestservice.model.userBadge.UserBadgeRepository;
|
||||||
|
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class GroupService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
ModelMapper modelMapper;
|
||||||
|
@Autowired
|
||||||
|
GroupRepository groupRepository;
|
||||||
|
@Autowired
|
||||||
|
UserRepository userRepository;
|
||||||
|
@Autowired
|
||||||
|
MaterialRepository materialRepository;
|
||||||
|
@Autowired
|
||||||
|
StudyGroupMemberRepository memberRepository;
|
||||||
|
@Autowired
|
||||||
|
BadgeRepository badgeRepository;
|
||||||
|
@Autowired
|
||||||
|
UserBadgeRepository userBadgeRepository;
|
||||||
|
@Autowired
|
||||||
|
SetRepository setRepository;
|
||||||
|
@Autowired
|
||||||
|
TestRepository testRepository;
|
||||||
|
@Autowired
|
||||||
|
TestResultRepository testResultRepository;
|
||||||
|
@Autowired
|
||||||
|
StudyGroupCommentRepository commentRepository;
|
||||||
|
@Autowired
|
||||||
|
UserActivityService userActivityService;
|
||||||
|
|
||||||
|
@PersistenceContext
|
||||||
|
private EntityManager entityManager;
|
||||||
|
|
||||||
|
public ResponseEntity<?> createGroup(CreateGroupDto groupDto) {
|
||||||
|
StudyGroup group = modelMapper.map(groupDto, StudyGroup.class);
|
||||||
|
RandomStringGenerator generator = new RandomStringGenerator.Builder().withinRange('0', 'z')
|
||||||
|
.filteredBy(Character::isLetterOrDigit).build();
|
||||||
|
|
||||||
|
String groupKey = generator.generate(10);
|
||||||
|
|
||||||
|
while (!this.groupRepository.findByGroupKey(groupKey).isEmpty()) {
|
||||||
|
groupKey = generator.generate(10);
|
||||||
|
}
|
||||||
|
;
|
||||||
|
group.setGroupKey(groupKey);
|
||||||
|
Optional<User> owner = this.userRepository.findByUsername(groupDto.getOwner());
|
||||||
|
if (!owner.isPresent()) {
|
||||||
|
return new ResponseEntity<>("Invalid Owner", HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<StudyGroupMember> members = new ArrayList<>();
|
||||||
|
StudyGroupMember member = new StudyGroupMember();
|
||||||
|
member.setUser(owner.get());
|
||||||
|
member.setIsGroupLeader(true);
|
||||||
|
member.setGroup(group);
|
||||||
|
members.add(member);
|
||||||
|
group.setMembers(members);
|
||||||
|
|
||||||
|
group = this.groupRepository.save(group);
|
||||||
|
GroupDto createdGroupDto = modelMapper.map(group, GroupDto.class);
|
||||||
|
createdGroupDto.setKey(group.getGroupKey());
|
||||||
|
createdGroupDto.setOwner(group.getMembers().get(0).getUser().getUsername());
|
||||||
|
// Badge for creating first group
|
||||||
|
if(userBadgeRepository.findByIdAndUser((long)2, owner.orElse(null).getId()).isEmpty()) {
|
||||||
|
UserBadge badgeAchieved = new UserBadge();
|
||||||
|
Badge badge = new Badge();
|
||||||
|
badge = badgeRepository.findById((long)2).orElse(null);
|
||||||
|
badgeAchieved.setBadge(badge);
|
||||||
|
badgeAchieved.setUser(owner.orElse(null));
|
||||||
|
userBadgeRepository.save(badgeAchieved);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ResponseEntity<GroupDto>(createdGroupDto, HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GroupInfoDto getGroupInfo(Long id) {
|
||||||
|
StudyGroup group = new StudyGroup();
|
||||||
|
group = this.groupRepository.findById(id).orElse(null);
|
||||||
|
GroupInfoDto groupInfo = new GroupInfoDto();
|
||||||
|
groupInfo.setId(group.getId());
|
||||||
|
groupInfo.setName(group.getName());
|
||||||
|
groupInfo.setDescription(group.getDescription());
|
||||||
|
groupInfo.setGroupKey(group.getGroupKey());
|
||||||
|
List<SimpleUserInfo> users = new ArrayList<>();
|
||||||
|
for (StudyGroupMember m : group.getMembers()) {
|
||||||
|
if (m.getIsGroupLeader() != true) {
|
||||||
|
SimpleUserInfo u = new SimpleUserInfo();
|
||||||
|
u.setId(m.getUser().getId());
|
||||||
|
u.setUsername(m.getUser().getUsername());
|
||||||
|
users.add(u);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
groupInfo.setOwner(m.getUser().getUsername());
|
||||||
|
}
|
||||||
|
groupInfo.setUsers(users);
|
||||||
|
return groupInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity deleteUserFromGroup(Long gId, Long pId) {
|
||||||
|
StudyGroupMember user = new StudyGroupMember();
|
||||||
|
user = this.memberRepository.findUserInGroup(gId, pId);
|
||||||
|
this.memberRepository.delete(user);
|
||||||
|
return new ResponseEntity(HttpStatus.OK);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity deleteGroup(Long id) {
|
||||||
|
StudyGroup group = new StudyGroup();
|
||||||
|
group = this.groupRepository.findById(id).orElse(null);
|
||||||
|
for (StudyGroupMember m : group.getMembers()) {
|
||||||
|
this.memberRepository.delete(m);
|
||||||
|
}
|
||||||
|
this.groupRepository.delete(group);
|
||||||
|
return new ResponseEntity(HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> generateCode(Long id) {
|
||||||
|
StudyGroup group = new StudyGroup();
|
||||||
|
group = this.groupRepository.findById(id).orElse(null);
|
||||||
|
RandomStringGenerator generator = new RandomStringGenerator.Builder().withinRange('0', 'z')
|
||||||
|
.filteredBy(Character::isLetterOrDigit).build();
|
||||||
|
|
||||||
|
String groupKey = generator.generate(10);
|
||||||
|
|
||||||
|
while (!this.groupRepository.findByGroupKey(groupKey).isEmpty()) {
|
||||||
|
groupKey = generator.generate(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
group.setGroupKey(groupKey);
|
||||||
|
this.groupRepository.save(group);
|
||||||
|
return new ResponseEntity<>(groupKey, HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<SimpleStudyGroupMemberDTO> getMyGroups(Long id) {
|
||||||
|
// User user = new User();
|
||||||
|
// user = this.userRepository.findByUsername(username).orElse(null);
|
||||||
|
List<StudyGroupMember> groups = new ArrayList<>();
|
||||||
|
groups = this.memberRepository.findByMember(id);
|
||||||
|
List<SimpleStudyGroupMemberDTO> simplegroups = new ArrayList<>();
|
||||||
|
for (StudyGroupMember g : groups) {
|
||||||
|
SimpleStudyGroupMemberDTO s = new SimpleStudyGroupMemberDTO();
|
||||||
|
s.setName(g.getGroup().getName());
|
||||||
|
s.setId(g.getGroup().getId());
|
||||||
|
if (g.getIsGroupLeader() == true)
|
||||||
|
s.setRole("OWNER");
|
||||||
|
else
|
||||||
|
s.setRole("MEMBER");
|
||||||
|
simplegroups.add(s);
|
||||||
|
}
|
||||||
|
return simplegroups;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> joinToGroup(Long userId, String groupCode) {
|
||||||
|
List<StudyGroup> groups = this.groupRepository.findByGroupKey(groupCode);
|
||||||
|
|
||||||
|
if (groups.isEmpty()) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono grupy", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (StudyGroup group : groups) {
|
||||||
|
if (group.getGroupKey().equals(groupCode)) {
|
||||||
|
for (StudyGroupMember member : group.getMembers()) {
|
||||||
|
if (member.getUser().getId() == userId) {
|
||||||
|
return new ResponseEntity<>("Użytkownik znajduje się już w grupie", HttpStatus.CONFLICT);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
StudyGroupMember newMember = new StudyGroupMember();
|
||||||
|
newMember.setIsGroupLeader(false);
|
||||||
|
newMember.setGroup(group);
|
||||||
|
newMember.setUser(this.userRepository.findById(userId).orElse(null));
|
||||||
|
this.memberRepository.save(newMember);
|
||||||
|
GroupDto groupDto = modelMapper.map(group, GroupDto.class);
|
||||||
|
|
||||||
|
// Badge for joining first group
|
||||||
|
if(userBadgeRepository.findByIdAndUser((long)3, userId).isEmpty()) {
|
||||||
|
UserBadge badgeAchieved = new UserBadge();
|
||||||
|
Badge badge = new Badge();
|
||||||
|
badge = badgeRepository.findById((long)3).orElse(null);
|
||||||
|
badgeAchieved.setBadge(badge);
|
||||||
|
badgeAchieved.setUser(userRepository.findById(userId).orElse(null));
|
||||||
|
userBadgeRepository.save(badgeAchieved);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ResponseEntity<GroupDto>(groupDto, HttpStatus.OK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ResponseEntity<>("Niepoprawny kod", HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> addFlashcardSets(String groupId, @RequestBody List<AddSetDto> setIds) {
|
||||||
|
StudyGroup group = this.groupRepository.findById(Long.parseLong(groupId)).orElse(null);
|
||||||
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
User user = userRepository.findByUsername(authentication.getName()).get();
|
||||||
|
|
||||||
|
if (group == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono grupy", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
for (AddSetDto s : setIds) {
|
||||||
|
Long setId = Long.parseLong(s.getSetId());
|
||||||
|
this.setRepository.findById(setId).ifPresent(set -> {
|
||||||
|
List<Flashcard> flashcards = set.getFlashcards();
|
||||||
|
for (Flashcard flashcard : flashcards) {
|
||||||
|
entityManager.detach(flashcard);
|
||||||
|
flashcard.setId(null);
|
||||||
|
}
|
||||||
|
entityManager.detach(set);
|
||||||
|
set.setId(null);
|
||||||
|
set.setPermission("GROUP");
|
||||||
|
set.setStatus("UNVERIFIED");
|
||||||
|
set.setGroup(group);
|
||||||
|
this.setRepository.save(set);
|
||||||
|
this.userActivityService.saveActivity("addedResource", 0, null, user, null, group, null, set, null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return new ResponseEntity<>("Dodano", HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public ResponseEntity<?> addMaterials(String groupId, @RequestBody List<AddMaterialDto> materialIds) {
|
||||||
|
StudyGroup group = this.groupRepository.findById(Long.parseLong(groupId)).orElse(null);
|
||||||
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
User user = userRepository.findByUsername(authentication.getName()).get();
|
||||||
|
|
||||||
|
if (group == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono grupy", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
for (AddMaterialDto m : materialIds) {
|
||||||
|
Long materialId = Long.parseLong(m.getMaterialId());
|
||||||
|
this.materialRepository.findById(materialId).ifPresent(material -> {
|
||||||
|
entityManager.detach(material);
|
||||||
|
material.setId(null);
|
||||||
|
material.setPermission("GROUP");
|
||||||
|
material.setStatus("UNVERIFIED");
|
||||||
|
material.setGroup(group);
|
||||||
|
this.materialRepository.save(material);
|
||||||
|
this.userActivityService.saveActivity("addedResource", 0, null, user, null, group, material, null, null);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return new ResponseEntity<>("Dodano", HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> addTests(String groupId, @RequestBody List<AddTestDto> testIds) {
|
||||||
|
StudyGroup group = this.groupRepository.findById(Long.parseLong(groupId)).orElse(null);
|
||||||
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
User user = userRepository.findByUsername(authentication.getName()).get();
|
||||||
|
|
||||||
|
if (group == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono grupy", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
for (AddTestDto t : testIds) {
|
||||||
|
Long testId = Long.parseLong(t.getTestId());
|
||||||
|
this.testRepository.findById(testId).ifPresent(test -> {
|
||||||
|
List<Question> questions = test.getQuestions();
|
||||||
|
for (Question question : questions) {
|
||||||
|
if (question instanceof QuestionChoices) {
|
||||||
|
for (AnswerChoices answer : ((QuestionChoices) question).getAnswers()) {
|
||||||
|
entityManager.detach(answer);
|
||||||
|
answer.setId(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (question instanceof QuestionPairs) {
|
||||||
|
for (AnswerPairs answer : ((QuestionPairs) question).getAnswers()) {
|
||||||
|
entityManager.detach(answer);
|
||||||
|
answer.setId(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (question instanceof QuestionPuzzle) {
|
||||||
|
for (AnswerPuzzle answer : ((QuestionPuzzle) question).getAnswers()) {
|
||||||
|
entityManager.detach(answer);
|
||||||
|
answer.setId(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (question instanceof QuestionGaps) {
|
||||||
|
for (AnswerGaps answer : ((QuestionGaps) question).getAnswers()) {
|
||||||
|
entityManager.detach(answer);
|
||||||
|
answer.setId(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
entityManager.detach(question);
|
||||||
|
question.setId(null);
|
||||||
|
}
|
||||||
|
entityManager.detach(test);
|
||||||
|
test.setId(null);
|
||||||
|
test.setPermission("GROUP");
|
||||||
|
test.setStatus("UNVERIFIED");
|
||||||
|
test.setGroup(group);
|
||||||
|
this.testRepository.save(test);
|
||||||
|
this.userActivityService.saveActivity("addedResource", 0, null, user, null, group, null, null, test);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ResponseEntity<>("Dodano", HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public ResponseEntity<?> getContent(Long group_id, String type) {
|
||||||
|
List<ContentDto> contents = new ArrayList<>();
|
||||||
|
|
||||||
|
switch (type){
|
||||||
|
case "tests":
|
||||||
|
List<Test> tests = new ArrayList<>();
|
||||||
|
tests = this.testRepository.findTestByGroup(group_id);
|
||||||
|
for (Test t : tests) {
|
||||||
|
ContentDto contentTest = new ContentDto();
|
||||||
|
contentTest.setId(t.getId());
|
||||||
|
contentTest.setOwner((userRepository.findById(t.getIdOwner()).orElse(null)).getUsername());
|
||||||
|
contentTest.setAddDate();
|
||||||
|
contentTest.setGrade((long) 0);
|
||||||
|
contentTest.setTitle(t.getTitle());
|
||||||
|
contents.add(contentTest);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ResponseEntity<List<ContentDto>>(contents, HttpStatus.OK);
|
||||||
|
case "materials":
|
||||||
|
List<Material> materials = new ArrayList<>();
|
||||||
|
materials = this.materialRepository.findMaterialByGroup(group_id);
|
||||||
|
for (Material m : materials ) {
|
||||||
|
ContentDto contentMaterial = new ContentDto();
|
||||||
|
contentMaterial.setId(m.getId());
|
||||||
|
contentMaterial.setOwner((userRepository.findById((long)m.getOwner()).orElse(null)).getUsername());
|
||||||
|
contentMaterial.setAddDate();
|
||||||
|
contentMaterial.setGrade((long) 0);
|
||||||
|
contentMaterial.setTitle(m.getTitle());
|
||||||
|
contents.add(contentMaterial);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ResponseEntity<List<ContentDto>>(contents, HttpStatus.OK);
|
||||||
|
case "flashcardsets":
|
||||||
|
List<Set> sets = new ArrayList<>();
|
||||||
|
sets = this.setRepository.findSetByGroup(group_id);
|
||||||
|
for (Set s : sets) {
|
||||||
|
ContentDto contentSet = new ContentDto();
|
||||||
|
contentSet.setId(s.getId());
|
||||||
|
contentSet.setOwner((userRepository.findById((long)s.getIdOwner()).orElse(null)).getUsername());
|
||||||
|
contentSet.setAddDate();
|
||||||
|
contentSet.setGrade((long) 0);
|
||||||
|
contentSet.setTitle(s.getName());
|
||||||
|
contents.add(contentSet);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new ResponseEntity<List<ContentDto>>(contents, HttpStatus.OK);
|
||||||
|
default:
|
||||||
|
return new ResponseEntity<>("Błąd w zapytaniu", HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> getUnverifiedContent(Long group_id, String type){
|
||||||
|
List<ContentDto> contents = new ArrayList<>();
|
||||||
|
|
||||||
|
switch (type){
|
||||||
|
case "tests":
|
||||||
|
List<Test> tests = new ArrayList<>();
|
||||||
|
tests = this.testRepository.findWaitingTestByGroupKey(group_id);
|
||||||
|
for (Test t : tests) {
|
||||||
|
ContentDto content = new ContentDto();
|
||||||
|
content.setId(t.getId());
|
||||||
|
content.setOwner((userRepository.findById(t.getIdOwner()).orElse(null)).getUsername());
|
||||||
|
content.setAddDate();
|
||||||
|
content.setGrade((long) 0);
|
||||||
|
content.setTitle(t.getTitle());
|
||||||
|
contents.add(content);
|
||||||
|
}
|
||||||
|
return new ResponseEntity<List<ContentDto>>(contents, HttpStatus.OK);
|
||||||
|
case "materials":
|
||||||
|
List<Material> materials = new ArrayList<>();
|
||||||
|
materials = this.materialRepository.findWaitingMaterialByGroupKey(group_id);
|
||||||
|
for (Material m : materials ) {
|
||||||
|
ContentDto content = new ContentDto();
|
||||||
|
content.setId(m.getId());
|
||||||
|
content.setOwner((userRepository.findById((long)m.getOwner()).orElse(null)).getUsername());
|
||||||
|
content.setAddDate();
|
||||||
|
content.setGrade((long) 0);
|
||||||
|
content.setTitle(m.getTitle());
|
||||||
|
contents.add(content);
|
||||||
|
}
|
||||||
|
return new ResponseEntity<List<ContentDto>>(contents, HttpStatus.OK);
|
||||||
|
case "flashcards":
|
||||||
|
List<Set> sets = new ArrayList<>();
|
||||||
|
sets = this.setRepository.findWaitingSetByGroupKey(group_id);
|
||||||
|
for (Set s : sets) {
|
||||||
|
ContentDto content = new ContentDto();
|
||||||
|
content.setId(s.getId());
|
||||||
|
content.setOwner((userRepository.findById((long)s.getIdOwner()).orElse(null)).getUsername());
|
||||||
|
content.setAddDate();
|
||||||
|
content.setGrade((long) 0);
|
||||||
|
content.setTitle(s.getName());
|
||||||
|
contents.add(content);
|
||||||
|
}
|
||||||
|
return new ResponseEntity<List<ContentDto>>(contents, HttpStatus.OK);
|
||||||
|
default:
|
||||||
|
return new ResponseEntity<>("Błąd w zapytaniu", HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> acceptTest(String groupId, String testId, VerifyDto dto) {
|
||||||
|
StudyGroup group = this.groupRepository.findById(Long.parseLong(groupId)).orElse(null);
|
||||||
|
if (group == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono grupy", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
Test test = this.testRepository.getOne(Long.parseLong(testId));
|
||||||
|
test.setPermission("GROUP");
|
||||||
|
test.setStatus("VERIFIED");
|
||||||
|
this.testRepository.save(test);
|
||||||
|
|
||||||
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
User user = userRepository.findByUsername(authentication.getName()).get();
|
||||||
|
User toUser = new User();
|
||||||
|
toUser.setId(Long.valueOf(test.getIdOwner()));
|
||||||
|
this.userActivityService.saveActivity("acceptedResource", dto.getPoints(), dto.getComment(), toUser, user, group, null, null, test);
|
||||||
|
return new ResponseEntity<>("Dodano", HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> acceptSet(String groupId, String setId, VerifyDto dto) {
|
||||||
|
StudyGroup group = this.groupRepository.findById(Long.parseLong(groupId)).orElse(null);
|
||||||
|
if (group == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono grupy", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
Set set = this.setRepository.findById(Long.parseLong(setId)).orElse(null);
|
||||||
|
if (set == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono zestawu", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
set.setPermission("GROUP");
|
||||||
|
set.setStatus("VERIFIED");
|
||||||
|
this.setRepository.save(set);
|
||||||
|
|
||||||
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
User user = userRepository.findByUsername(authentication.getName()).get();
|
||||||
|
User toUser = new User();
|
||||||
|
toUser.setId(Long.valueOf(set.getIdOwner()));
|
||||||
|
this.userActivityService.saveActivity("acceptedResource", dto.getPoints(), dto.getComment(), toUser, user, group, null, set, null);
|
||||||
|
return new ResponseEntity<>("Dodano", HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> acceptMaterial(String groupId, String materialId, VerifyDto dto) {
|
||||||
|
StudyGroup group = this.groupRepository.findById(Long.parseLong(groupId)).orElse(null);
|
||||||
|
if (group == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono grupy", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
Material material = this.materialRepository.findById(Long.parseLong(materialId)).orElse(null);
|
||||||
|
if (material == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono materiału", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
material.setPermission("GROUP");
|
||||||
|
material.setStatus("VERIFIED");
|
||||||
|
this.materialRepository.save(material);
|
||||||
|
|
||||||
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
User user = userRepository.findByUsername(authentication.getName()).get();
|
||||||
|
User toUser = new User();
|
||||||
|
toUser.setId(Long.valueOf(material.getOwner()));
|
||||||
|
this.userActivityService.saveActivity("acceptedResource", dto.getPoints(), dto.getComment(), toUser, user, group, material, null, null);
|
||||||
|
return new ResponseEntity<>("Dodano", HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> rejectTest(String groupId, String testId, VerifyDto dto) {
|
||||||
|
StudyGroup group = this.groupRepository.findById(Long.parseLong(groupId)).orElse(null);
|
||||||
|
if (group == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono grupy", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
Test test = this.testRepository.getOne(Long.parseLong(testId));
|
||||||
|
|
||||||
|
test.setPermission("GROUP");
|
||||||
|
test.setStatus("REJECTED");
|
||||||
|
this.testRepository.save(test);
|
||||||
|
|
||||||
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
User user = userRepository.findByUsername(authentication.getName()).get();
|
||||||
|
User toUser = new User();
|
||||||
|
toUser.setId(Long.valueOf(test.getIdOwner()));
|
||||||
|
this.userActivityService.saveActivity("rejectedResource", dto.getPoints(), dto.getComment(), toUser, user, group, null, null, test);
|
||||||
|
return new ResponseEntity<>("Usunięto", HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> rejectSet(String groupId, String setId, VerifyDto dto) {
|
||||||
|
StudyGroup group = this.groupRepository.findById(Long.parseLong(groupId)).orElse(null);
|
||||||
|
if (group == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono grupy", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
Set set = this.setRepository.findById(Long.parseLong(setId)).orElse(null);
|
||||||
|
if (set == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono zestawu", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
set.setPermission("GROUP");
|
||||||
|
set.setStatus("REJECTED");
|
||||||
|
this.setRepository.save(set);
|
||||||
|
|
||||||
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
User user = userRepository.findByUsername(authentication.getName()).get();
|
||||||
|
User toUser = new User();
|
||||||
|
toUser.setId(Long.valueOf(set.getIdOwner()));
|
||||||
|
this.userActivityService.saveActivity("rejectedResource", dto.getPoints(), dto.getComment(), toUser, user, group, null, set, null);
|
||||||
|
return new ResponseEntity<>("Usunięto", HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> rejectMaterial(String groupId, String materialId, VerifyDto dto) {
|
||||||
|
StudyGroup group = this.groupRepository.findById(Long.parseLong(groupId)).orElse(null);
|
||||||
|
if (group == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono grupy", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
Material material = this.materialRepository.findById(Long.parseLong(materialId)).orElse(null);
|
||||||
|
if (material == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono materiału", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
|
||||||
|
material.setPermission("GROUP");
|
||||||
|
material.setStatus("REJECTED");
|
||||||
|
this.materialRepository.save(material);
|
||||||
|
|
||||||
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
User user = userRepository.findByUsername(authentication.getName()).get();
|
||||||
|
User toUser = new User();
|
||||||
|
toUser.setId(Long.valueOf(material.getOwner()));
|
||||||
|
this.userActivityService.saveActivity("rejectedResource", dto.getPoints(), dto.getComment(), toUser, user, group, material, null, null);
|
||||||
|
return new ResponseEntity<>("Usunięto", HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> getComments(String type, Long content_id) {
|
||||||
|
List<StudyGroupCommentDto> comments = new ArrayList<>();
|
||||||
|
for(StudyGroupComment c : this.commentRepository.findCommentsByContent(type, content_id)) {
|
||||||
|
StudyGroupCommentDto comment = new StudyGroupCommentDto();
|
||||||
|
comment.setId(c.getId());
|
||||||
|
comment.setText(c.getText());
|
||||||
|
comment.setUsername((this.userRepository.findById(c.getUserId()).orElse(null)).getUsername());
|
||||||
|
System.out.println(comment);
|
||||||
|
comments.add(comment);
|
||||||
|
}
|
||||||
|
return new ResponseEntity<List<StudyGroupCommentDto>>(comments, HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> addComment(String type, Long content_id, SimpleStudyGroupCommentDto text) {
|
||||||
|
StudyGroupComment comment = new StudyGroupComment();
|
||||||
|
comment.setContentType(type);
|
||||||
|
comment.setContentId(content_id);
|
||||||
|
comment.setText(text.getText());
|
||||||
|
comment.setUserId((this.userRepository.findByUsername(text.getUsername()).orElse(null)).getId());
|
||||||
|
this.commentRepository.save(comment);
|
||||||
|
if(userBadgeRepository.findByIdAndUser((long)7, (this.userRepository.findByUsername(text.getUsername()).orElse(null)).getId()).isEmpty()) {
|
||||||
|
UserBadge badgeAchieved = new UserBadge();
|
||||||
|
Badge badge = new Badge();
|
||||||
|
badge = badgeRepository.findById((long)7).orElse(null);
|
||||||
|
badgeAchieved.setBadge(badge);
|
||||||
|
badgeAchieved.setUser(this.userRepository.findByUsername(text.getUsername()).orElse(null));
|
||||||
|
userBadgeRepository.save(badgeAchieved);
|
||||||
|
}
|
||||||
|
return new ResponseEntity<>("Dodano komentarz", HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> deleteComment(Long comment_id) {
|
||||||
|
this.commentRepository.deleteById(comment_id);
|
||||||
|
return new ResponseEntity<>("Usunięto komentarz", HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> deleteContent(Long group_id, String type, Long content_id){
|
||||||
|
switch (type) {
|
||||||
|
case "tests":
|
||||||
|
Test test = this.testRepository.findById(content_id).orElse(null);
|
||||||
|
if (test == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
test.setStatus("DELETED");
|
||||||
|
this.testRepository.save(test);
|
||||||
|
return new ResponseEntity<>("Usunięto", HttpStatus.OK);
|
||||||
|
case "materials":
|
||||||
|
Material material = this.materialRepository.findById(content_id).orElse(null);
|
||||||
|
if (material == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
material.setStatus("DELETED");
|
||||||
|
this.materialRepository.save(material);
|
||||||
|
return new ResponseEntity<>("Usunięto", HttpStatus.OK);
|
||||||
|
case "sets":
|
||||||
|
Set set = this.setRepository.findById(content_id).orElse(null);
|
||||||
|
if (set == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
set.setStatus("DELETED");
|
||||||
|
this.setRepository.save(set);
|
||||||
|
return new ResponseEntity<>("Usunięto", HttpStatus.OK);
|
||||||
|
default:
|
||||||
|
return new ResponseEntity<>("Błąd zapytania", HttpStatus.BAD_REQUEST);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> getGroupLeaderboard(Long group_id){
|
||||||
|
StudyGroup group = this.groupRepository.findById(group_id).orElse(null);
|
||||||
|
if (group == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono grupy", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
List<LeaderboardDTO> leaderboard = new ArrayList<>();
|
||||||
|
for(StudyGroupMember m : group.getMembers()) {
|
||||||
|
if(!m.getIsGroupLeader()) {
|
||||||
|
float score = 0;
|
||||||
|
LeaderboardDTO user = new LeaderboardDTO();
|
||||||
|
for (UserActivity a : m.getUser().getActivityTo()) {
|
||||||
|
score += a.getPoints();
|
||||||
|
}
|
||||||
|
user.setUsername(m.getUser().getUsername());
|
||||||
|
if(userBadgeRepository.findByIdAndUser((long)8, m.getUser().getId()).isEmpty() && score > 100) {
|
||||||
|
UserBadge badgeAchieved = new UserBadge();
|
||||||
|
Badge badge = new Badge();
|
||||||
|
badge = badgeRepository.findById((long)8).orElse(null);
|
||||||
|
badgeAchieved.setBadge(badge);
|
||||||
|
badgeAchieved.setUser(m.getUser());
|
||||||
|
userBadgeRepository.save(badgeAchieved);
|
||||||
|
}
|
||||||
|
if(userBadgeRepository.findByIdAndUser((long)12, m.getUser().getId()).isEmpty() && score > 250) {
|
||||||
|
UserBadge badgeAchieved = new UserBadge();
|
||||||
|
Badge badge = new Badge();
|
||||||
|
badge = badgeRepository.findById((long)12).orElse(null);
|
||||||
|
badgeAchieved.setBadge(badge);
|
||||||
|
badgeAchieved.setUser(m.getUser());
|
||||||
|
userBadgeRepository.save(badgeAchieved);
|
||||||
|
}
|
||||||
|
user.setPoints(score);
|
||||||
|
leaderboard.add(user);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new ResponseEntity<List<LeaderboardDTO>>(leaderboard,HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ResponseEntity<?> getGroupTestLeaderboard(Long group_id){
|
||||||
|
StudyGroup group = this.groupRepository.findById(group_id).orElse(null);
|
||||||
|
if (group == null) {
|
||||||
|
return new ResponseEntity<>("Nie znaleziono grupy", HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
|
List<LeaderboardDTO> leaderboard = new ArrayList<>();
|
||||||
|
for(StudyGroupMember m : group.getMembers()) {
|
||||||
|
if(!m.getIsGroupLeader()) {
|
||||||
|
float score = 0;
|
||||||
|
LeaderboardDTO user = new LeaderboardDTO();
|
||||||
|
for (UserActivity a : m.getUser().getActivityTo()) {
|
||||||
|
if(a.getType() == "solvedTest")
|
||||||
|
score += a.getPoints();
|
||||||
|
}
|
||||||
|
user.setUsername(m.getUser().getUsername());
|
||||||
|
user.setPoints(score);
|
||||||
|
leaderboard.add(user);
|
||||||
|
}
|
||||||
|
// leaderboard.sort((o1, o2) -> Integer.toString(o1.getPoints()).compareTo(Integer.toString(o2.getPoints())));
|
||||||
|
}
|
||||||
|
return new ResponseEntity<List<LeaderboardDTO>>(leaderboard,HttpStatus.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package studycave.studycaverestservice.model.studyGroup.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class AddMaterialDto {
|
||||||
|
|
||||||
|
private String materialId;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package studycave.studycaverestservice.model.studyGroup.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class AddSetDto {
|
||||||
|
|
||||||
|
private String setId;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package studycave.studycaverestservice.model.studyGroup.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class AddTestDto {
|
||||||
|
|
||||||
|
private String testId;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package studycave.studycaverestservice.model.studyGroup.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import java.sql.Date;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class ContentDto {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
private String title;
|
||||||
|
private Date addDate;
|
||||||
|
private String owner;
|
||||||
|
private Long grade;
|
||||||
|
|
||||||
|
public void setAddDate() {
|
||||||
|
|
||||||
|
java.util.Date utilDate = new java.util.Date();
|
||||||
|
Date sqlDate = new Date(utilDate.getTime());
|
||||||
|
this.addDate = sqlDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package studycave.studycaverestservice.model.studyGroup.dto;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class GroupDto {
|
||||||
|
private Long id;
|
||||||
|
private String owner;
|
||||||
|
private String name;
|
||||||
|
private String description;
|
||||||
|
private String key;
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package studycave.studycaverestservice.model.studyGroup.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
import studycave.studycaverestservice.model.user.dto.SimpleUserInfo;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
public class GroupInfoDto {
|
||||||
|
private Long id;
|
||||||
|
private String owner;
|
||||||
|
private String name;
|
||||||
|
private String description;
|
||||||
|
private String groupKey;
|
||||||
|
List<SimpleUserInfo> users = new ArrayList<>();
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package studycave.studycaverestservice.model.studyGroup.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class GroupJoinDto {
|
||||||
|
String groupCode;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package studycave.studycaverestservice.model.studyGroup.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class SimpleStudyGroupMemberDTO {
|
||||||
|
private String name;
|
||||||
|
private Long id;
|
||||||
|
private String role;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,29 @@
|
|||||||
|
package studycave.studycaverestservice.model.studyGroup.dto;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class VerifyDto {
|
||||||
|
|
||||||
|
public enum VerifyType {
|
||||||
|
ACCEPTED, REJECTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ApiModelProperty
|
||||||
|
@NotNull
|
||||||
|
VerifyType status;
|
||||||
|
@ApiModelProperty
|
||||||
|
int points;
|
||||||
|
@ApiModelProperty
|
||||||
|
String comment;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package studycave.studycaverestservice.model.user.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class LeaderboardDTO implements Comparable {
|
||||||
|
private String Username;
|
||||||
|
private float points;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(Object o) {
|
||||||
|
int result = this.getUsername().compareTo(((LeaderboardDTO) o).getUsername());
|
||||||
|
if(result == 0) {
|
||||||
|
result = (this.getPoints() < ((LeaderboardDTO) o).getPoints() ? -1 : (this.getPoints() == ((LeaderboardDTO) o).getPoints() ? 0 : 1));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package studycave.studycaverestservice.model.user.dto;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@Setter
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class SimpleUserInfo {
|
||||||
|
private String username;
|
||||||
|
private Long id;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user