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/build.gradle b/build.gradle index 53c709f..c0649cd 100644 --- a/build.gradle +++ b/build.gradle @@ -46,6 +46,8 @@ dependencies { // okhttp implementation 'com.squareup.okhttp3:okhttp:4.12.0' + + implementation 'io.github.cdimascio:java-dotenv:5.2.2' } tasks.named('test') { diff --git a/src/main/java/com/bamboo/log/common/config/EnvConfig.java b/src/main/java/com/bamboo/log/common/config/EnvConfig.java new file mode 100644 index 0000000..e531e99 --- /dev/null +++ b/src/main/java/com/bamboo/log/common/config/EnvConfig.java @@ -0,0 +1,13 @@ +package com.bamboo.log.common.config; + +import io.github.cdimascio.dotenv.Dotenv; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class EnvConfig { + @Bean + public Dotenv dotenv() { + return Dotenv.configure().ignoreIfMissing().load(); + } +} 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..bdde0d2 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,13 +21,19 @@ public class DiaryController { private final DiaryService diaryService; - @Operation(summary = "랜덤 주제 조회") + @Operation(summary = "일기 생성") @PostMapping("/create") - public ResponseEntity lookupRandomTopics(@RequestBody CreateDiaryRequest createDiaryRequest) { + public ResponseEntity createDiary(@RequestBody CreateDiaryRequest createDiaryRequest) { try { return diaryService.createDiary(createDiaryRequest); } catch (Exception e) { return ResponseHandler.create500Error(new ResponseForm(), e); } } + + @Operation(summary = "날짜별 일기 조회") + @GetMapping("/date") + public ResponseEntity getDiaryByDate(@RequestParam LocalDateTime date) { + return diaryService.getDiaryByDate(date); + } } 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..b15ff89 --- /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 + ) { +} 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..922fcfd 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 findByUserAAndCreatedAtBetween(UserEntity user, LocalDateTime start, LocalDateTime end); + } 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/DiaryService.java b/src/main/java/com/bamboo/log/diary/service/diary/DiaryService.java index 50cb4ac..57d08fc 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,8 +3,12 @@ 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 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 7aa7b33..66a2fe6 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,10 +1,14 @@ 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.request.CreateDiaryRequest; +import com.bamboo.log.diary.dto.response.CheckDiaryResponse; import com.bamboo.log.diary.dto.response.CreateDiaryResponse; import com.bamboo.log.diary.repository.DiaryRepository; +import com.bamboo.log.diary.repository.TodaySummaryRepository; 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; @@ -21,6 +25,8 @@ import java.io.IOException; import java.time.LocalDateTime; +import java.util.List; +import java.util.Optional; @Service @Transactional @@ -28,8 +34,10 @@ public class DiaryServiceImpl implements DiaryService { private final UserContextUtil userContextUtil; + private final UserRepository userRepository; private final DiaryRepository diaryRepository; private final TodaySummaryService todaySummaryService; + private final TodaySummaryRepository todaySummaryRepository; @Override public ResponseEntity createDiary(CreateDiaryRequest createDiaryRequest) { @@ -52,6 +60,29 @@ public ResponseEntity createDiary(CreateDiaryRequest createDiaryRequest) { return ResponseHandler.create201Response(new ResponseForm(), new CreateDiaryResponse(localDateTime)); } + @Override + public ResponseEntity getDiaryByDate(LocalDateTime date) { + UserEntity user = userRepository.findByUsername(userContextUtil.getUsername()); + + try { + List diaries = diaryRepository.findByUserAAndCreatedAtBetween(user, date, date); + 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.get().getImageData())); + + } 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();