From 462cb785abc1d1a626a1cb4ee3b88906763a8344 Mon Sep 17 00:00:00 2001 From: 10Hyuna Date: Wed, 26 Feb 2025 15:45:18 +0900 Subject: [PATCH 01/14] =?UTF-8?q?Feat:=20=EC=9B=94=EB=B3=84=20=EC=9D=BC?= =?UTF-8?q?=EA=B8=B0=20=EC=A1=B0=ED=9A=8C=20API=20controller=20=EA=B5=AC?= =?UTF-8?q?=EC=B6=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 24 +++++++++++++++++++ .../bamboo/log/diary/api/DiaryController.java | 10 ++++++++ 2 files changed, 34 insertions(+) create mode 100644 .env diff --git a/.env b/.env new file mode 100644 index 0000000..74a0ff2 --- /dev/null +++ b/.env @@ -0,0 +1,24 @@ +MYSQL_HOST=localhost +MYSQL_PORT=3306 +MYSQL_NAME=forrest +MYSQL_USERNAME=root +MYSQL_PASSWORD=ensharp2005* + +API_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3Mzg4MzQxNDgsIm5iZiI6MTczODgzNDE0OCwia2V5X2lkIjoiZTdmNTUxN2MtYzNlZC00ZmVmLWFkNzYtNTUxZjA3ZDJmMjNiIn0.sMIASpWdac5l3GdIXshb7NnuB-PQlHMFyNurcpu4Cms; +FACE_URL=https://api-cloud-function.elice.io/d5ff1aef-c59f-433c-8e1c-f9b52ac4ab6a/predict +IMG_URL=https://api-cloud-function.elice.io/0133c2f7-9f3f-44b6-a3d6-c24ba8ef4510/generate + +JWT_SECRET=vmfhaltmskdlstkfkdgodyroqkfwkdbalroqkfwkdbalaaaaaaaaaaaaaaaabbbbb + +SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_AUTHENTICATION_METHOD=client_secret_post +SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_NAME=kakao +SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_ID=649c1e34aedc1a7db892333d900725f2 +SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_SECRET=FqJEAF5XKaO0n4Bv3KVXWCpUcHQWahY8 +SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_REDIRECT_URI=https://qbdffmpbayqfbgja.tunnel-pt.elice.io/login/oauth2/code/kakao +SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_AUTHORIZATION_GRANT_TYPE=authorization_code +SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_SCOPE=profile_nickname,account_email + +SECURITY_OAUTH2_PROVIDER_KAKAO_AUTHORIZATION_URI=https://kauth.kakao.com/oauth/authorize +SECURITY_OAUTH2_PROVIDER_KAKAO_TOKEN_URI=https://kauth.kakao.com/oauth/token +SECURITY_OAUTH2_PROVIDER_KAKAO_USER_INFO_URI=https://kapi.kakao.com/v2/user/me +SECURITY_OAUTH2_PROVIDER_KAKAO_USER_NAME_ATTRIBUTE=id \ No newline at end of file diff --git a/src/main/java/com/bamboo/log/diary/api/DiaryController.java b/src/main/java/com/bamboo/log/diary/api/DiaryController.java index 0b4e1c5..7d24b93 100644 --- a/src/main/java/com/bamboo/log/diary/api/DiaryController.java +++ b/src/main/java/com/bamboo/log/diary/api/DiaryController.java @@ -30,4 +30,14 @@ public ResponseEntity lookupRandomTopics(@RequestBody CreateDiaryRequest createD return ResponseHandler.create500Error(new ResponseForm(), e); } } + + @Operation(summary = "월별 일기 조회") + @GetMapping("/month") + public ResponseEntity getDiariesByMonth(@RequestParam String date) { + try { + + } catch (Exception e) { + return ResponseHandler.create500Error(new ResponseForm(), e); + } + } } From f6a223556bf4addbd400973c68b1331cad41dba1 Mon Sep 17 00:00:00 2001 From: 10Hyuna Date: Wed, 26 Feb 2025 15:48:49 +0900 Subject: [PATCH 02/14] Settings: Remove .env from Git tracking --- .env | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100644 .env diff --git a/.env b/.env deleted file mode 100644 index 74a0ff2..0000000 --- a/.env +++ /dev/null @@ -1,24 +0,0 @@ -MYSQL_HOST=localhost -MYSQL_PORT=3306 -MYSQL_NAME=forrest -MYSQL_USERNAME=root -MYSQL_PASSWORD=ensharp2005* - -API_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE3Mzg4MzQxNDgsIm5iZiI6MTczODgzNDE0OCwia2V5X2lkIjoiZTdmNTUxN2MtYzNlZC00ZmVmLWFkNzYtNTUxZjA3ZDJmMjNiIn0.sMIASpWdac5l3GdIXshb7NnuB-PQlHMFyNurcpu4Cms; -FACE_URL=https://api-cloud-function.elice.io/d5ff1aef-c59f-433c-8e1c-f9b52ac4ab6a/predict -IMG_URL=https://api-cloud-function.elice.io/0133c2f7-9f3f-44b6-a3d6-c24ba8ef4510/generate - -JWT_SECRET=vmfhaltmskdlstkfkdgodyroqkfwkdbalroqkfwkdbalaaaaaaaaaaaaaaaabbbbb - -SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_AUTHENTICATION_METHOD=client_secret_post -SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_NAME=kakao -SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_ID=649c1e34aedc1a7db892333d900725f2 -SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_CLIENT_SECRET=FqJEAF5XKaO0n4Bv3KVXWCpUcHQWahY8 -SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_REDIRECT_URI=https://qbdffmpbayqfbgja.tunnel-pt.elice.io/login/oauth2/code/kakao -SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_AUTHORIZATION_GRANT_TYPE=authorization_code -SECURITY_OAUTH2_CLIENT_REGISTRATION_KAKAO_SCOPE=profile_nickname,account_email - -SECURITY_OAUTH2_PROVIDER_KAKAO_AUTHORIZATION_URI=https://kauth.kakao.com/oauth/authorize -SECURITY_OAUTH2_PROVIDER_KAKAO_TOKEN_URI=https://kauth.kakao.com/oauth/token -SECURITY_OAUTH2_PROVIDER_KAKAO_USER_INFO_URI=https://kapi.kakao.com/v2/user/me -SECURITY_OAUTH2_PROVIDER_KAKAO_USER_NAME_ATTRIBUTE=id \ No newline at end of file From a775946c036167840ea0d06077d16f22486f8009 Mon Sep 17 00:00:00 2001 From: 10Hyuna Date: Wed, 26 Feb 2025 15:50:20 +0900 Subject: [PATCH 03/14] =?UTF-8?q?Feat:=20=EC=9B=94=EB=B3=84=20=EC=9D=BC?= =?UTF-8?q?=EA=B8=B0=20=EC=A1=B0=ED=9A=8C=20Service=20=ED=94=8C=EB=A1=9C?= =?UTF-8?q?=EC=9A=B0=20=EA=B5=AC=EC=B6=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +++- .../com/bamboo/log/diary/service/diary/DiaryService.java | 2 ++ .../com/bamboo/log/diary/service/diary/DiaryServiceImpl.java | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e48b6be..4c75e42 100644 --- a/.gitignore +++ b/.gitignore @@ -34,4 +34,6 @@ out/ /.nb-gradle/ ### VS Code ### -.vscode/ \ No newline at end of file +.vscode/ + +.env \ No newline at end of file diff --git a/src/main/java/com/bamboo/log/diary/service/diary/DiaryService.java b/src/main/java/com/bamboo/log/diary/service/diary/DiaryService.java index 50cb4ac..c6d3ba7 100644 --- a/src/main/java/com/bamboo/log/diary/service/diary/DiaryService.java +++ b/src/main/java/com/bamboo/log/diary/service/diary/DiaryService.java @@ -7,4 +7,6 @@ public interface DiaryService { ResponseEntity createDiary(CreateDiaryRequest createDiaryRequest); + ResponseEntity getDiariesByMonth(String date); + } diff --git a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java index 7aa7b33..cbef192 100644 --- a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java +++ b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java @@ -52,6 +52,11 @@ public ResponseEntity createDiary(CreateDiaryRequest createDiaryRequest) { return ResponseHandler.create201Response(new ResponseForm(), new CreateDiaryResponse(localDateTime)); } + @Override + public ResponseEntity getDiariesByMonth(String date) { + return null; + } + private Diary saveDiary(CreateDiaryRequest createDiaryRequest, LocalDateTime localDateTime) { UserEntity user = userContextUtil.getUserEntity(); From d6529a33c651a986d29deae381c96d38e23da2b5 Mon Sep 17 00:00:00 2001 From: 10Hyuna Date: Wed, 26 Feb 2025 15:54:00 +0900 Subject: [PATCH 04/14] =?UTF-8?q?Feat:=20=EC=9B=94=EB=B3=84=20=EC=9D=BC?= =?UTF-8?q?=EA=B8=B0=20=EC=A1=B0=ED=9A=8C=20Response=20Form=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bamboo/log/diary/api/DiaryController.java | 2 +- .../response/GetDiariesOfMonthResponse.java | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/bamboo/log/diary/dto/response/GetDiariesOfMonthResponse.java diff --git a/src/main/java/com/bamboo/log/diary/api/DiaryController.java b/src/main/java/com/bamboo/log/diary/api/DiaryController.java index 7d24b93..ffd3851 100644 --- a/src/main/java/com/bamboo/log/diary/api/DiaryController.java +++ b/src/main/java/com/bamboo/log/diary/api/DiaryController.java @@ -35,7 +35,7 @@ public ResponseEntity lookupRandomTopics(@RequestBody CreateDiaryRequest createD @GetMapping("/month") public ResponseEntity getDiariesByMonth(@RequestParam String date) { try { - + return diaryService.getDiariesByMonth(date); } catch (Exception e) { return ResponseHandler.create500Error(new ResponseForm(), e); } diff --git a/src/main/java/com/bamboo/log/diary/dto/response/GetDiariesOfMonthResponse.java b/src/main/java/com/bamboo/log/diary/dto/response/GetDiariesOfMonthResponse.java new file mode 100644 index 0000000..96285a3 --- /dev/null +++ b/src/main/java/com/bamboo/log/diary/dto/response/GetDiariesOfMonthResponse.java @@ -0,0 +1,22 @@ +package com.bamboo.log.diary.dto.response; + +import lombok.Builder; + +import java.time.LocalDateTime; +import java.util.List; + +@Builder +public record GetDiariesOfMonthResponse( + int diariesCount, + String date, + List diaries +) { + + @Builder + public record DiaryOfMonth( + LocalDateTime createdAt, + String context, + byte[] summaryImage + ) {} + +} From 7e908b2c614f3a6b416a2d9c038f86f7c5874104 Mon Sep 17 00:00:00 2001 From: 10Hyuna Date: Wed, 26 Feb 2025 16:01:36 +0900 Subject: [PATCH 05/14] =?UTF-8?q?Feat:=20String=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=A0=84=EB=8B=AC=EB=B0=9B=EC=9D=80=20=EB=85=84=EB=8F=84?= =?UTF-8?q?=EC=99=80=20=EC=9B=94=EC=9D=84=20LocalDateTime=20=EC=9E=90?= =?UTF-8?q?=EB=A3=8C=ED=98=95=EC=9C=BC=EB=A1=9C=20Convert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bamboo/log/diary/dto/ParseYearMonth.java | 17 +++++++++++++++++ .../diary/service/diary/DiaryServiceImpl.java | 15 +++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 src/main/java/com/bamboo/log/diary/dto/ParseYearMonth.java diff --git a/src/main/java/com/bamboo/log/diary/dto/ParseYearMonth.java b/src/main/java/com/bamboo/log/diary/dto/ParseYearMonth.java new file mode 100644 index 0000000..3811fea --- /dev/null +++ b/src/main/java/com/bamboo/log/diary/dto/ParseYearMonth.java @@ -0,0 +1,17 @@ +package com.bamboo.log.diary.dto; + +import lombok.Builder; +import lombok.Getter; + +import java.time.LocalDateTime; +import java.time.YearMonth; + +@Getter +@Builder +public class ParseYearMonth { + + private YearMonth parsedYearMonth; + private LocalDateTime startOfMonth; + private LocalDateTime endOfMonth; + +} diff --git a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java index cbef192..0dc1739 100644 --- a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java +++ b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java @@ -1,6 +1,7 @@ package com.bamboo.log.diary.service.diary; import com.bamboo.log.diary.domain.Diary; +import com.bamboo.log.diary.dto.ParseYearMonth; import com.bamboo.log.diary.dto.request.CreateDiaryRequest; import com.bamboo.log.diary.dto.response.CreateDiaryResponse; import com.bamboo.log.diary.repository.DiaryRepository; @@ -21,6 +22,8 @@ import java.io.IOException; import java.time.LocalDateTime; +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; @Service @Transactional @@ -69,4 +72,16 @@ private Diary saveDiary(CreateDiaryRequest createDiaryRequest, LocalDateTime loc return diaryRepository.save(diary); } + private ParseYearMonth getParsedDate(String date) { + YearMonth parsedYearMonth = YearMonth.parse(date, DateTimeFormatter.ofPattern("yyyy-MM")); + LocalDateTime startOfMonth = parsedYearMonth.atDay(1).atStartOfDay(); + LocalDateTime endOfMonth = parsedYearMonth.atEndOfMonth().atTime(23, 59, 59); + + return ParseYearMonth.builder() + .parsedYearMonth(parsedYearMonth) + .startOfMonth(startOfMonth) + .endOfMonth(endOfMonth) + .build(); + } + } From b3c1538321beefd96676b045e0e75fa399868b83 Mon Sep 17 00:00:00 2001 From: 10Hyuna Date: Wed, 26 Feb 2025 16:05:34 +0900 Subject: [PATCH 06/14] =?UTF-8?q?Feat:=20=EC=9C=A0=EC=A0=80=20=EC=8B=9D?= =?UTF-8?q?=EB=B3=84=EC=9E=90=EC=99=80=20=EB=82=A0=EC=A7=9C=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=EB=A5=BC=20=EA=B8=B0=EB=B0=98=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=A7=A4=EC=B9=AD=EB=90=98=EB=8A=94=20=EC=9D=BC=EA=B8=B0=20?= =?UTF-8?q?=EC=B6=94=EC=B6=9C=ED=95=98=EB=8A=94=20Respository=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 3 +++ .../bamboo/log/diary/repository/DiaryRepository.java | 7 +++++++ .../log/diary/service/diary/DiaryServiceImpl.java | 10 ++++++++++ 3 files changed, 20 insertions(+) diff --git a/build.gradle b/build.gradle index 53c709f..0e6598d 100644 --- a/build.gradle +++ b/build.gradle @@ -46,6 +46,9 @@ dependencies { // okhttp implementation 'com.squareup.okhttp3:okhttp:4.12.0' + + // mapper + implementation 'org.modelmapper:modelmapper:3.0.0' } tasks.named('test') { diff --git a/src/main/java/com/bamboo/log/diary/repository/DiaryRepository.java b/src/main/java/com/bamboo/log/diary/repository/DiaryRepository.java index 416db42..27411bc 100644 --- a/src/main/java/com/bamboo/log/diary/repository/DiaryRepository.java +++ b/src/main/java/com/bamboo/log/diary/repository/DiaryRepository.java @@ -1,7 +1,14 @@ package com.bamboo.log.diary.repository; import com.bamboo.log.diary.domain.Diary; +import com.bamboo.log.domain.user.oauth.entity.UserEntity; import org.springframework.data.jpa.repository.JpaRepository; +import java.time.LocalDateTime; +import java.util.List; + public interface DiaryRepository extends JpaRepository { + + List findByUserAndCreatedAtBetween(UserEntity user, LocalDateTime start, LocalDateTime end); + } diff --git a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java index 0dc1739..d3bf887 100644 --- a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java +++ b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java @@ -6,6 +6,7 @@ import com.bamboo.log.diary.dto.response.CreateDiaryResponse; import com.bamboo.log.diary.repository.DiaryRepository; import com.bamboo.log.domain.user.oauth.dto.CustomOAuth2User; +import com.bamboo.log.domain.user.oauth.repository.UserRepository; import com.bamboo.log.domain.user.oauth.service.CustomOAuth2UserService; import org.springframework.security.core.GrantedAuthority; @@ -24,6 +25,7 @@ import java.time.LocalDateTime; import java.time.YearMonth; import java.time.format.DateTimeFormatter; +import java.util.List; @Service @Transactional @@ -31,6 +33,7 @@ public class DiaryServiceImpl implements DiaryService { private final UserContextUtil userContextUtil; + private final UserRepository userRepository; private final DiaryRepository diaryRepository; private final TodaySummaryService todaySummaryService; @@ -57,6 +60,13 @@ public ResponseEntity createDiary(CreateDiaryRequest createDiaryRequest) { @Override public ResponseEntity getDiariesByMonth(String date) { + ParseYearMonth parseYearMonth = getParsedDate(date); + UserEntity user = userRepository.findByUsername(userContextUtil.getUsername()); + + try { + List diaries = diaryRepository. + } + return null; } From 464294e2f0506bf87fabb052d98ff0089c9a2181 Mon Sep 17 00:00:00 2001 From: 10Hyuna Date: Wed, 26 Feb 2025 16:07:54 +0900 Subject: [PATCH 07/14] =?UTF-8?q?Feat:=20=EB=8B=A4=EC=9D=B4=EC=96=B4?= =?UTF-8?q?=EB=A6=AC=20=EC=95=84=EC=9D=B4=EB=94=94=EC=99=80=20=EC=99=B8?= =?UTF-8?q?=EB=9E=98=ED=82=A4=EB=A1=9C=20=EB=A7=A4=ED=95=91=EB=90=98?= =?UTF-8?q?=EC=96=B4=20=EC=9E=88=EB=8A=94=20=ED=95=98=EB=A3=A8=20=EC=9A=94?= =?UTF-8?q?=EC=95=BD=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=ED=95=98=EB=8A=94=20Repository=20=ED=95=A8=EC=88=98=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bamboo/log/diary/repository/TodaySummaryRepository.java | 5 +++++ .../com/bamboo/log/diary/service/diary/DiaryServiceImpl.java | 5 ++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/bamboo/log/diary/repository/TodaySummaryRepository.java b/src/main/java/com/bamboo/log/diary/repository/TodaySummaryRepository.java index 4093d83..2442924 100644 --- a/src/main/java/com/bamboo/log/diary/repository/TodaySummaryRepository.java +++ b/src/main/java/com/bamboo/log/diary/repository/TodaySummaryRepository.java @@ -3,5 +3,10 @@ import com.bamboo.log.diary.domain.TodaySummary; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; + public interface TodaySummaryRepository extends JpaRepository { + + Optional findByDiaryId(Long diaryId); + } diff --git a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java index d3bf887..29b9e85 100644 --- a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java +++ b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java @@ -64,7 +64,10 @@ public ResponseEntity getDiariesByMonth(String date) { UserEntity user = userRepository.findByUsername(userContextUtil.getUsername()); try { - List diaries = diaryRepository. + List diaries = + diaryRepository.findByUserAndCreatedAtBetween(user, + parseYearMonth.getStartOfMonth(), parseYearMonth.getEndOfMonth()); + } return null; From ccd12d878fd2cdf4454a4671ea594bee1e4f9241 Mon Sep 17 00:00:00 2001 From: 10Hyuna Date: Wed, 26 Feb 2025 16:18:12 +0900 Subject: [PATCH 08/14] =?UTF-8?q?Feat:=20=EC=9B=94=EB=B3=84=20=EC=9D=BC?= =?UTF-8?q?=EA=B8=B0=20=EC=A1=B0=ED=9A=8C=20API=20Service=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/TodaySummaryRepository.java | 3 ++ .../diary/service/diary/DiaryServiceImpl.java | 32 ++++++++++++++++--- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/bamboo/log/diary/repository/TodaySummaryRepository.java b/src/main/java/com/bamboo/log/diary/repository/TodaySummaryRepository.java index 2442924..195266f 100644 --- a/src/main/java/com/bamboo/log/diary/repository/TodaySummaryRepository.java +++ b/src/main/java/com/bamboo/log/diary/repository/TodaySummaryRepository.java @@ -3,10 +3,13 @@ import com.bamboo.log.diary.domain.TodaySummary; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; import java.util.Optional; public interface TodaySummaryRepository extends JpaRepository { Optional findByDiaryId(Long diaryId); + List findByDiaryIdIn(List diaryIds); + } diff --git a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java index 29b9e85..671073a 100644 --- a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java +++ b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java @@ -4,11 +4,11 @@ import com.bamboo.log.diary.dto.ParseYearMonth; import com.bamboo.log.diary.dto.request.CreateDiaryRequest; import com.bamboo.log.diary.dto.response.CreateDiaryResponse; +import com.bamboo.log.diary.dto.response.GetDiariesOfMonthResponse; +import com.bamboo.log.diary.dto.response.GetDiariesOfMonthResponse.DiaryOfMonth; import com.bamboo.log.diary.repository.DiaryRepository; -import com.bamboo.log.domain.user.oauth.dto.CustomOAuth2User; +import com.bamboo.log.diary.repository.TodaySummaryRepository; import com.bamboo.log.domain.user.oauth.repository.UserRepository; -import com.bamboo.log.domain.user.oauth.service.CustomOAuth2UserService; -import org.springframework.security.core.GrantedAuthority; import com.bamboo.log.diary.service.summary.TodaySummaryService; import com.bamboo.log.domain.user.jwt.service.UserContextUtil; @@ -26,6 +26,8 @@ import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; @Service @Transactional @@ -36,6 +38,7 @@ public class DiaryServiceImpl implements DiaryService { private final UserRepository userRepository; private final DiaryRepository diaryRepository; private final TodaySummaryService todaySummaryService; + private final TodaySummaryRepository todaySummaryRepository; @Override public ResponseEntity createDiary(CreateDiaryRequest createDiaryRequest) { @@ -68,9 +71,28 @@ public ResponseEntity getDiariesByMonth(String date) { diaryRepository.findByUserAndCreatedAtBetween(user, parseYearMonth.getStartOfMonth(), parseYearMonth.getEndOfMonth()); + List diaryIds = diaries.stream().map(Diary::getId).toList(); + Map summaryImageMap = todaySummaryRepository.findByDiaryIdIn(diaryIds) + .stream() + .collect(Collectors.toMap(summary -> summary.getDiaryId(), summary -> summary.getImageData())); + + List diaryOfMonthList = diaries.stream() + .map(diary -> new DiaryOfMonth( + diary.getCreatedAt(), + diary.getContext(), + summaryImageMap.getOrDefault(diary.getId(), null) + )) + .toList(); + + return ResponseHandler.create200Response(new ResponseForm(), + GetDiariesOfMonthResponse.builder() + .diariesCount(diaryOfMonthList.size()) + .date(date) + .diaries(diaryOfMonthList) + .build()); + } catch (RuntimeException e) { + return ResponseHandler.create500Error(new ResponseForm(), e); } - - return null; } private Diary saveDiary(CreateDiaryRequest createDiaryRequest, LocalDateTime localDateTime) { From 9826965d03fcaa4ffd76f01d318dc3cdaa388854 Mon Sep 17 00:00:00 2001 From: 10Hyuna Date: Wed, 26 Feb 2025 16:20:51 +0900 Subject: [PATCH 09/14] =?UTF-8?q?Refactor:=20API=20=EC=98=88=EC=99=B8=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EB=8B=A8=EC=97=90=EC=84=9C=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=8F=20=EA=B0=84=EC=86=8C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bamboo/log/diary/api/DiaryController.java | 12 ++---------- .../log/diary/service/diary/DiaryServiceImpl.java | 12 ++++++++---- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/bamboo/log/diary/api/DiaryController.java b/src/main/java/com/bamboo/log/diary/api/DiaryController.java index ffd3851..8760aa9 100644 --- a/src/main/java/com/bamboo/log/diary/api/DiaryController.java +++ b/src/main/java/com/bamboo/log/diary/api/DiaryController.java @@ -24,20 +24,12 @@ public class DiaryController { @Operation(summary = "랜덤 주제 조회") @PostMapping("/create") public ResponseEntity lookupRandomTopics(@RequestBody CreateDiaryRequest createDiaryRequest) { - try { - return diaryService.createDiary(createDiaryRequest); - } catch (Exception e) { - return ResponseHandler.create500Error(new ResponseForm(), e); - } + return diaryService.createDiary(createDiaryRequest); } @Operation(summary = "월별 일기 조회") @GetMapping("/month") public ResponseEntity getDiariesByMonth(@RequestParam String date) { - try { - return diaryService.getDiariesByMonth(date); - } catch (Exception e) { - return ResponseHandler.create500Error(new ResponseForm(), e); - } + return diaryService.getDiariesByMonth(date); } } diff --git a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java index 671073a..b738c9a 100644 --- a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java +++ b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java @@ -53,6 +53,8 @@ public ResponseEntity createDiary(CreateDiaryRequest createDiaryRequest) { // todaySummaryImage 데이터베이스에 저장 try { todaySummaryService.saveTodaySummaryImage(todayImage, diary.getId()); + } catch (RuntimeException e) { + return ResponseHandler.create404Error(new ResponseForm(), e); } catch (IOException e) { return ResponseHandler.create500Error(new ResponseForm(), e); } @@ -86,11 +88,13 @@ public ResponseEntity getDiariesByMonth(String date) { return ResponseHandler.create200Response(new ResponseForm(), GetDiariesOfMonthResponse.builder() - .diariesCount(diaryOfMonthList.size()) - .date(date) - .diaries(diaryOfMonthList) - .build()); + .diariesCount(diaryOfMonthList.size()) + .date(date) + .diaries(diaryOfMonthList) + .build()); } catch (RuntimeException e) { + return ResponseHandler.create404Error(new ResponseForm(), e); + } catch (Exception e) { return ResponseHandler.create500Error(new ResponseForm(), e); } } From 8807986333d4f635c160d7887f6d39cf74ed8aab Mon Sep 17 00:00:00 2001 From: 10Hyuna Date: Wed, 26 Feb 2025 22:00:49 +0900 Subject: [PATCH 10/14] =?UTF-8?q?Fix:=20Merge=20conflict=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0=20in=20build.gradle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 0e6598d..b5e78e7 100644 --- a/build.gradle +++ b/build.gradle @@ -47,8 +47,11 @@ dependencies { // okhttp implementation 'com.squareup.okhttp3:okhttp:4.12.0' - // mapper + // mapper (ModelMapper) implementation 'org.modelmapper:modelmapper:3.0.0' + + // dotenv (환경변수 관리) + implementation 'io.github.cdimascio:java-dotenv:5.2.2' } tasks.named('test') { From f1f943cce745718f03448a25bb78924fe0137a06 Mon Sep 17 00:00:00 2001 From: 10Hyuna Date: Wed, 26 Feb 2025 22:01:57 +0900 Subject: [PATCH 11/14] =?UTF-8?q?Fix:=20Merge=20conflict=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0=20in=20DiaryController?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bamboo/log/diary/api/DiaryController.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/bamboo/log/diary/api/DiaryController.java b/src/main/java/com/bamboo/log/diary/api/DiaryController.java index 8760aa9..6268ae9 100644 --- a/src/main/java/com/bamboo/log/diary/api/DiaryController.java +++ b/src/main/java/com/bamboo/log/diary/api/DiaryController.java @@ -11,7 +11,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; -import java.util.List; +import java.time.LocalDateTime; @RestController @RequiredArgsConstructor @@ -21,10 +21,14 @@ public class DiaryController { private final DiaryService diaryService; - @Operation(summary = "랜덤 주제 조회") + @Operation(summary = "일기 생성") @PostMapping("/create") - public ResponseEntity lookupRandomTopics(@RequestBody CreateDiaryRequest createDiaryRequest) { - return diaryService.createDiary(createDiaryRequest); + public ResponseEntity createDiary(@RequestBody CreateDiaryRequest createDiaryRequest) { + try { + return diaryService.createDiary(createDiaryRequest); + } catch (Exception e) { + return ResponseHandler.create500Error(new ResponseForm(), e); + } } @Operation(summary = "월별 일기 조회") @@ -32,4 +36,10 @@ public ResponseEntity lookupRandomTopics(@RequestBody CreateDiaryRequest createD public ResponseEntity getDiariesByMonth(@RequestParam String date) { return diaryService.getDiariesByMonth(date); } + + @Operation(summary = "날짜별 일기 조회") + @GetMapping("/date") + public ResponseEntity getDiaryByDate(@RequestParam LocalDateTime date) { + return diaryService.getDiaryByDate(date); + } } From eba68bf43956d9d463bf012de2817db5be27db62 Mon Sep 17 00:00:00 2001 From: 10Hyuna Date: Wed, 26 Feb 2025 22:04:05 +0900 Subject: [PATCH 12/14] =?UTF-8?q?Fix:=20Merge=20conflict=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0=20in=20DiaryRepository?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/bamboo/log/diary/repository/DiaryRepository.java | 2 +- .../com/bamboo/log/diary/service/diary/DiaryServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/bamboo/log/diary/repository/DiaryRepository.java b/src/main/java/com/bamboo/log/diary/repository/DiaryRepository.java index 27411bc..922fcfd 100644 --- a/src/main/java/com/bamboo/log/diary/repository/DiaryRepository.java +++ b/src/main/java/com/bamboo/log/diary/repository/DiaryRepository.java @@ -9,6 +9,6 @@ public interface DiaryRepository extends JpaRepository { - List findByUserAndCreatedAtBetween(UserEntity user, LocalDateTime start, LocalDateTime end); + List findByUserAAndCreatedAtBetween(UserEntity user, LocalDateTime start, LocalDateTime end); } diff --git a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java index b738c9a..cce47ec 100644 --- a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java +++ b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java @@ -70,7 +70,7 @@ public ResponseEntity getDiariesByMonth(String date) { try { List diaries = - diaryRepository.findByUserAndCreatedAtBetween(user, + diaryRepository.findByUserAAndCreatedAtBetween(user, parseYearMonth.getStartOfMonth(), parseYearMonth.getEndOfMonth()); List diaryIds = diaries.stream().map(Diary::getId).toList(); From 0af3cc295bd07534f1f3bee9597f36050f9ee24c Mon Sep 17 00:00:00 2001 From: 10Hyuna Date: Wed, 26 Feb 2025 22:07:29 +0900 Subject: [PATCH 13/14] =?UTF-8?q?Fix:=20Merge=20conflict=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0=20in=20DiaryService?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../log/diary/service/diary/DiaryService.java | 3 ++ .../diary/service/diary/DiaryServiceImpl.java | 47 +++++++++++++------ 2 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/bamboo/log/diary/service/diary/DiaryService.java b/src/main/java/com/bamboo/log/diary/service/diary/DiaryService.java index c6d3ba7..85392f0 100644 --- a/src/main/java/com/bamboo/log/diary/service/diary/DiaryService.java +++ b/src/main/java/com/bamboo/log/diary/service/diary/DiaryService.java @@ -3,10 +3,13 @@ import com.bamboo.log.diary.dto.request.CreateDiaryRequest; import org.springframework.http.ResponseEntity; +import java.time.LocalDateTime; + public interface DiaryService { ResponseEntity createDiary(CreateDiaryRequest createDiaryRequest); ResponseEntity getDiariesByMonth(String date); + ResponseEntity getDiaryByDate(LocalDateTime date); } diff --git a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java index cce47ec..3b302bc 100644 --- a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java +++ b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java @@ -1,6 +1,7 @@ package com.bamboo.log.diary.service.diary; import com.bamboo.log.diary.domain.Diary; +import com.bamboo.log.diary.domain.TodaySummary; import com.bamboo.log.diary.dto.ParseYearMonth; import com.bamboo.log.diary.dto.request.CreateDiaryRequest; import com.bamboo.log.diary.dto.response.CreateDiaryResponse; @@ -8,12 +9,10 @@ import com.bamboo.log.diary.dto.response.GetDiariesOfMonthResponse.DiaryOfMonth; import com.bamboo.log.diary.repository.DiaryRepository; import com.bamboo.log.diary.repository.TodaySummaryRepository; -import com.bamboo.log.domain.user.oauth.repository.UserRepository; - import com.bamboo.log.diary.service.summary.TodaySummaryService; import com.bamboo.log.domain.user.jwt.service.UserContextUtil; -import com.bamboo.log.domain.user.oauth.dto.KakaoResponse; import com.bamboo.log.domain.user.oauth.entity.UserEntity; +import com.bamboo.log.domain.user.oauth.repository.UserRepository; import com.bamboo.log.utils.ResponseHandler; import com.bamboo.log.utils.dto.ResponseForm; import lombok.RequiredArgsConstructor; @@ -27,6 +26,7 @@ import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; @Service @@ -42,15 +42,10 @@ public class DiaryServiceImpl implements DiaryService { @Override public ResponseEntity createDiary(CreateDiaryRequest createDiaryRequest) { - // 해당 시점의 localDateTime 저장 LocalDateTime localDateTime = LocalDateTime.now(); - - // 데이터베이스에 저장 Diary diary = saveDiary(createDiaryRequest, localDateTime); - byte[] todayImage = todaySummaryService.createTodaySummaryImage(createDiaryRequest.diaryDetail()); - // todaySummaryImage 데이터베이스에 저장 try { todaySummaryService.saveTodaySummaryImage(todayImage, diary.getId()); } catch (RuntimeException e) { @@ -59,7 +54,6 @@ public ResponseEntity createDiary(CreateDiaryRequest createDiaryRequest) { return ResponseHandler.create500Error(new ResponseForm(), e); } - // 201 code 반환 return ResponseHandler.create201Response(new ResponseForm(), new CreateDiaryResponse(localDateTime)); } @@ -69,14 +63,13 @@ public ResponseEntity getDiariesByMonth(String date) { UserEntity user = userRepository.findByUsername(userContextUtil.getUsername()); try { - List diaries = - diaryRepository.findByUserAAndCreatedAtBetween(user, - parseYearMonth.getStartOfMonth(), parseYearMonth.getEndOfMonth()); + List diaries = diaryRepository.findByUserAAndCreatedAtBetween(user, + parseYearMonth.getStartOfMonth(), parseYearMonth.getEndOfMonth()); List diaryIds = diaries.stream().map(Diary::getId).toList(); Map summaryImageMap = todaySummaryRepository.findByDiaryIdIn(diaryIds) .stream() - .collect(Collectors.toMap(summary -> summary.getDiaryId(), summary -> summary.getImageData())); + .collect(Collectors.toMap(TodaySummary::getDiaryId, TodaySummary::getImageData)); List diaryOfMonthList = diaries.stream() .map(diary -> new DiaryOfMonth( @@ -99,6 +92,33 @@ public ResponseEntity getDiariesByMonth(String date) { } } + @Override + public ResponseEntity getDiaryByDate(LocalDateTime date) { + UserEntity user = userRepository.findByUsername(userContextUtil.getUsername()); + + try { + List diaries = diaryRepository.findByUserAAndCreatedAtBetween(user, date, date); + if (diaries.isEmpty()) { + throw new RuntimeException("해당 날짜에 작성된 일기가 없습니다."); + } + + Diary diaryByDate = diaries.get(0); + Optional summaryImage = todaySummaryRepository.findByDiaryId(diaryByDate.getId()); + + return ResponseHandler.create200Response(new ResponseForm(), + CheckDiaryResponse.builder() + .date(diaryByDate.getCreatedAt()) + .diaryDescription(diaryByDate.getContext()) + .summaryImage(summaryImage.map(TodaySummary::getImageData).orElse(null)) + .build()); + + } catch (RuntimeException e) { + return ResponseHandler.create404Error(new ResponseForm(), new IllegalArgumentException("해당 날짜에 작성된 일기가 없습니다.")); + } catch (Exception e) { + return ResponseHandler.create500Error(new ResponseForm(), e); + } + } + private Diary saveDiary(CreateDiaryRequest createDiaryRequest, LocalDateTime localDateTime) { UserEntity user = userContextUtil.getUserEntity(); @@ -122,5 +142,4 @@ private ParseYearMonth getParsedDate(String date) { .endOfMonth(endOfMonth) .build(); } - } From a2d810b387cbf9b72676214eb22e214f1cab74f5 Mon Sep 17 00:00:00 2001 From: 10Hyuna Date: Wed, 26 Feb 2025 22:10:00 +0900 Subject: [PATCH 14/14] =?UTF-8?q?Fix:=20Merge=20Conflict=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0=20in=20DTO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../log/diary/dto/response/CheckDiaryResponse.java | 13 +++++++++++++ .../log/diary/service/diary/DiaryServiceImpl.java | 1 + 2 files changed, 14 insertions(+) create mode 100644 src/main/java/com/bamboo/log/diary/dto/response/CheckDiaryResponse.java diff --git a/src/main/java/com/bamboo/log/diary/dto/response/CheckDiaryResponse.java b/src/main/java/com/bamboo/log/diary/dto/response/CheckDiaryResponse.java new file mode 100644 index 0000000..ad365f7 --- /dev/null +++ b/src/main/java/com/bamboo/log/diary/dto/response/CheckDiaryResponse.java @@ -0,0 +1,13 @@ +package com.bamboo.log.diary.dto.response; + +import jakarta.validation.constraints.NotEmpty; +import lombok.Builder; + +import java.time.LocalDateTime; + +@Builder +public record CheckDiaryResponse(@NotEmpty(message = "Date shouldn't be empty") LocalDateTime date, + @NotEmpty(message = "Diary Description shouldn't be empty") String diaryDescription, + @NotEmpty(message = "Summary Image shouldn't be empty") byte[] summaryImage +) { +} \ No newline at end of file diff --git a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java index 3b302bc..462588a 100644 --- a/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java +++ b/src/main/java/com/bamboo/log/diary/service/diary/DiaryServiceImpl.java @@ -4,6 +4,7 @@ import com.bamboo.log.diary.domain.TodaySummary; import com.bamboo.log.diary.dto.ParseYearMonth; import com.bamboo.log.diary.dto.request.CreateDiaryRequest; +import com.bamboo.log.diary.dto.response.CheckDiaryResponse; import com.bamboo.log.diary.dto.response.CreateDiaryResponse; import com.bamboo.log.diary.dto.response.GetDiariesOfMonthResponse; import com.bamboo.log.diary.dto.response.GetDiariesOfMonthResponse.DiaryOfMonth;