Skip to content

Commit

Permalink
Merge pull request #216 from twenty-three-23/feature/TT-271
Browse files Browse the repository at this point in the history
TT-271 남은 시간 조회 응답 스펙변경 및 최대 음성 녹음 가능 시간 조회
  • Loading branch information
snacktime81 authored Jul 16, 2024
2 parents 27a7694 + 1469800 commit da6e160
Show file tree
Hide file tree
Showing 8 changed files with 97 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -19,6 +13,8 @@ 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);

TextAndSecondTimeResponseDTO getMaxAudioTime();

}
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand All @@ -22,7 +23,13 @@ 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());
}

@Override
@GetMapping("api/v1/max-audio-time")
public TextAndSecondTimeResponseDTO getMaxAudioTime() {
return usageTimeService.getMaxAudioTime();
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
@@ -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;
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -14,6 +16,7 @@
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioSystem;
import java.io.File;
import java.time.LocalTime;

@Slf4j
@RequiredArgsConstructor
Expand Down Expand Up @@ -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) {
Expand All @@ -74,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));
}
}

0 comments on commit da6e160

Please sign in to comment.