diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/diary/controller/DiaryController.java b/src/main/java/org/kau/kkoolbeeServer/domain/diary/controller/DiaryController.java index 68d7c70..cb9772c 100644 --- a/src/main/java/org/kau/kkoolbeeServer/domain/diary/controller/DiaryController.java +++ b/src/main/java/org/kau/kkoolbeeServer/domain/diary/controller/DiaryController.java @@ -12,6 +12,9 @@ import org.kau.kkoolbeeServer.domain.diary.dto.response.FeelingListResponseDto; import org.kau.kkoolbeeServer.domain.diary.dto.response.SlowTypeCreateResponseDto; import org.kau.kkoolbeeServer.domain.diary.service.DiaryService; +import org.kau.kkoolbeeServer.domain.member.Member; +import org.kau.kkoolbeeServer.domain.member.service.MemberService; +import org.kau.kkoolbeeServer.global.auth.jwt.JwtProvider; import org.kau.kkoolbeeServer.global.common.dto.ApiResponse; import org.kau.kkoolbeeServer.global.common.dto.enums.ErrorType; import org.kau.kkoolbeeServer.global.common.dto.enums.SuccessType; @@ -27,6 +30,7 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.security.Principal; import java.time.LocalDateTime; import java.util.List; import java.util.Map; @@ -39,10 +43,12 @@ public class DiaryController { private DiaryService diaryService; private final S3UploaderService s3UploaderService; + private MemberService memberService; @Autowired - public DiaryController(DiaryService diaryService,S3UploaderService s3UploaderService) { + public DiaryController(DiaryService diaryService,S3UploaderService s3UploaderService,MemberService memberService) { this.diaryService = diaryService; this.s3UploaderService=s3UploaderService; + this.memberService=memberService; } @@ -64,7 +70,6 @@ public ResponseEntity> getDiaryContents(@RequestBody DiaryContent ); - DiaryContentResponseDto responseDto = new DiaryContentResponseDto( diary.getContent(), adviceResponseDto, @@ -81,12 +86,32 @@ public ResponseEntity> getDiaryContents(@RequestBody DiaryContent } } - @PostMapping("/api/diary/list/calendar") + /* @PostMapping("/api/diary/list/calendar") public ResponseEntity> getDiariesByMonth(@RequestBody CurrentDateRequestDto requestDto){ LocalDateTime currentDate = requestDto.getCurrentDate(); - Listdiaries=diaryService.findDiariesByMonth(currentDate); - if(diaries.isEmpty()){ + + Listdiaries=diaryService.findDiariesByMonth(currentDate); + if(diaries.isEmpty()){ + return ResponseEntity.status(ErrorType.REQUEST_VALIDATION_ERROR.getHttpStatus()) + .body(ApiResponse.error(ErrorType.REQUEST_VALIDATION_ERROR, "해당 월에 대한 일기가 존재하지 않습니다.")); + } + + List diaryDtos=diaries.stream() + .map(diary -> new CalenderDiaryResponseDto(diary.getId(), diary.getTitle(), diary.getWritedAt())) + .collect(Collectors.toList()); + + Map> responseMap= Map.of("monthList",diaryDtos); + return ResponseEntity.ok().body(ApiResponse.success(SuccessType.PROCESS_SUCCESSED, responseMap));*/ + + @PostMapping("/api/diary/list/calendar") + public ResponseEntity> getDiariesByMonth(Principal principal,@RequestBody CurrentDateRequestDto requestDto){ + Long memberId= JwtProvider.getUserFromPrincipal(principal); + LocalDateTime currentDate = requestDto.getCurrentDate(); + + List diaries = diaryService.findDiariesByMonthAndMemberId(currentDate, memberId); + + if(diaries.isEmpty()){ return ResponseEntity.status(ErrorType.REQUEST_VALIDATION_ERROR.getHttpStatus()) .body(ApiResponse.error(ErrorType.REQUEST_VALIDATION_ERROR, "해당 월에 대한 일기가 존재하지 않습니다.")); } @@ -103,8 +128,8 @@ public ResponseEntity> getDiariesByMonth(@RequestBody CurrentDate } - @PostMapping("/api/diary/list/feeling") - public ResponseEntity> getDiariesByFeeling(@RequestBody FeelingListRequestDto requestDto) { + /*@PostMapping("/api/diary/list/feeling") + public ResponseEntity> getDiariesByFeeling( @RequestBody FeelingListRequestDto requestDto) { List diaries = diaryService.findDiariesByFeeling(requestDto.getFeeling()); @@ -121,9 +146,29 @@ public ResponseEntity> getDiariesByFeeling(@RequestBody FeelingLi Map> responseMap = Map.of("feelingList", feelingList); return ResponseEntity.ok().body(ApiResponse.success(SuccessType.PROCESS_SUCCESSED, responseMap)); + }*/ + + @PostMapping("/api/diary/list/feeling") + public ResponseEntity> getDiariesByFeeling( Principal principal,@RequestBody FeelingListRequestDto requestDto) { + + Long memberId=JwtProvider.getUserFromPrincipal(principal); + List diaries = diaryService.findDiariesByMemberIdAndFeeling(memberId,requestDto.getFeeling()); + + if (diaries.isEmpty()) { + return ResponseEntity.status(ErrorType.REQUEST_VALIDATION_ERROR.getHttpStatus()) + .body(ApiResponse.error(ErrorType.REQUEST_VALIDATION_ERROR, "해당 감정에 대한 일기가 존재하지 않습니다.")); + } + + List feelingList = diaries.stream() + .map(diary -> new FeelingListResponseDto(diary.getId(), diary.getWritedAt(), diary.getTitle())) + .collect(Collectors.toList()); + + Map> responseMap = Map.of("feelingList", feelingList); + return ResponseEntity.ok().body(ApiResponse.success(SuccessType.PROCESS_SUCCESSED, responseMap)); + } - @PostMapping("/api/diary/create/slow") + /* @PostMapping("/api/diary/create/slow") public ResponseEntity> createSlowTypeDiary(@RequestPart("imageurl")MultipartFile image, @RequestPart("diaryTitle") String diaryTitle, @RequestPart("diaryContent") String diaryContent){ @@ -143,6 +188,31 @@ public ResponseEntity> createSlowTypeDiary(@RequestPart("imageurl return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ApiResponse.error(ErrorType.INTERNAL_SERVER_ERROR,"서버 내부 오류")); } } +*/ + @PostMapping("/api/diary/create/slow") + public ResponseEntity> createSlowTypeDiary(Principal principal,@RequestPart("imageurl")MultipartFile image, + @RequestPart("diaryTitle") String diaryTitle, + @RequestPart("diaryContent") String diaryContent){ + + try { + String imageUrl = s3UploaderService.upload(image); + Long memberId=JwtProvider.getUserFromPrincipal(principal); + Member member= memberService.findByIdOrThrow(memberId); + Diary diary = new Diary(); + diary.setTitle(diaryTitle); + diary.setMember(member); + diary.setContent(diaryContent); + diary.setImageurl(imageUrl); + + Diary savedDiary=diaryService.saveDiary(diary); + SlowTypeCreateResponseDto responseDto=new SlowTypeCreateResponseDto(diary.getId(),diary.getContent(),diary.getTitle(),diary.getImageurl()); + + return ResponseEntity.ok().body(ApiResponse.success(SuccessType.PROCESS_SUCCESSED,responseDto)); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(ApiResponse.error(ErrorType.INTERNAL_SERVER_ERROR,"서버 내부 오류")); + } + } + diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/diary/repository/DiaryRepository.java b/src/main/java/org/kau/kkoolbeeServer/domain/diary/repository/DiaryRepository.java index 9ac3087..aa6a1cb 100644 --- a/src/main/java/org/kau/kkoolbeeServer/domain/diary/repository/DiaryRepository.java +++ b/src/main/java/org/kau/kkoolbeeServer/domain/diary/repository/DiaryRepository.java @@ -11,8 +11,11 @@ @Repository public interface DiaryRepository extends JpaRepository { - List findByWritedAtBetween(LocalDateTime startDateTime, LocalDateTime endDateTime); + /*List findByWritedAtBetween(LocalDateTime startDateTime, LocalDateTime endDateTime);*/ + List findByMemberIdAndWritedAtBetween(Long memberId, LocalDateTime startDate, LocalDateTime endDate); - List findByFeeling(Feeling feeling); + /*List findByFeeling(Feeling feeling);*/ + + List findByMemberIdAndFeeling(Long memberId,Feeling feeling); } diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/diary/service/DiaryService.java b/src/main/java/org/kau/kkoolbeeServer/domain/diary/service/DiaryService.java index 9726645..ccd76da 100644 --- a/src/main/java/org/kau/kkoolbeeServer/domain/diary/service/DiaryService.java +++ b/src/main/java/org/kau/kkoolbeeServer/domain/diary/service/DiaryService.java @@ -5,6 +5,7 @@ import org.kau.kkoolbeeServer.domain.diary.repository.DiaryRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.swing.text.html.Option; import java.time.LocalDateTime; @@ -27,16 +28,28 @@ public Optional findDiaryById(Long diary_id){ } - public List findDiariesByMonth(LocalDateTime date) { + /* public List findDiariesByMonth(LocalDateTime date) { LocalDateTime startOfMonth = date.withDayOfMonth(1).toLocalDate().atStartOfDay(); LocalDateTime endOfMonth = startOfMonth.plusMonths(1).minusSeconds(1); return diaryRepository.findByWritedAtBetween(startOfMonth, endOfMonth); + }*/ + + public List findDiariesByMonthAndMemberId(LocalDateTime date, Long memberId) { + LocalDateTime startOfMonth = date.withDayOfMonth(1).toLocalDate().atStartOfDay(); + LocalDateTime endOfMonth = startOfMonth.plusMonths(1).minusSeconds(1); + return diaryRepository.findByMemberIdAndWritedAtBetween(memberId, startOfMonth, endOfMonth); } - public List findDiariesByFeeling(String feeling) { + + + /* public List findDiariesByFeeling(String feeling) { return diaryRepository.findByFeeling(Feeling.valueOf(feeling)); } - +*/ + public List findDiariesByMemberIdAndFeeling(Long memberId,String feeling) { + return diaryRepository.findByMemberIdAndFeeling(memberId,Feeling.valueOf(feeling)); + } + @Transactional public Diary saveDiary(Diary diary){ return diaryRepository.save(diary); } diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/member/Member.java b/src/main/java/org/kau/kkoolbeeServer/domain/member/Member.java index 60275ce..8164106 100644 --- a/src/main/java/org/kau/kkoolbeeServer/domain/member/Member.java +++ b/src/main/java/org/kau/kkoolbeeServer/domain/member/Member.java @@ -54,4 +54,9 @@ public Member(String kakaoId) { public static Member of(String kakaoId) { return new Member(kakaoId); } + + + public void setDiaryType(UserDiaryType userDiaryType) { + this.userDiaryType = userDiaryType; + } } diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/member/controller/MemberController.java b/src/main/java/org/kau/kkoolbeeServer/domain/member/controller/MemberController.java index e3ffa37..9062b84 100644 --- a/src/main/java/org/kau/kkoolbeeServer/domain/member/controller/MemberController.java +++ b/src/main/java/org/kau/kkoolbeeServer/domain/member/controller/MemberController.java @@ -1,6 +1,7 @@ package org.kau.kkoolbeeServer.domain.member.controller; import lombok.RequiredArgsConstructor; +import org.kau.kkoolbeeServer.domain.member.UserDiaryType; import org.kau.kkoolbeeServer.domain.member.dto.response.MemberLoginResponseDto; import org.kau.kkoolbeeServer.domain.member.service.MemberService; import org.kau.kkoolbeeServer.global.auth.fegin.kakao.KakaoLoginService; @@ -20,6 +21,7 @@ public class MemberController { private final MemberService memberService; private final KakaoLoginService kakaoLoginService; + private final JwtProvider jwtProvider; @PostMapping("/login") public ResponseEntity> login( @@ -38,7 +40,7 @@ public ResponseEntity> reissue( @PatchMapping("/log-out") // Spring Security 자체의 logout과 겹치지 않기 위해 이렇게 설정 public ResponseEntity> logout(Principal principal) { - memberService.logout(JwtProvider.getUserFromPrincial(principal)); + memberService.logout(JwtProvider.getUserFromPrincipal(principal)); return ResponseEntity.ok(ApiResponse.success(SuccessType.LOGOUT_SUCCESS)); } @@ -47,4 +49,19 @@ public ResponseEntity> kakaoAccessToken( @RequestHeader("Authorization") String code) { return ResponseEntity.ok(ApiResponse.success(SuccessType.KAKAO_ACCESS_TOKEN_SUCCESS, kakaoLoginService.getKakaoAccessToken(code))); } + + @PostMapping("/member/character") + public ResponseEntity> diaryType(Principal principal,@RequestBody String userDiaryType){ + + Long memberId=JwtProvider.getUserFromPrincipal(principal); + + UserDiaryType diaryType=UserDiaryType.valueOf(userDiaryType); + memberService.setUserDiaryType(memberId,diaryType); + + return ResponseEntity.ok(ApiResponse.success(SuccessType.PROCESS_SUCCESSED)); + + + } + + } \ No newline at end of file diff --git a/src/main/java/org/kau/kkoolbeeServer/domain/member/service/MemberService.java b/src/main/java/org/kau/kkoolbeeServer/domain/member/service/MemberService.java index e5973e4..43422a1 100644 --- a/src/main/java/org/kau/kkoolbeeServer/domain/member/service/MemberService.java +++ b/src/main/java/org/kau/kkoolbeeServer/domain/member/service/MemberService.java @@ -3,6 +3,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.kau.kkoolbeeServer.domain.member.Member; +import org.kau.kkoolbeeServer.domain.member.UserDiaryType; import org.kau.kkoolbeeServer.domain.member.dto.response.MemberLoginResponseDto; import org.kau.kkoolbeeServer.domain.member.repository.MemberRepository; import org.kau.kkoolbeeServer.global.auth.fegin.kakao.KakaoLoginService; @@ -90,4 +91,33 @@ private Member getUserBySocialAndSocialId(String kakaoId) { private boolean isUserByKakaoId(String kakaoId) { return memberRepository.existsByKakaoId(kakaoId); } + + @Transactional + public void setUserDiaryType(Long memberId, UserDiaryType userDiaryType){ + + Member member=memberRepository.findByIdOrThrow(memberId); + member.setDiaryType(userDiaryType); + memberRepository.save(member); + + } + + @Transactional(readOnly = true) + public Member findByIdOrThrow(Long memberId) { + return memberRepository.findById(memberId) + .orElseThrow(() -> new CustomException(NOT_FOUND_MEMBER_ERROR)); + } + + + /* @Transactional + public void setUserDiaryType(String Token, String userDiaryType){ + + Token=parseTokenString(Token); + UserDiaryType DiaryType=UserDiaryType.valueOf(userDiaryType); + + jwtProvider.getUserFromJwt() + + + + + }*/ } \ No newline at end of file diff --git a/src/main/java/org/kau/kkoolbeeServer/global/auth/jwt/JwtProvider.java b/src/main/java/org/kau/kkoolbeeServer/global/auth/jwt/JwtProvider.java index 1cd503a..c658e55 100644 --- a/src/main/java/org/kau/kkoolbeeServer/global/auth/jwt/JwtProvider.java +++ b/src/main/java/org/kau/kkoolbeeServer/global/auth/jwt/JwtProvider.java @@ -155,7 +155,7 @@ private SecretKey getSigningKey() { return Keys.hmacShaKeyFor(encodedKey.getBytes()); } - public static Long getUserFromPrincial(Principal principal) { + public static Long getUserFromPrincipal(Principal principal) { if (isNull(principal)) { throw new CustomException(EMPTY_PRINCIPLE_ERROR); }