diff --git a/src/main/java/com/example/wini/domain/member/dto/common/ReservedTimeInfo.java b/src/main/java/com/example/wini/domain/member/dto/common/ReservedTimeInfo.java index 8e0a9c6a..b3ffde6b 100644 --- a/src/main/java/com/example/wini/domain/member/dto/common/ReservedTimeInfo.java +++ b/src/main/java/com/example/wini/domain/member/dto/common/ReservedTimeInfo.java @@ -1,9 +1,14 @@ package com.example.wini.domain.member.dto.common; +import static com.example.wini.global.common.constant.StatusReserveTimeConstants.INDEFINITE_HOUR; +import static com.example.wini.global.common.constant.StatusReserveTimeConstants.INDEFINITE_MINUTE; +import static com.example.wini.global.common.constant.StatusReserveTimeConstants.INDEFINITE_SECONDS; +import static com.example.wini.global.common.constant.StatusReserveTimeConstants.SECONDS_PER_HOUR; +import static com.example.wini.global.common.constant.StatusReserveTimeConstants.SECONDS_PER_MINUTE; + import jakarta.validation.constraints.Max; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; -import java.time.Duration; public record ReservedTimeInfo( @NotNull @Min(value = -1) @Max(value = 12) Long hour, @NotNull @Min(value = -1) @Max(value = 59) Long minute) { @@ -11,11 +16,10 @@ public static ReservedTimeInfo of(long hour, long minute) { return new ReservedTimeInfo(hour, minute); } - public Duration toDuration() { - if (this.hour == -1 && this.minute == -1) { - return Duration.ofDays(365L * 100); + public long toSeconds() { + if (this.hour == INDEFINITE_HOUR && this.minute == INDEFINITE_MINUTE) { + return INDEFINITE_SECONDS; } - - return Duration.ofHours(this.hour).plusMinutes(this.minute); + return this.hour * SECONDS_PER_HOUR + this.minute * SECONDS_PER_MINUTE; } } diff --git a/src/main/java/com/example/wini/domain/member/service/MemberService.java b/src/main/java/com/example/wini/domain/member/service/MemberService.java index f2882d46..c3b32f8d 100644 --- a/src/main/java/com/example/wini/domain/member/service/MemberService.java +++ b/src/main/java/com/example/wini/domain/member/service/MemberService.java @@ -1,5 +1,8 @@ package com.example.wini.domain.member.service; +import static com.example.wini.global.common.constant.StatusReserveTimeConstants.INDEFINITE_HOUR; +import static com.example.wini.global.common.constant.StatusReserveTimeConstants.INDEFINITE_MINUTE; +import static com.example.wini.global.common.constant.StatusReserveTimeConstants.INDEFINITE_SECONDS; import static com.example.wini.global.error.exception.ErrorCode.MATE_NOT_FOUND; import static com.example.wini.global.error.exception.ErrorCode.STATUS_NOT_FOUND; @@ -72,6 +75,10 @@ private boolean isStatusValid(Member member) { } private ReservedTimeInfo createReservedTimeInfo(long durationSeconds) { + if (durationSeconds == INDEFINITE_SECONDS) { + return ReservedTimeInfo.of(INDEFINITE_HOUR, INDEFINITE_MINUTE); + } + Duration duration = Duration.ofSeconds(durationSeconds); return ReservedTimeInfo.of(duration.toHours(), duration.toMinutes() % 60); } @@ -83,8 +90,7 @@ public MemberStatusResponse updateStatus(MemberStatusUpdateRequest request) { Status status = statusRepository.findById(request.statusId()).orElseThrow(() -> new CustomException(STATUS_NOT_FOUND)); - Duration statusDuration = request.reservedTimeInfo().toDuration(); - Long statusDurationSeconds = statusDuration.getSeconds(); + Long statusDurationSeconds = request.reservedTimeInfo().toSeconds(); member.updateStatus(status, request.startedAt(), statusDurationSeconds); notifyRoommateOfStatusUpdate(member.getId()); diff --git a/src/main/java/com/example/wini/global/common/constant/StatusReserveTimeConstants.java b/src/main/java/com/example/wini/global/common/constant/StatusReserveTimeConstants.java new file mode 100644 index 00000000..4e5fb748 --- /dev/null +++ b/src/main/java/com/example/wini/global/common/constant/StatusReserveTimeConstants.java @@ -0,0 +1,13 @@ +package com.example.wini.global.common.constant; + +public class StatusReserveTimeConstants { + + public static final int SECONDS_PER_HOUR = 3600; + public static final int SECONDS_PER_MINUTE = 60; + + public static final long INDEFINITE_SECONDS = 365L * 100 * 24 * 60 * 60; + public static final long INDEFINITE_HOUR = -1L; + public static final long INDEFINITE_MINUTE = -1L; + + private StatusReserveTimeConstants() {} +}