Skip to content

Commit

Permalink
feat: 우선순위 리스트 반환
Browse files Browse the repository at this point in the history
  • Loading branch information
pl0901 committed Nov 29, 2023
1 parent 01b3648 commit fc6e70e
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,17 @@ public ResponseEntity<?> postMyAnswer(Principal principal, @PathVariable(name="l
log.info("엔드포인트 지남");
return learningMaterialService.postMyAnswer(principal, learningMaterialId, myanswerId, myAnswerRequest);
}

@PreAuthorize("isAuthenticated()")
@GetMapping("/learning-material/priority/{learning-material-id}")
public ResponseEntity<?> setPriority(@PathVariable(name = "learning-material-id")Long id, Principal principal){
return learningMaterialService.setPriority(principal, id);
}

@PreAuthorize("isAuthenticated()")
@GetMapping("/learning-material/unpriority/{learning-material-id}")
public ResponseEntity<?> unsetPriority(@PathVariable(name = "learning-material-id")Long id, Principal principal){
return learningMaterialService.unsetPriority(principal, id);
}
}

3 changes: 3 additions & 0 deletions src/main/java/com/teamh/khumon/domain/LearningMaterial.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ public class LearningMaterial extends BaseEntity {
@Column(columnDefinition = "TEXT")
private String summary;

@Builder.Default
private Boolean isPriority = false;

@Column(columnDefinition = "TEXT")
private String textData;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public class LearningMaterialContent {
private String content;
private String type;
private LocalDateTime createAt;
private Boolean isPriority;
private LocalDateTime modifiedAt;

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public class LearningMaterialResponse {
private Long id;
private String title;
private String content;
private Boolean isPriority;
private String mediaURL;
private String mediaOriginalName;
private String mediaFileType;
Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/teamh/khumon/dto/OffsetPagination.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
@ToString
public class OffsetPagination {
private List<LearningMaterialContent> content;
private List<PriorityLearningMaterialContent> priorityLearningMaterialContents;
private Long totalElements;
private Integer totalPages;
private Integer size;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.teamh.khumon.dto;

import lombok.*;

import java.time.LocalDateTime;

@Builder
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class PriorityLearningMaterialContent {
private Long id;
private String title;
private String content;
private Boolean isPriority;
private String type;
private LocalDateTime createAt;
private LocalDateTime modifiedAt;
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

public interface LearningMaterialRepository extends JpaRepository<LearningMaterial, Long> {


List<LearningMaterial> findAllByMemberIdAndIsPriorityTrue(Long id);

// Page<LearningMaterial> findAllByTitleIsContainingAndMemberId(String search, Long memberId, Pageable pageable);

Expand Down
65 changes: 55 additions & 10 deletions src/main/java/com/teamh/khumon/service/LearningMaterialService.java
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ public ResponseEntity<?> getLearningMaterial(Long id, Principal principal) {
.content(learningMaterial.getContent())
.summary(learningMaterial.getSummary())
.mediaFileType(learningMaterial.getMediaFileType().getFileType())
.isPriority(learningMaterial.getIsPriority())
.textData(learningMaterial.getMediaFileType().getFileType().equals("txt") ? learningMaterial.getTextData() : null)
.mediaOriginalName(learningMaterial.getFileName())
.mediaURL(learningMaterial.getFileURL())
Expand All @@ -136,16 +137,27 @@ public ResponseEntity<?> getLearningMaterials(Principal principal, Pageable page
log.info("member ID : " + member.getId());
Specification<LearningMaterial> specification = search(search, member.getId());
Page<LearningMaterial> learningMaterials = learningMaterialRepository.findAll(specification, pageable);

List<LearningMaterial> prioritylearningMaterials = learningMaterialRepository.findAllByMemberIdAndIsPriorityTrue(member.getId());
List<LearningMaterialContent> learningMaterialContents = learningMaterials.getContent().stream().map(learningMaterial -> LearningMaterialContent.builder()
.id(learningMaterial.getId())
.title(learningMaterial.getTitle())
.content(learningMaterial.getContent())
.isPriority(learningMaterial.getIsPriority())
.type(learningMaterial.getMediaFileType().getFileType())
.createAt(learningMaterial.getCreatedAt())
.modifiedAt(learningMaterial.getUpdateAt())
.build()).toList();

List<PriorityLearningMaterialContent> priorityLearningMaterialContents = prioritylearningMaterials.stream().map(learningMaterial -> PriorityLearningMaterialContent.builder()
.id(learningMaterial.getId())
.title(learningMaterial.getTitle())
.content(learningMaterial.getContent())
.type(learningMaterial.getMediaFileType().getFileType())
.isPriority(learningMaterial.getIsPriority())
.createAt(learningMaterial.getCreatedAt())
.modifiedAt(learningMaterial.getUpdateAt())
.build()).toList();

OffsetPagination offsetPagination = OffsetPagination.builder()
.content(learningMaterialContents)
.isEmpty(learningMaterials.isEmpty())
Expand Down Expand Up @@ -192,15 +204,15 @@ public ResponseEntity<?> delete(Principal principal, Long id) {

private Specification<LearningMaterial> search(String kw, Long memberId) {
return (Root<LearningMaterial> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) -> {
criteriaQuery.distinct(true); // 중복을 제거
root.join("member", JoinType.INNER);
Predicate memberIdPredicate = criteriaBuilder.equal(root.get("member").get("id"), memberId);
Predicate searchPredicate = criteriaBuilder.or(criteriaBuilder.like(root.get("title"), "%" + kw + "%"), // 제목
criteriaBuilder.like(root.get("content"), "%" + kw + "%"), // 내용
criteriaBuilder.like(root.get("summary"), "%" + kw + "%")); //script
return criteriaBuilder.and(memberIdPredicate, searchPredicate);

};
criteriaQuery.distinct(true); // 중복을 제거
root.join("member", JoinType.INNER);
Predicate memberIdPredicate = criteriaBuilder.equal(root.get("member").get("id"), memberId);
Predicate searchPredicate = criteriaBuilder.or(criteriaBuilder.like(root.get("title"), "%" + kw + "%"), // 제목
criteriaBuilder.like(root.get("content"), "%" + kw + "%"), // 내용
criteriaBuilder.like(root.get("summary"), "%" + kw + "%")); //script
return criteriaBuilder.and(memberIdPredicate, searchPredicate);

};
}

public ResponseEntity<?> postMyAnswer(Principal principal, Long learningMaterialId, Long questionId, MyAnswerRequest myAnswerRequest) throws Exception {
Expand All @@ -220,4 +232,37 @@ public ResponseEntity<?> postMyAnswer(Principal principal, Long learningMaterial
response.put("assessment", myAnswerAIResponse.getAssessment());
return new ResponseEntity<>(response, HttpStatus.CREATED);
}

@Transactional
public ResponseEntity<HashMap> setPriority(Principal principal, Long id) {
LearningMaterial learningMaterial = learningMaterialRepository.findById(id).orElseThrow();
HashMap<String, String> response = new HashMap<>();
if(!principal.getName().equals(learningMaterial.getMember().getUsername())){
response.put("msg" , "작성자가 아닙니다.");
return new ResponseEntity<HashMap>(response, HttpStatus.BAD_REQUEST );
}
else if(learningMaterial.getIsPriority()){
response.put("msg", "이미 중요도 체크를 하였습니다.");
return new ResponseEntity<HashMap>(response, HttpStatus.NOT_ACCEPTABLE);
}
learningMaterial.setIsPriority(true);
response.put("msg", "우선순위가 설정되었습니다");
return new ResponseEntity<HashMap>(response, HttpStatus.OK);
}

public ResponseEntity<HashMap> unsetPriority(Principal principal, Long id){
LearningMaterial learningMaterial = learningMaterialRepository.findById(id).orElseThrow();
HashMap<String, String> response = new HashMap<>();
if(!principal.getName().equals(learningMaterial.getMember().getUsername())){
response.put("msg" , "작성자가 아닙니다.");
return new ResponseEntity<HashMap>(response, HttpStatus.BAD_REQUEST );
}
else if(!learningMaterial.getIsPriority()){
response.put("msg", "중요도 체크를 하지 않았습니다.");
return new ResponseEntity<HashMap>(response, HttpStatus.NOT_ACCEPTABLE);
}
learningMaterial.setIsPriority(false);
response.put("msg", "우선순위가 해제되었습니다.");
return new ResponseEntity<HashMap>(response, HttpStatus.OK);
}
}

0 comments on commit fc6e70e

Please sign in to comment.