Skip to content

Commit

Permalink
Merge pull request #37 from Jhsysng/feat/reminder
Browse files Browse the repository at this point in the history
fix: PrincipalDetails μˆ˜μ •
  • Loading branch information
Jhsysng authored Mar 22, 2024
2 parents 0fdeedd + f6f87ec commit a812615
Show file tree
Hide file tree
Showing 11 changed files with 170 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import goorm.reinput.folder.domain.dto.*;
import goorm.reinput.folder.service.FolderService;
import goorm.reinput.global.auth.PrincipalDetails;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.coyote.Response;
Expand All @@ -21,21 +22,21 @@ public class FolderController {
private final FolderService folderService;

@GetMapping
public ResponseEntity<List<FolderResponseDto>> getFolderList(final @AuthenticationPrincipal Long userId) {
log.info("[FolderController] getFolderList {} called", userId);
return ResponseEntity.ok().body(folderService.getFolderList(userId));
public ResponseEntity<List<FolderResponseDto>> getFolderList(final @AuthenticationPrincipal PrincipalDetails principalDetails) {
log.info("[FolderController] getFolderList {} called", principalDetails.getUserId());
return ResponseEntity.ok().body(folderService.getFolderList(principalDetails.getUserId()));
}

@GetMapping("/share")
public ResponseEntity<FolderShareResponseDto> createShareLink(final @AuthenticationPrincipal Long userId, final @RequestBody FolderShareDto folderShareDto) {
log.info("[FolderController] createShareLink {} called", userId);
return ResponseEntity.ok().body(folderService.createShareLink(userId, folderShareDto));
public ResponseEntity<FolderShareResponseDto> createShareLink(final @AuthenticationPrincipal PrincipalDetails principalDetails, final @RequestBody FolderShareDto folderShareDto) {
log.info("[FolderController] createShareLink {} called", principalDetails.getUserId());
return ResponseEntity.ok().body(folderService.createShareLink(principalDetails.getUserId(), folderShareDto));
}

@GetMapping("/share/copy/{folderId}")
public ResponseEntity<String> copyFolder(final @AuthenticationPrincipal Long userId, final @PathVariable Long folderId) {
log.info("[FolderController] copyFolder {} called", userId);
folderService.copyFolder(userId, folderId);
public ResponseEntity<String> copyFolder(final @AuthenticationPrincipal PrincipalDetails principalDetails, final @PathVariable Long folderId) {
log.info("[FolderController] copyFolder {} called", principalDetails.getUserId());
folderService.copyFolder(principalDetails.getUserId(), folderId);
return new ResponseEntity<>("success", HttpStatus.CREATED);
}
/*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@ public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("OPTIONS", "HEAD", "GET", "POST", "PUT", "PATCH", "DELETE")
.allowCredentials(true)
.allowedOrigins("http://localhost:3000");
.allowedOrigins("http://localhost:3000","https://2024-beotkkotthon-team-24-fe.vercel.app");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,19 @@ public class InsightController {
@Operation(summary = "μΈμ‚¬μ΄νŠΈ μ €μž₯", description = "μœ μ €κ°€ μΈμ‚¬μ΄νŠΈλ₯Ό 등둝할 λ•Œ μ‚¬μš©ν•˜λŠ” API")
@ApiResponses({@ApiResponse(responseCode = "201"), @ApiResponse(responseCode = "401"), @ApiResponse(responseCode = "403"), @ApiResponse(responseCode = "500")})
@PostMapping()
public void saveInsight(final @AuthenticationPrincipal PrincipalDetails principalDetails, final @Valid @RequestBody InsightCreateDto insightCreateDto) {
Long userId = principalDetails.getUserId();
log.info("[InsightController] saveInsight {} called", userId);
insightService.saveInsight(userId, insightCreateDto);
public void saveInsight(@Parameter(hidden = true) final @AuthenticationPrincipal PrincipalDetails principalDetails, final @Valid @RequestBody InsightCreateDto insightCreateDto) {
log.info("[InsightController] saveInsight {} called", principalDetails.getUserId());
insightService.saveInsight(principalDetails.getUserId(), insightCreateDto);
}

@Operation(summary = "μΈμ‚¬μ΄νŠΈ 상세보기", description = "μœ μ €κ°€ μΈμ‚¬μ΄νŠΈμ˜ 상세정보λ₯Ό 확인할 λ•Œ μ‚¬μš©ν•˜λŠ” API")
@ApiResponses({@ApiResponse(responseCode = "200"), @ApiResponse(responseCode = "401"), @ApiResponse(responseCode = "403"), @ApiResponse(responseCode = "500")})
@GetMapping("/{insightId}")
public ResponseEntity<InsightResponseDto> getInsightDetail(final @AuthenticationPrincipal PrincipalDetails principalDetails, final @PathVariable Long insightId) {
Long userId = principalDetails.getUserId();
log.info("[InsightController] getInsightDetail userId = {}, insightId = {} called", userId, insightId);
return ResponseEntity.ok().body(insightService.getInsightDetail(userId, insightId));
@GetMapping()
public ResponseEntity<InsightResponseDto> getInsightDetail(@Parameter(hidden = true) final @AuthenticationPrincipal PrincipalDetails principalDetails, final @PathVariable Long insightId) {
log.info("[InsightController] getInsightDetail {} called", principalDetails.getUserId());

// μΈμ‚¬μ΄νŠΈ 리슀트 λ°˜ν™˜
return ResponseEntity.ok().body(insightService.getInsightDetail(principalDetails.getUserId(), insightId));
}

// 3. 폴더 λ‚΄ μΈμ‚¬μ΄νŠΈ 리슀트 κ°€μ Έμ˜€κΈ°
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package goorm.reinput.reminder.controller;

import goorm.reinput.global.auth.PrincipalDetails;
import goorm.reinput.reminder.domain.dto.ReminderAnswerReqDto;
import goorm.reinput.reminder.domain.dto.ReminderQuestionResponseDto;
import goorm.reinput.reminder.service.ReminderService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.*;

@RestController
@Slf4j
@RequiredArgsConstructor
@RequestMapping("/reminder")
public class ReminderController {

private final ReminderService reminderService;

@GetMapping("/question")
public ResponseEntity<ReminderQuestionResponseDto> getReminderQuestion(final @AuthenticationPrincipal PrincipalDetails principalDetails){
log.info("[ReminderController] getReminderQuestion");
return ResponseEntity.ok(reminderService.getOlderReminder(principalDetails.getUserId()));
}

@PostMapping("/answer")
public ResponseEntity<Void> answerReminderQuestion(final @AuthenticationPrincipal PrincipalDetails principalDetails, @RequestBody ReminderAnswerReqDto reqDto){
log.info("[ReminderController] answerReminderQuestion");
reminderService.answerReminderQuestion(principalDetails.getUserId(), reqDto);
return ResponseEntity.ok().build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package goorm.reinput.reminder.domain.dto;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
public class ReminderAnswerDto {
private Long insightId;

@Builder
public ReminderAnswerDto(Long insightId) {
this.insightId = insightId;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package goorm.reinput.reminder.domain.dto;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor
public class ReminderAnswerReqDto {
private Long reminderId;
private String reminderQuestion;
private String reminderAnswer;

@Builder
public ReminderAnswerReqDto(Long reminderId, String reminderQuestion, String reminderAnswer) {
this.reminderId = reminderId;
this.reminderQuestion = reminderQuestion;
this.reminderAnswer = reminderAnswer;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package goorm.reinput.reminder.domain.dto;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.List;

@Getter
@NoArgsConstructor
public class ReminderQuestionDto {
private String reminderQuestion;
private Long insightId;
private Long reminderId;
private String insightTitle;
private String insightMainImage;
private List<String> insightTagList;

@Builder
public ReminderQuestionDto(String reminderQuestion, Long insightId, Long reminderId, String insightTitle, String insightMainImage, List<String> insightTagList) {
this.reminderQuestion = reminderQuestion;
this.insightId = insightId;
this.reminderId = reminderId;
this.insightTitle = insightTitle;
this.insightMainImage = insightMainImage;
this.insightTagList = insightTagList;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
@RequiredArgsConstructor
public class ReminderQuestionQueryDto {
private String reminderQuestion;
private LocalDateTime reminderUpdatedAt;
private Long insightId;
private Long reminderId;
private String insightTitle;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@
@NoArgsConstructor
public class ReminderQuestionResponseDto {
private boolean todayClear;
private List<ReminderQuestionQueryDto> reminderQuestionList;
private List<ReminderQuestionDto> reminderQuestionList;

@Builder
public ReminderQuestionResponseDto(boolean todayClear, List<ReminderQuestionQueryDto> reminderQuestionList) {
public ReminderQuestionResponseDto(boolean todayClear, List<ReminderQuestionDto> reminderQuestionList) {
this.todayClear = todayClear;
this.reminderQuestionList = reminderQuestionList;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ public List<ReminderQuestionQueryDto> findOldestReminderDto(List<Long> reminderI
List<ReminderQuestionQueryDto> results = queryFactory
.select(Projections.fields(ReminderQuestionQueryDto.class,
reminder.reminderQuestion.reminderQuestion.as("reminderQuestion"),
reminder.reminderQuestion.updatedAt.as("reminderUpdatedAt"),
insight.insightId.as("insightId"),
reminder.reminderId.as("reminderId"),
insight.insightTitle.as("insightTitle"),
Expand Down Expand Up @@ -69,8 +70,7 @@ public List<Reminder> findOldestReminders(Long userId) {
return queryFactory
.selectFrom(reminder)
.orderBy(reminder.lastRemindedAt.asc())
.where(reminder.isEnable.isTrue().and(insight.folder.user.userId.eq(userId)))
.join(reminder.insight, insight)
.where(reminder.isEnable.isTrue().and(reminder.insight.folder.user.userId.eq(userId)))
.limit(5)
.fetch();
}
Expand Down
57 changes: 47 additions & 10 deletions src/main/java/goorm/reinput/reminder/service/ReminderService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import goorm.reinput.reminder.domain.Reminder;
import goorm.reinput.reminder.domain.ReminderQuestion;
import goorm.reinput.reminder.domain.dto.ReminderAnswerReqDto;
import goorm.reinput.reminder.domain.dto.ReminderQuestionDto;
import goorm.reinput.reminder.domain.dto.ReminderQuestionQueryDto;
import goorm.reinput.reminder.domain.dto.ReminderQuestionResponseDto;
import goorm.reinput.reminder.repository.QuestionRepository;
Expand All @@ -13,6 +15,7 @@
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Slf4j
@RequiredArgsConstructor
Expand Down Expand Up @@ -41,15 +44,49 @@ private List<Long> makeReminderQuestionList(Long userId) {

return reminders.stream().map(Reminder::getReminderId).toList();
}
// private ReminderQuestionResponseDto getOlderReminder(Long userId){
// log.info("[ReminderService] getOlderReminder {}", userId);
//
// List<ReminderQuestionQueryDto> reminderQuestionQueryDtos = customReminderRepository.findOldestReminderDto(makeReminderQuestionList(userId));
//
//
//
// //reminder reminderQuestion 의 update μ‹œκ°„μ΄ 였늘이 μ•„λ‹ˆλ©΄ false
//
// }
public ReminderQuestionResponseDto getOlderReminder(Long userId){
log.info("[ReminderService] getOlderReminder {}", userId);

List<ReminderQuestionQueryDto> reminderQuestionQueryDtos = customReminderRepository.findOldestReminderDto(makeReminderQuestionList(userId));

/*reminder reminderQuestion 의 update μ‹œκ°„μ΄ ν•˜λ‚˜λΌλ„ 였늘이 μ•„λ‹ˆλ©΄
ReminderQuestionResponseDto todayClear false
*/
boolean todayClear = reminderQuestionQueryDtos.stream()
.anyMatch(dto -> dto.getReminderUpdatedAt().toLocalDate().isEqual(java.time.LocalDate.now()));

return ReminderQuestionResponseDto.builder()
.todayClear(todayClear)
.reminderQuestionList(reminderQuestionQueryDtos.stream().map(dto ->
ReminderQuestionDto.builder()
.reminderQuestion(dto.getReminderQuestion())
.insightId(dto.getInsightId())
.reminderId(dto.getReminderId())
.insightTitle(dto.getInsightTitle())
.insightMainImage(dto.getInsightMainImage())
.insightTagList(dto.getInsightTagList())
.build())
.collect(Collectors.toList()))
.build();

}

public Long answerReminderQuestion(Long userId, ReminderAnswerReqDto reminderAnswer){
log.info("[ReminderService] getReminderAnswer userId: {}, reminderId: {}", userId, reminderAnswer.getReminderId());

Reminder reminder = reminderRepository.findById(reminderAnswer.getReminderId()).orElseThrow(() -> new IllegalArgumentException("reminder not found"));
ReminderQuestion reminderQuestion = reminder.getReminderQuestion();
ReminderQuestion newQuestion = ReminderQuestion.builder()
.reminder(reminder)
.reminderQuestion(reminderQuestion.getReminderQuestion())
.reminderAnswer(reminderAnswer.getReminderAnswer())
.build();

ReminderQuestion reminderQuestion1 = reminderQuestionRepository.save(newQuestion);

return reminderQuestion1.getReminder().getInsight().getInsightId();

}


}

0 comments on commit a812615

Please sign in to comment.