From ef3b5f0caa0f3657ff8c603bd2494b86decd0d21 Mon Sep 17 00:00:00 2001 From: snacktime Date: Tue, 16 Jul 2024 17:38:54 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20TT-271=20=EB=82=A8=EC=9D=80=20?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=20=EC=A1=B0=ED=9A=8C=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=20=EC=8A=A4=ED=8E=99=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit { { "remainingTime" : {"text": "HH시간 MM분 SS초", "second": Long} } --- .../peech/common/utils/ScriptUtils.java | 10 +++--- .../usagetime/constant/ConstantValue.java | 9 +++++ .../SwaggerUsageTimeController.java | 10 ++---- .../controller/UsageTimeController.java | 5 +-- .../peech/usagetime/dto/RemainingTimeDTO.java | 12 +++++++ ...java => TextAndSecondTimeResponseDTO.java} | 5 +-- .../repository/UsageTimeRepository.java | 1 - .../usagetime/service/UsageTimeService.java | 35 ++++++++++++++++--- 8 files changed, 64 insertions(+), 23 deletions(-) create mode 100644 src/main/java/com/twentythree/peech/usagetime/constant/ConstantValue.java create mode 100644 src/main/java/com/twentythree/peech/usagetime/dto/RemainingTimeDTO.java rename src/main/java/com/twentythree/peech/usagetime/dto/response/{RemainingTimeResponseDTO.java => TextAndSecondTimeResponseDTO.java} (53%) diff --git a/src/main/java/com/twentythree/peech/common/utils/ScriptUtils.java b/src/main/java/com/twentythree/peech/common/utils/ScriptUtils.java index 754a306e..5430a59a 100644 --- a/src/main/java/com/twentythree/peech/common/utils/ScriptUtils.java +++ b/src/main/java/com/twentythree/peech/common/utils/ScriptUtils.java @@ -21,13 +21,11 @@ public static LocalTime transferSeoondToLocalTime(float time) { int second = (int) time; - int minute = (int) (second / 60); - int hour = (int) (second / (60 * 60)); + int hour = second / 3600; + int minute = (second % 3600) / 60; + int secondSet = (second % 3600) % 60; - int minuteSet = minute - (hour * 60); - int secondSet = second - (minuteSet * 60); - - return LocalTime.of(hour, minuteSet, secondSet); + return LocalTime.of(hour, minute, secondSet); } public static LocalTime sumLocalTime(LocalTime time1, LocalTime time2) { diff --git a/src/main/java/com/twentythree/peech/usagetime/constant/ConstantValue.java b/src/main/java/com/twentythree/peech/usagetime/constant/ConstantValue.java new file mode 100644 index 00000000..119da83a --- /dev/null +++ b/src/main/java/com/twentythree/peech/usagetime/constant/ConstantValue.java @@ -0,0 +1,9 @@ +package com.twentythree.peech.usagetime.constant; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public final class ConstantValue { + public static final Long MAX_AUDIO_TIME = 600L; +} diff --git a/src/main/java/com/twentythree/peech/usagetime/controller/SwaggerUsageTimeController.java b/src/main/java/com/twentythree/peech/usagetime/controller/SwaggerUsageTimeController.java index 268535c6..ca0fa8e8 100644 --- a/src/main/java/com/twentythree/peech/usagetime/controller/SwaggerUsageTimeController.java +++ b/src/main/java/com/twentythree/peech/usagetime/controller/SwaggerUsageTimeController.java @@ -2,15 +2,9 @@ import com.twentythree.peech.auth.dto.LoginUserId; import com.twentythree.peech.auth.dto.UserIdDTO; -import com.twentythree.peech.usagetime.dto.AudioFileRequestDTO; import com.twentythree.peech.usagetime.dto.response.CheckRemainingTimeResponseDTO; -import com.twentythree.peech.usagetime.dto.response.RemainingTimeResponseDTO; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; +import com.twentythree.peech.usagetime.dto.response.TextAndSecondTimeResponseDTO; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.RequestParam; public interface SwaggerUsageTimeController { @@ -19,6 +13,6 @@ public interface SwaggerUsageTimeController { CheckRemainingTimeResponseDTO checkRemainingTime(@LoginUserId UserIdDTO userId, @RequestParam(name = "audio-time") Long audioTime); @GetMapping("api/v1/usage-time") - RemainingTimeResponseDTO getUsageTime(@LoginUserId UserIdDTO userId); + TextAndSecondTimeResponseDTO getUsageTime(@LoginUserId UserIdDTO userId); } diff --git a/src/main/java/com/twentythree/peech/usagetime/controller/UsageTimeController.java b/src/main/java/com/twentythree/peech/usagetime/controller/UsageTimeController.java index 2856422b..1680dd6b 100644 --- a/src/main/java/com/twentythree/peech/usagetime/controller/UsageTimeController.java +++ b/src/main/java/com/twentythree/peech/usagetime/controller/UsageTimeController.java @@ -2,12 +2,13 @@ import com.twentythree.peech.auth.dto.UserIdDTO; import com.twentythree.peech.usagetime.dto.response.CheckRemainingTimeResponseDTO; -import com.twentythree.peech.usagetime.dto.response.RemainingTimeResponseDTO; +import com.twentythree.peech.usagetime.dto.response.TextAndSecondTimeResponseDTO; import com.twentythree.peech.usagetime.service.UsageTimeService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; + @RequiredArgsConstructor @RestController public class UsageTimeController implements SwaggerUsageTimeController{ @@ -22,7 +23,7 @@ public CheckRemainingTimeResponseDTO checkRemainingTime(UserIdDTO userId, Long a @Override @GetMapping("api/v1/remaining-time") - public RemainingTimeResponseDTO getUsageTime(UserIdDTO userId) { + public TextAndSecondTimeResponseDTO getUsageTime(UserIdDTO userId) { return usageTimeService.getUsageTime(userId.userId()); } } diff --git a/src/main/java/com/twentythree/peech/usagetime/dto/RemainingTimeDTO.java b/src/main/java/com/twentythree/peech/usagetime/dto/RemainingTimeDTO.java new file mode 100644 index 00000000..68b6187d --- /dev/null +++ b/src/main/java/com/twentythree/peech/usagetime/dto/RemainingTimeDTO.java @@ -0,0 +1,12 @@ +package com.twentythree.peech.usagetime.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +@Getter @Setter @AllArgsConstructor +public class RemainingTimeDTO { + + private String text; + private Long second; +} diff --git a/src/main/java/com/twentythree/peech/usagetime/dto/response/RemainingTimeResponseDTO.java b/src/main/java/com/twentythree/peech/usagetime/dto/response/TextAndSecondTimeResponseDTO.java similarity index 53% rename from src/main/java/com/twentythree/peech/usagetime/dto/response/RemainingTimeResponseDTO.java rename to src/main/java/com/twentythree/peech/usagetime/dto/response/TextAndSecondTimeResponseDTO.java index 16d3a05b..610b4048 100644 --- a/src/main/java/com/twentythree/peech/usagetime/dto/response/RemainingTimeResponseDTO.java +++ b/src/main/java/com/twentythree/peech/usagetime/dto/response/TextAndSecondTimeResponseDTO.java @@ -1,10 +1,11 @@ package com.twentythree.peech.usagetime.dto.response; +import com.twentythree.peech.usagetime.dto.RemainingTimeDTO; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; @Getter @Setter @AllArgsConstructor -public class RemainingTimeResponseDTO { - private Long remainingTime; +public class TextAndSecondTimeResponseDTO { + private RemainingTimeDTO remainingTime; } diff --git a/src/main/java/com/twentythree/peech/usagetime/repository/UsageTimeRepository.java b/src/main/java/com/twentythree/peech/usagetime/repository/UsageTimeRepository.java index 0d46e773..17ec1f77 100644 --- a/src/main/java/com/twentythree/peech/usagetime/repository/UsageTimeRepository.java +++ b/src/main/java/com/twentythree/peech/usagetime/repository/UsageTimeRepository.java @@ -5,7 +5,6 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; -import java.time.LocalTime; import java.util.Optional; @Repository diff --git a/src/main/java/com/twentythree/peech/usagetime/service/UsageTimeService.java b/src/main/java/com/twentythree/peech/usagetime/service/UsageTimeService.java index 5d91b95d..fbff84bd 100644 --- a/src/main/java/com/twentythree/peech/usagetime/service/UsageTimeService.java +++ b/src/main/java/com/twentythree/peech/usagetime/service/UsageTimeService.java @@ -1,9 +1,11 @@ package com.twentythree.peech.usagetime.service; -import com.twentythree.peech.auth.dto.UserIdDTO; +import com.twentythree.peech.common.utils.ScriptUtils; +import com.twentythree.peech.usagetime.constant.ConstantValue; import com.twentythree.peech.usagetime.domain.UsageTimeEntity; +import com.twentythree.peech.usagetime.dto.RemainingTimeDTO; import com.twentythree.peech.usagetime.dto.response.CheckRemainingTimeResponseDTO; -import com.twentythree.peech.usagetime.dto.response.RemainingTimeResponseDTO; +import com.twentythree.peech.usagetime.dto.response.TextAndSecondTimeResponseDTO; import com.twentythree.peech.usagetime.repository.UsageTimeRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -14,6 +16,7 @@ import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioSystem; import java.io.File; +import java.time.LocalTime; @Slf4j @RequiredArgsConstructor @@ -61,11 +64,35 @@ public Long subUsageTimeByTimePerSecond(Long userId, Long time) { return remainingTime; } - public RemainingTimeResponseDTO getUsageTime(Long userId) { + public TextAndSecondTimeResponseDTO getUsageTime(Long userId) { UsageTimeEntity usageTime = usageTimeRepository.findByUserId(userId). orElseThrow(() -> new IllegalArgumentException("사용자 아이디가 잘 못 되었습니다.")); log.info("remaining Time: {}", usageTime.getRemainingTime()); - return new RemainingTimeResponseDTO(usageTime.getRemainingTime()); + + Long remainingTimeToSecond = usageTime.getRemainingTime(); + + LocalTime remainingTimeToLocalTime = ScriptUtils.transferSeoondToLocalTime(remainingTimeToSecond); + log.info("remaining Time LocalTime: {}", remainingTimeToLocalTime.getSecond()); + + int hour = remainingTimeToLocalTime.getHour(); + int minute = remainingTimeToLocalTime.getMinute(); + int second = remainingTimeToLocalTime.getSecond(); + + String remainingTimeToText = ""; + + if (hour != 0) { + remainingTimeToText = remainingTimeToText.concat(hour + "시간 "); + } + if (minute != 0) { + remainingTimeToText = remainingTimeToText.concat(minute + "분 "); + } + if (second != 0) { + remainingTimeToText = remainingTimeToText.concat(second + "초 "); + } + + remainingTimeToText = remainingTimeToText.trim(); + + return new TextAndSecondTimeResponseDTO(new RemainingTimeDTO(remainingTimeToText, remainingTimeToSecond)); } public CheckRemainingTimeResponseDTO checkRemainingTime(Long userId, Long audioTime) { From 146980040d151f2fc07cf1a16ab3d99af90185d1 Mon Sep 17 00:00:00 2001 From: snacktime Date: Tue, 16 Jul 2024 17:39:25 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20TT-271=20=EC=B5=9C=EB=8C=80=20?= =?UTF-8?q?=EC=9D=8C=EC=84=B1=20=EB=85=B9=EC=9D=8C=20=EA=B0=80=EB=8A=A5=20?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwaggerUsageTimeController.java | 2 ++ .../controller/UsageTimeController.java | 6 +++++ .../usagetime/service/UsageTimeService.java | 25 +++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/src/main/java/com/twentythree/peech/usagetime/controller/SwaggerUsageTimeController.java b/src/main/java/com/twentythree/peech/usagetime/controller/SwaggerUsageTimeController.java index ca0fa8e8..90472972 100644 --- a/src/main/java/com/twentythree/peech/usagetime/controller/SwaggerUsageTimeController.java +++ b/src/main/java/com/twentythree/peech/usagetime/controller/SwaggerUsageTimeController.java @@ -15,4 +15,6 @@ public interface SwaggerUsageTimeController { @GetMapping("api/v1/usage-time") TextAndSecondTimeResponseDTO getUsageTime(@LoginUserId UserIdDTO userId); + TextAndSecondTimeResponseDTO getMaxAudioTime(); + } diff --git a/src/main/java/com/twentythree/peech/usagetime/controller/UsageTimeController.java b/src/main/java/com/twentythree/peech/usagetime/controller/UsageTimeController.java index 1680dd6b..1cc921c0 100644 --- a/src/main/java/com/twentythree/peech/usagetime/controller/UsageTimeController.java +++ b/src/main/java/com/twentythree/peech/usagetime/controller/UsageTimeController.java @@ -26,4 +26,10 @@ public CheckRemainingTimeResponseDTO checkRemainingTime(UserIdDTO userId, Long a public TextAndSecondTimeResponseDTO getUsageTime(UserIdDTO userId) { return usageTimeService.getUsageTime(userId.userId()); } + + @Override + @GetMapping("api/v1/max-audio-time") + public TextAndSecondTimeResponseDTO getMaxAudioTime() { + return usageTimeService.getMaxAudioTime(); + } } diff --git a/src/main/java/com/twentythree/peech/usagetime/service/UsageTimeService.java b/src/main/java/com/twentythree/peech/usagetime/service/UsageTimeService.java index fbff84bd..85e4f626 100644 --- a/src/main/java/com/twentythree/peech/usagetime/service/UsageTimeService.java +++ b/src/main/java/com/twentythree/peech/usagetime/service/UsageTimeService.java @@ -101,4 +101,29 @@ public CheckRemainingTimeResponseDTO checkRemainingTime(Long userId, Long audioT Long remainingTime = usageTime.getRemainingTime(); return (remainingTime >= audioTime) ? new CheckRemainingTimeResponseDTO("성공") : new CheckRemainingTimeResponseDTO("사용 시간이 부족합니다."); } + + public TextAndSecondTimeResponseDTO getMaxAudioTime() { + Long maxAudioTimeToSecond = ConstantValue.MAX_AUDIO_TIME; + LocalTime maxAudioTimeToLocalTime = ScriptUtils.transferSeoondToLocalTime(maxAudioTimeToSecond); + + int hour = maxAudioTimeToLocalTime.getHour(); + int minute = maxAudioTimeToLocalTime.getMinute(); + int second = maxAudioTimeToLocalTime.getSecond(); + + String maxAudioTimeToText = ""; + + if (hour != 0) { + maxAudioTimeToText = maxAudioTimeToText.concat(hour + "시간 "); + } + if (minute != 0) { + maxAudioTimeToText = maxAudioTimeToText.concat(minute + "분 "); + } + if (second != 0) { + maxAudioTimeToText = maxAudioTimeToText.concat(second + "초 "); + } + + maxAudioTimeToText = maxAudioTimeToText.trim(); + + return new TextAndSecondTimeResponseDTO(new RemainingTimeDTO(maxAudioTimeToText, maxAudioTimeToSecond)); + } }